文章目录
环境
系统平台:N/A
版本:6.0,5.6.5,5.6.4,5.6.3,5.6.1,4.5.2,4.5,4.3.4.9,4.3.4.8,4.3.4.7,4.3.4.6,4.3.4.5,4.3.4.4,4.3.4.3,4.3.4.2,4.3.4,4.7.8,4.7.7,4.7.6,4.7.5,4.3.2,4.1.1
文档用途
本文介绍了如何通过设置数据库日志获取数据库中执行较慢的SQL语句。
详细信息
首先,修改配置文件postgresql.conf,设置以下参数,修改完成后,需重启数据库
#开启日志记录
logging_collector = on
#设置日志输出格式,格式有stderr(默认), csvlog , syslog
log_destination = 'csvlog'
#设置日志存放位置,下面设置表示日志存放在$PGDATA下hgdb_log日志中
log_directory = 'hgdb_log'
#设置日志截断
log_truncate_on_rotation = on
#设置日志的名称
log_filename = 'highgodb_%d.log'
#设置跟踪的SQL语句级别,级别包含none(默认,只记录出错信息), ddl, mod, all
log_statement = all
#记录执行超过以下时间的SQL语句,单位毫秒
log_min_duration_statement = 5000
注:
日志保留时间通过日志名称控制,设置如下
log_filename = 'postgresql-%I.log' #最多保存12小时的日志,每小时一个文件
log_filename = 'postgresql-%H.log' #最多保存24小时的日志,每小时一个文件
log_filename = 'postgresql-%w.log' #最多保存一周的日志,每天一个文件
log_filename = 'postgresql-%d.log' #最多保存一个月的日志,每天一个文件
log_filename = 'postgresql-%j.log' #最多保存一年的日志,每天一个文件
创建日志分析用表
CREATE TABLE hgdb_log
( log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
PRIMARY KEY (session_id, session_line_num)
);
将日志文件导入数据
COPY hgdb_log FROM '/path/to/logfile.csv' WITH csv;
使用SQL对日志进行分析,示例如下
按执行时间由长到短排序
select log_time,database_name,user_name,application_name,substr(message, 7,8),message from hgdblog where message like '%执行时间%' order by substr(