-1

データベースを開き、いくつかのクエリを実行してからデータベース接続を閉じるスクリプト A (python スクリプト) があります。

スクリプト A がどのくらいの期間実行されるかは、負荷によって異なります。

while ループでスクリプト A を実行する別のスクリプト B (シェル スクリプト) があります。つまり、スクリプト A は常に実行されます。

データベースがほぼ 100% 以上の CPU を使用しています。接続の開閉を繰り返しているためだと思います。

パフォーマンスを向上させる方法はありますか?

MYSQL データベースを使用していますが、PostgreSQL に移行する予定です。

接続をどこかに保存し、アクティブな場合は同じものを使用するか、新しい接続を作成したいと考えています。私はそれを行う方法がわからないのですか?何か案は?

4

2 に答える 2

2

接続の開閉を繰り返しているためだと思います。

どのような証拠に基づいていますか?追跡するために追跡/プロファイリングを行いましたか?

すべての Python インタープリターの開始も役に立ちません。全体として、これはすべて非常に非効率的に聞こえます。

個人的には、シェル スクリプト ラッパーを取り除くことをお勧めします。同じ Python スクリプトで実行します。外側のループで 1 回接続し、内側の反復ごとに同じ接続を再利用します。

接続を「保存」することはできません。スクリプトが終了すると、接続が閉じます。

PgBouncer のような接続プーラーを使用して、これらすべての接続を作成および破棄するオーバーヘッドを削減できますが、単一のスクリプト内ですべてを実行するほど効果的ではありません。

于 2013-06-25T03:22:44.453 に答える
0

スクリプト B 内に論理フラグを追加して、前の実行が終了しない限り A を実行しないようにすることができます。スクリプト A を開始すると、フラグを有効にし、最後に無効にすることができます。これにより、A のオーバーラップと並列実行が回避されます。

于 2013-06-25T12:29:48.173 に答える