私のデータベースがダウンしたときに、Djangoアプリケーションへのクエリがクライアントに即座に500を返すのではなく、タイムアウトになることに気付きました。DBにアクセスできないときにDjango AdminEmailHandlerがハングする
私はデータベースのconnect_timeoutを5秒(explained here)に設定しましたが、ログには例外がより速く表示されますが、例外を印刷した後、クライアントは結果を30秒以上受け取ることはありません。
PDBで何が起こっているのかデバッグOperationalError: (2003, "Can't connect to MySQL server on 'db.example.com' (4)")
私はそれが例外のメールを生成しようとすると、問題は、django.utils.log AdminEmailHandlerであることがわかりました。
は、それがトレースバックにし、すべてのフレームを探しdjango.views.debug ExceptionReporter.get_traceback_text()を呼び出してメールを生成するには、各フレーム上のすべての変数のために、これらの変数の一つがクエリセットであります例外が発生しました。
クエリーセットに複数のアクセスを行い、DB接続のタイムアウトを生成し、より多くのDBタイムアウトを生成するため、クライアントへのエラー応答に時間がかかります。
この問題を回避するには、どのような方法が最適ですか?