2

私たちの実稼働環境では、サービス (MySQLdb を使用する python プログラム) と mysql サーバー間の接続が不安定で、一部のパッケージが失われ、ブラック マジックが発生し、MySQLdb.Cursor オブジェクトの .execute() が終了しない (またはかかる) 状況が発生することがあります。終了までにかなりの時間がかかります)。

これは Service Worker スレッドの浪費であるため、非常に悪いことです。場合によっては、ワーカー プールが枯渇し、サービスがまったく応答しなくなることがあります。

問題は、MySQLdb.Connection.execute 操作を一定時間後に中断する方法はありますか?

4

2 に答える 2

2

通信にこのような問題がある場合は、不安定な接続を介して SQL コマンドを受信し、それらを信頼できるチャネル (おそらく MySQL サーバーと同じボックスで実行されている) 上の MySQL サーバーに中継する「プロキシ」を作成することを検討してください。このようにして、障害の検出と再試行を完全に制御できます。

于 2008-10-12T23:45:47.060 に答える
1

何が問題なのかを正確に分析する必要があります。サーバーがなくなると、MySQL 接続は最終的にタイムアウトになります。通常、TCP キープアライブは有効になっています。OS レベルの TCP タイムアウトを調整できる場合があります。

データベースが「不安定」な場合は、その方法を確実に調査する必要があります。データベースが実際に問題である可能性は低く、その間のネットワークが問題である可能性が高いです。

あらゆる種類の (いくつかの) ステートフル ファイアウォールを使用している場合、状態の一部が失われている可能性があります。

MySQL のアイドル タイムアウト パラメータを変更することを検討してください。そうしないと、長期間使用されていない接続が「古く」なり、サーバーとクライアントの両方がまだ生きていると認識しているにもかかわらず、その間のステートフルなネットワーク要素が TCP 接続を「忘れて」しまう可能性があります。このような「古い」接続を使用しようとするアプリケーションは、エラーを受け取るまでに長い待機時間が必要になります (ただし、最終的にはそうなるはずです)。

于 2008-10-13T06:57:13.600 に答える