如何配置Python数据库代码

时间:2014-08-25 23:15:18

标签: python postgresql python-2.7 profiling psql

我有一个小型Python项目(约5000行),使用pg库在中型Postgres数据库表(约5000万个条目)上运行某些繁重的统计计算。

统计计算的本质意味着代码需要一段时间才能运行,我想要分析代码的Python和PSQL。我尝试了我的首选Python分析器(cProfile),但它似乎对PSQL方面视而不见。

如何在我的系统中分析Python和PSQL?

2 个答案:

答案 0 :(得分:3)

我刚刚阅读 cProfile doc。

  • 它测量CPU时间,不计入I / O或进程外时间。我假设您的SQL查询由I / O或进程外时间控制,因此您自然不会看到它们。 (您可以通过提供自己的计时器功能来衡量挂钟时间。)

  • 它在 cumtime 列中按功能报告包含时间,但不按代码行报告,因此您无法获得有关各行费用的时间百分比的任何信息。 如果它按行代码报告挂钟时间百分比,那么您可以看到哪些查询的成本最高。

Here's the technique很多人都在使用。 它不担心计时的准确性。 如果特定查询约占您等待时间的50%或60%,您真的关心它的百分比是多少吗?

事实上,当你在 两个样本 上看到它时,你知道它是一个很大的,你知道它究竟是什么。

答案 1 :(得分:2)

基本上,你不能。

可以衡量PostgreSQL查询中的性能和执行计划,但我甚至无法想象你如何将它与命令式编程语言的配置文件集成。你可以用生成相同查询的Perl完全替换Python,并且它无论如何也不会对PostgreSQL产生一点点差别。

所以 - 有两个有趣的问题需要回答。首先,哪些查询占用了你所有的时间?其次,查询规划器是否做得很好?

首先,有许多日志文件处理器可以为您构建统计信息,但我建议使用pg_stat_statements扩展名。保持运行状态,它将计算运行不同查询的次数以及它们需要多长时间。

对于第二个,您要检查通过EXPLAIN生成的查询计划,看看是否需要更改可用的索引,或者查询本身。这里的主题太大了,但wiki是一个很好的起点。有一个很好的online tool来帮助说明查询计划。