whx20202
2018-05-11 10:25:59 +08:00
建议排查数据库的 slow log 看看数据库端执行时间多长
1. postgresql 这种慢 SQL 日志,会把 python 进程和数据库中间,传数据的时间也包括在内,而你读了 9W 行,这个时间也很恐怖
2. 有时候 SQLalchemy 序列化的性能很低很低,之前搞 OpenStack 性能优化的时候,APM 团队说,我们环境上 99%的时间都在序列化上,你可以考虑上一个 cprofile 看一下。
3. 首先得在数据库端查看执行计划,我觉得你的 SQL 本身可能也有问题
所以:
1. 在数据库中查看执行计划,看看有没有做到读最少的 IO,返回最合适的内容
2. 如果 SQL 没问题,可以考虑在数据库节点用命令行 导出结果,这个时间应该比你看到的慢 SQL 时间短,因为省去了路上的时间,和服务器解析的时间(尤其是用了 ORM 框架的情况下)
3. 也可以考虑上 cprofile
4. 9W 行真的需要吗,有没有可能在数据库里直接聚合一下?