【问题标题】:How to turn off MySQL query cache while using SQLAlchemy?使用 SQLAlchemy 时如何关闭 MySQL 查询缓存?
【发布时间】:2012-12-31 14:51:24
【问题描述】:
我正在通过 SQLAlchemy 库处理一个相当大的 MySQL 数据库,我很想关闭 MySQL 的查询缓存以在每个会话的基础上调试性能问题。当重复它们导致更快的执行时,很难调试慢查询。使用 CLI MySQL 客户端,我可以执行 SET SESSION query_cache_type = OFF; 来获得我正在寻找的结果,并且我想在每个 SQLAlchemy 会话上运行它(当我调试时)。
但我不知道如何配置 SQLAlchemy,使其在实例化新数据库会话时运行 SET SESSION query_cache_type = OFF。
我查看了Engine and Connection docs,但似乎找不到任何东西。
有什么明显的我遗漏的东西,或者更好的方法吗?
【问题讨论】:
标签:
python
mysql
sqlalchemy
pyramid
【解决方案1】:
在定义引擎后立即使用event hook:
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) 全局状态不好:)