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

PostgreSQL SQL的性能调试方法1--借助统计信息

数据库应用开发中,速度慢的sql比比皆是。很多速度很慢都是sql写的不好,效率不高。比如无用的循环查询,判断,不必要的子查询,写的sql用不上 索引等等。特别是数据量很大的时候,很是头疼。我就遇到过几千万条数据的表的查询,由于子查询过多,要几个小时才执行完。显然是不符合要求的。

怎么改善呢?

解决 个速度 问题 ,我 首先最主要的是要找到那些sql很慢,或者sql中的那部分很慢。怎 样寻 找速度很慢的sql,我 可以借助系 提供的 统计 信息功能 找。
1.pg_stat_user_functions :sql文中用了存储过 程或者函数的情况,可以通 过这 统计 信息view来 看。
funcid,schemaname,funcname :函数的ID
calls : 行回数
total_time : 函数 行的 时间 位毫秒。
self_time : 不包含其他函数 时间 的自己本身的 时间
例子:
=# SELECT * FROM pg_stat_user_functions;
funcid | schemaname | funcname | calls | total_time | self_time
--------+------------+----------+-------+------------+-----------
16434 | public | proc_1 | 4 | 185 | 185
16738 | public | proc_2 | 5 | 91 | 91
16741 | public | proc_3 | 2 | 76 | 5
(3 rows)
里面我 可以看到proc_3自己自身 行的 时间 时间 时间 非常少,可以初步确定速度慢的函数不是proc_3。因此我就需要去 查询 其他函数 时间
个机能系 是没有的,需要在postgresql.conf 里面 置。 是none。需要改 pl或者all。
track_functions = pl # none,pl,all
2.pg_stat_statements :contrib/pg_stat_statements模 下的机能,系 也是没有的。
userid : sql的用
dbid : 数据 ID
query : sql
calls : 行回数
total_time : 总时间 位微秒。
rows : 理行数。返回的行数或者修改的行数。
例子:
SELECT query,calls,total_time,rows
FROM pg_stat_statements ORDER BY total_time DESC LIMIT 3;
-[ RECORD 1 ]------------------------------------------------------------
query | UPDATE branches SET bbalance = bbalance + $1 WHERE bid = $2;
calls | 3000
total_time | 35.9654100
rows | 3000
功能也是需要在postgresql.conf 里面 置。
shared_preload_libraries = 'pg_stat_statements'
custom_variable_classes = 'pg_stat_statements'
上面的两种方法 就可以找到那些sql或者函数很慢, 这样 就能 够对 症下 了,要不然真是找不原因,很耗 费时间

原文地址:https://www.jb51.cc/postgresql/197215.html

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

相关推荐