PostgreSQL SQL的性能调试方法1--借助统计信息
2009-09-01 22:41
274 查看
在数据库应用开发中,速度慢的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或者函数很慢, 这样 就能 够对 症下 药 了,要不然真是找不原因,很耗 费时间 。 |
相关文章推荐
- 转载: PostgreSQL SQL的性能调试方法1--借助统计信息
- 转载: PostgreSQL SQL的性能调试方法2--数据库log分析
- PostgreSQL SQL的性能调试方法 查看执行计划
- PostgreSQL SQL的性能调试方法3--查看执行计划
- 转载:PostgreSQL SQL的性能调试 方法3-- 查 看 执 行 计 划
- PostgreSQL SQL的性能调试方法3--查看执行计划
- PostgreSQL SQL的性能调试方法2--数据库log分析
- PL\SQL 动态执行表不可访问,本会话的自动统计被禁止,无法断点调试 的解决方法
- T-SQL系列之性能统计信息/数据库IO(MSSQL)
- Oracle性能-查询统计信息的SQL语句
- 通过手动创建统计信息优化sql查询性能案例
- SQL优化一例,由于动态性能视图统计信息不准确引起的查询缓慢
- 通过手动创建统计信息优化sql查询性能案例
- PL\SQL 动态执行表不可访问,本会话的自动统计被禁止,无法断点调试 的解决方法
- [SQL基础]统计信息解释
- DBLINK 无统计信息导致SQL变慢
- sql查询性能调试,用SET STATISTICS IO和SET STATISTICS TIME
- Window下Qt中用qDebug()输出调试信息到Console控制台的设置方法
- django sql_queries 模板中显示所有的sql查询调试信息
- 五种提高 SQL 性能的方法