前端之家收集整理的这篇文章主要介绍了
PostgreSQL SQL的性能调试方法2--数据库log分析,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1.log_min_duration_statement |
从log找出执行超过一定时间的 sql。postgresql.conf配置文件 设置 log_min_duration_statement参数的 值。 这个参数是设置执行最小多长时间的 sql 输出 到log。 |
例如输出执行超过 3秒的sql:log_min_duration_statement = 3s |
这个参数设置为 -1是无效。 设置为 0是 输出所有的 sql,但 这样会增加服务器负担,一般不要设置太低的 值。 |
@H_502_77@ 这样设置后输出的sql例子如下:
@H_502_77@ LOG: duration: 3016.724 ms statement: SELECT count(*)
@H_502_77@ FROM pg_class
@H_502_77@
2.contrib/auto_explain功能。Postgres8.4后增加的功能。 |
@H_502_77@ 默认这个功能不能使用的,需要在postgresql.conf 配置文件中设置以下参数。
@H_502_77@ shared_preload_libraries = 'auto_explain'
@H_502_77@ custom_variable_classes = 'auto_explain'
@H_502_77@ auto_explain.log_min_duration = 4s
@H_502_77@ 这样系统在执行的时候如果遇到超过4秒的sql的话,会自动把执行计划输出到log。这样就直接看log就更加容易找到问题点。
@H_502_77@ 执行计划例子:
LOG: duration: 4016.724 ms plan:
@H_502_77@ Aggregate (cost=14.90..14.91 rows=1 width=0)
@H_502_77@ -> Hash Join (cost=3.91..14.70 rows=81 width=0)
@H_502_77@ Hash Cond: (pg_class.oid = pg_index.indrelid)
@H_502_77@ -> Seq Scan on pg_class (cost=0.00..8.27 rows=227 width=4)
@H_502_77@ -> Hash (cost=2.90..2.90 rows=81 width=4)
@H_502_77@ -> Seq Scan on pg_index (cost=0.00..2.90 rows=81 width=4)
@H_502_77@ Filter: indisunique
@H_502_77@ STATEMENT: SELECT count(*)
@H_502_77@ FROM pg_class,pg_index
@H_502_77@ WHERE oid = indrelid AND indisunique;
|
3.log统计分析工具(Postgresql log analyzer) |
@H_502_77@ 比较有名是pgFouine 。这个工具是自动分析指定的log,然后生成HTML报表。把sql log图像化后更加直观。
可以统计分析最慢的sql,调用最多的sql,花费时间最多的sql等等分类。这样我们就很容易找到速度慢的sql。再加以改善。
报表例子如下:
原文链接:https://www.f2er.com/postgresql/197214.html