Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何调试SQLAlchemy查询的缓慢启动时间?_Python_Mysql_Performance_Orm_Sqlalchemy - Fatal编程技术网

Python 如何调试SQLAlchemy查询的缓慢启动时间?

Python 如何调试SQLAlchemy查询的缓慢启动时间?,python,mysql,performance,orm,sqlalchemy,Python,Mysql,Performance,Orm,Sqlalchemy,我正在尝试诊断我的应用程序在执行SQL Alchemy查询时所花费的时间。我观察到在执行查询和启动SQLAlchemy事务之间有300毫秒的间隔。在此时间间隔内,没有日志报告引擎盖下发生的情况。我有以下代码段,它创建了一个新的作用域会话,然后使用该会话按主键查找项。此操作大约需要500毫秒 有人能建议我如何加快查找速度吗?开始执行查询所需的375毫秒是我真正关心的地方 函数片段: def review_item(review_id): """Review a specific item.

我正在尝试诊断我的应用程序在执行SQL Alchemy查询时所花费的时间。我观察到在执行查询和启动SQLAlchemy事务之间有300毫秒的间隔。在此时间间隔内,没有日志报告引擎盖下发生的情况。我有以下代码段,它创建了一个新的作用域会话,然后使用该会话按主键查找项。此操作大约需要500毫秒

有人能建议我如何加快查找速度吗?开始执行查询所需的375毫秒是我真正关心的地方

函数片段:

def review_item(review_id):
    """Review a specific item."""        
    logger.info('Creating a new DB session')
    session = m.DBSession()
    logger.debug('Session created')

    logger.info('Building query at %s', review_id, datetime.now())
    qry = session.query(m.Result).filter_by(image_id=review_id)
    logger.info('Running query')
    item = qry.one()
    logger.info('Retrieved item %s at %s', item, datetime.now())

    return item
我看到以下日志输出:

2015-10-19 13:51:06,874 INFO  [treachery.views][waitress] Creating a new DB session
2015-10-19 13:51:06,874 DEBUG [treachery.views][waitress] Session created
2015-10-19 13:51:06,875 INFO  [treachery.views][waitress] Building query at 2015-10-19 13:51:06.875089
2015-10-19 13:51:06,875 INFO  [treachery.views][waitress] Running query
2015-10-19 13:51:07,261 INFO  [sqlalchemy.engine.base.Engine][waitress] BEGIN (implicit)
2015-10-19 13:51:07,262 INFO  [sqlalchemy.engine.base.Engine][waitress] SELECT result.image_id AS result_image_id, result.tag_classes AS result_tag_classes, result.tag_probs AS result_tag_probs 
 FROM result 
 WHERE result.image_id = %(image_id_1)s
2015-10-19 13:51:07,262 INFO  [sqlalchemy.engine.base.Engine][waitress] {'image_id_1': u'2015/05/e1f04824d496457cb74b668976b991ef.jpeg'}
2015-10-19 13:51:07,372 DEBUG [sqlalchemy.engine.base.Engine][waitress] Col ('result_image_id', 'result_tag_classes', 'result_tag_probs')
2015-10-19 13:51:07,373 DEBUG [sqlalchemy.engine.base.Engine][waitress] Row (u'2015/05/e1f04824d496457cb74b668976b991ef.jpeg', [u'nobody', u'painting', u'decoration', u'indoors', u'food', u'pattern', u'frame', u'one', u'travel', u'illustration', u'hanging', u'wood', u'background', u'people', u'wall', u'table', u'design', u'exhibition', u'house', u'flower'], [0.989168643951416, 0.975763559341431, 0.96831738948822, 0.952613711357117, 0.945497691631317, 0.941344261169434, 0.932282328605652, 0.928139090538025, 0.926733613014221, 0.912606000900269, 0.883346319198608, 0.875022172927856, 0.871710419654846, 0.865160286426544, 0.86181652545929, 0.821693539619446, 0.810265898704529, 0.798673629760742, 0.796967625617981, 0.789543986320496])
2015-10-19 13:51:07,373 DEBUG [treachery.views][waitress] Retrieved item <treachery.models.Result object at 0x7f82b409a250> at 2015-10-19 13:51:07.373463

当查询开始执行时,观察运行查询的日志行和BEGINimplicit日志行之间的长延迟,大约为400ms。

SQLAlchemy延迟连接到数据库,因此如果上面的代码是应用程序中运行的第一个SQL查询,则需要创建一个新连接,对于许多RDBMS来说,这是一个相当缓慢的操作

我的猜测是正确的,那么对同一函数的后续调用不应该有400毫秒的延迟


下面是一篇讨论MySQL在打开新连接时速度缓慢的各种原因的文章。

谢谢!我也注意到了。SQLAlchemy运行几个查询—可能是为了校准数据库实例。我先运行了几个查询来预热引擎,然后运行了这个查询。图像id上有索引吗?有。这是一个外键,还有一个索引:btree image\u id COLLATE pg\u catalog.default varchar\u pattern\u ops