PG数据库日志分析
一 日志文件目录
/cosmic/postgres/pg_data/log
二 CSV日志文件内容
如上是日志文件postgresql-20.csv的部分内容。日志文件的可读性较差,可以通过下面方法将CSV日志导入到数据库的表里。
三 将CSV日志导入数据库表里
postgresql.conf参数文件里检查参数
log_destination = 'csvlog'
logging_collector = on
创建日志记录表
CREATE TABLE postgres_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)
);
备注:创建日志表 postgres_log用来保存 CSV日志数据。
导入日志信息
COPY postgres_log FROM '/cosmic/postgres/pg_data/log/postgresql-20.csv' WITH csv;四 sql语句分析
运行时间最长的sql
select cast(split_part(split_part(message, ':',2),'ms',1) as numeric) as duration,session_start_time,message,detail,query, *
from postgres_log
where message ~'duration'
and session_start_time>''
order by 1 desc
同类型运行高频的慢sql
select cast(split_part(split_part(message, ':',2),'ms',1) as numeric) as duration,split_part(message, '*/',2),session_start_time,message,detail,query, *
from postgres_log
where message ~'duration'
and session_start_time>''
order by 2 desc
非sql语句操作日志
select * from postgres_log where command_tag not in ('SELECT','UPDATE','DELETE','INSERT')
五 总结
当数据库出现异常需要详细分析日志文件时,上面的方法提供了一个非常有效的方式。将数据库日志导入到表里,能够更准确方便地分析数据库的日志。
PG数据库日志分析
本文2024-09-23 01:13:28发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144569.html