【处理时间】日志输出设置
可以使用postgresql的auto_explain功能来记录日志,这样就可以查看每个SQL的处理时间,以此来判断是否超过了指定的秒数阈值。
将输出示例发送到postgresql.log文件中
Sep 24 11:59:37 dev postgres[12692]: [21-1] LOG: duration: 0.518 ms plan:
Sep 24 11:59:37 dev postgres[12692]: [21-2] #011Query Text: UPDATE dtb_session SET sess_data= $1, update_date= CURRENT_TIMESTAMP WHERE sess_id = $2
Sep 24 11:59:37 dev postgres[12692]: [21-3] #011Update on dtb_session (cost=0.00..6.07 rows=1 width=47)
Sep 24 11:59:37 dev postgres[12692]: [21-4] #011 -> Seq Scan on dtb_session (cost=0.00..6.07 rows=1 width=47)
Sep 24 11:59:37 dev postgres[12692]: [21-5] #011 Filter: (sess_id = $2)
需要编译postgresql模块才能完成设置。
以下是设置步骤。
请根据需要自行更改版本。
$ cd /usr/local/src
$ tar zxvf postgresql-9.1.9.tar.gz
$ cd postgresql-9.1.9
$ cp -i ../config.nice-postgresql-9.1.9 .
$ ./config.nice-postgresql-9.1.9
$ make
※ 不要运行 make install!
$ cd contrib/auto_explain
$ make
$ make install
这边要执行make install。
追加postgresql.conf配置
$ vi /var/lib/pgsql/data/postgresql.conf
所以,下面的行被注释掉了。
#shared_preload_libraries = '' # (change requires restart)
shared_preload_libraries = ‘auto_explain' # (change requires restart)
#custom_variable_classes = '' # list of custom variable class names
custom_variable_classes = 'auto_explain' # list of custom variable class names
重启PostgreSQL。
$ /etc/init.d/pgsql restart