Djangoアプリケーションで、各SQLクエリの時間を記録したいと思います。DjangoでSQLクエリのタイミングとカウントをすべて追跡するにはどうすればよいですか?
最初の問題は、同じコードからのものであっても、SQLクエリが異なることです。つまり、
SELECT first_name, last_name FROM people WHERE NOW() - birth_date < interval '20' years;
は、それが行わ取得した後
SELECT $ FROM people WHERE $ - birth_date < $;
のようなものになるよう、私たちは、ファイルへの正規化されたクエリとクエリのタイミングを記録することができ、それらを正規化することによって解決したsyslogまたはすることができますstatsd(statsdの場合は、おそらくクエリのハッシュをキーとして使用し、ハッシュ - >クエリリレーションシップのインデックスを別の場所に保存します)。
しかし、より大きな問題は、そのアクションを実行できる場所を特定することです。私が見つけることができる最良の場所はhttps://github.com/django/django/blob/b5bacdea00c8ca980ff5885e15f7cd7b26b4dbb9/django/db/backends/util.py#L46です(注:古代版のDjangoを使用していますが、新しいバージョンにのみ関連する提案はうまくいきます)。
理想的には、Djangoのソースコードを変更するのではなく、これをDjangoの拡張機能にしたいと考えています。私が現在使用しているものを継承して別のバックエンドを作り、そのCursorWrapper
のクラスexecute
メソッドでタイミングとカウンタを記録するように思えます。
それは正しいアプローチですか、それともQuerySet
などのような他のプリミティブを使用する必要がありますか?
ルック(http://stackoverflow.com/q/4375784/「SQLクエリは、各クエリを説明するために実行するための時間とリンクを含む」と表示パネルを持っています223424);タイムスタンプ+デバッグツールバーの完全なロギングが役立つはずです。 – 9000