Flask SQL性能测试:使用flask-sqlalchemy检测慢SQL语句

如题所述

第1个回答  2022-06-14

摘要: Flask , flask-sqlalchemy , SQL

flask-sqlalchemy 可以记录下在客户端请求应用的过程中,后台涉及的SQL语句,以及SQL语句执行的时长,主要基于flask-sqlalchemy下的 get_debug_queries 实现。在主视图脚本中加入一个 after_request 视图如下。

其中开启SQL Debug模式 app.config['SQLALCHEMY_RECORD_QUERIES'] = True , get_debug_queries 返回请求涉及的所有SQL语句,调用 duration 获得SQL执行时长,只要大于0.2就用logging模块记录到磁盘。
启动程序,点击应用功能,logging会把大于时间阈值的SQL写入本地文件query_log.log

直接搜索Slow query,得到以下几条记录

三张表pira_ent_alias,pira_score,pira_senti_stats都是简单的filter查询,没有复杂的逻辑,查看MySQL explain执行计划

explain结果解析

增加索引
三张表都进行了全表扫描,先加上索引再说,给pira_ent_alias增加ent_name和ent_shortname的普通索引

给pira_score,pira_senti_stats增加ent_name和datetime的复合索引,复合索引从字段组合的 最左边开始就要走 ,否则无效,因此如果filter条件只有datetime还是全表扫描,filter条件是ent_name或者ent_name和datetime有效。

给三张表增加索引之后,再次运行get_debug_queries,阈值降低为0,查看日志如下,执行时间都有很大降低

相似回答