6

SQLAlchemy ライブラリを介してかなり大きな MySQL データベースを操作しています。MySQL のクエリ キャッシュをオフにして、セッションごとにパフォーマンスの問題をデバッグしたいと考えています。遅いクエリを繰り返し実行すると実行速度が大幅に向上する場合、そのクエリをデバッグするのは困難です。CLI MySQL クライアントを使用するSET SESSION query_cache_type = OFF;と、探している結果を得るために実行できます。これをすべての SQLAlchemy セッション (デバッグ中) で実行したいと考えています。

SET SESSION query_cache_type = OFFしかし、新しいデータベース セッションをインスタンス化するときにSQLAlchemy が実行されるように SQLAlchemy を構成する方法がわかりません。

エンジンと接続のドキュメントを見てきましたが、何も見つからないようです。

私が行方不明になっていること、またはこれを行うためのより良い方法があることは明らかですか?

4

1 に答える 1

6

エンジンを定義した直後にイベント フックを使用します。

from sqlalchemy import event

def disable_query_cache(conn, record):
    conn.cursor().execute("SET SESSION query_cache_type = OFF")


# this is probably in your Pyramid setup code
engine = create_engine(...)

if DEBUGGING:
    event.listen(engine, 'connect', disable_query_cache)

クラス自体にフックを追加することでこれをグローバルに行うことができますPoolが、(a) フックを追加するかどうかを決定できるように、おそらく Pyramid 設定を使用可能にしたい場合と、(b) グローバル状態が悪い場合:)

于 2013-01-17T05:59:18.017 に答える