微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

转载: PostgreSQL SQL的性能调试方法2--数据库log分析

原文:http://blog.csdn.net/hantiannan/article/details/4513028

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,但这样会增加服务器负担,一般不要设置太低的值。
这样设置后输出sql例子如下:
LOG:duration: 3016.724 ms statement: SELECT count(*)
FROMpg_class
2.contrib/auto_explain功能。Postgres8.4后增加功能
认这个功能不能使用的,需要在postgresql.conf配置文件中设置以下参数。
shared_preload_libraries= 'auto_explain'
custom_variable_classes= 'auto_explain'
auto_explain.log_min_duration= 4s
这样系统在执行的时候如果遇到超过4秒的sql的话,会自动把执行计划输出到log。这样就直接看log就更加容易找到问题点。

执行计划例子:

LOG:duration: 4016.724msplan:

Aggregate(cost=14.90..14.91rows=1 width=0)
->Hash Join(cost=3.91..14.70rows=81 width=0)
HashCond: (pg_class.oid = pg_index.indrelid)
->Seq Scan onpg_class(cost=0.00..8.27rows=227 width=4)
->Hash(cost=2.90..2.90 rows=81width=4)
->Seq Scan onpg_index(cost=0.00..2.90rows=81 width=4)
Filter:indisunique
STATEMENT:SELECTcount(*)
FROMpg_class,pg_index
WHEREoid = indrelid AND indisunique;
3.log统计分析工具(Postgresql log analyzer)

比较有名是pgFouine。这个工具是自动分析指定的log,然后生成HTML报表。把sqllog图像化后更加直观。

可以统计分析最慢的sql调用最多的sql,花费时间最多的sql等等分类。这样我们就很容易找到速度慢的sql。再加以改善。

sqlsql性能调试方法2--数据库log分析" style="border-style:none" src="" src="/res/2020/05-08/07/46c8b054896ebdc032eacc833610af5e.png">

报表例子如下:

sqlsql性能调试方法2--数据库log分析" style="border-style:none" src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif">

sqlsql性能调试方法2--数据库log分析" style="border-style:none" src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif">

sqlsql性能调试方法2--数据库log分析" style="border-style:none" src="" src="/res/2020/05-08/07/46c8b054896ebdc032eacc833610af5e.png">

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐