我正在通过SQLAlchemy库使用一个相当大的MySQL数据库,我想关闭MySQL的查询缓存,以便在每个会话的基础上调试性能问题。当重复慢查询会导致更快的执行时,很难调试慢查询。使用CLI MySQL客户端,我可以执行SET SESSION query_cache_type = OFF;来实现我想要的结果,并且我希望在每个SQLAlchemy会话上运行它(当我调试时)。
但是我不知道如何配置SQLAlchemy,让它在实例化一个新的数据库会话时运行SET SESSION query_cache_type = OFF。
我已经查看了Engine and Connection docs,但似乎什么也找不到。
有没有什么明显的我遗漏的东西,或者有更好的方法来做这件事?
发布于 2013-01-17 13:59:18
定义引擎后立即使用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)您可能无论如何都希望金字塔设置可用,以便您可以决定是否添加钩子,以及(b)全局状态不好:)
https://stackoverflow.com/questions/14372760
复制相似问题