日志文件
PostgreSQL 有三种日志,分别是 pg_log(数据库运行日志),pg_xlog(WAL 日志),pg_clog(事务提交日志)。
日志所在路径
pg_xlog和pg_clog一般是在$PGDATA下面的文件夹下。
pg_log默认路径是$PGDATA/pg_log,实际路径可以在$PGDATA/postgresql.conf文件中设置。
日志内容
pg_log这个日志一般是记录服务器与DB的状态,比如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息,诸如此类。
该日志有.csv格式和.log。建议使用.csv格式,因为它一般会按大小和时间自动切割,毕竟查看一个巨大的日志文件比查看不同时间段的多个日志要难得多。
pg_xlog 记录的是 PostgreSQL 的 WAL 信息,也就是一些事务日志信息。
pg_clog 记录的是事务的状态信息。
关于这两个日志到后面的进阶篇会进行详细的解读,这里就只需要记住有这两个日志就行了。
配置文件中与日志相关的配置项
这些配置项都在配置文件postgresql.conf中。
把日志导入数据库查看
当查看日志时,由于日志文件的可读性较差,可以通过下面方法将CSV日志导入到数据库表里。
1.调整参数
log_destination = 'csvlog'
logging_collector = on
2.建表(该 SQL 目前只适用 17 版本)
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,
-- 新增的三个字段
backend_type text, -- PostgreSQL 13+
leader_pid integer, -- PostgreSQL 14+
query_id bigint -- PostgreSQL 14+
);
3.使用copy命令导入数据,然后就可以通过sql语句进行分析。
COPY postgres_log FROM 'd:\\datafile\\postgresql-2018-04-17_094948.csv' WITH csv;
使用pg_badger工具查看日志
安装并使用专用日志分析工具:
# 安装pgBadger
sudo apt-get install pgbadger # Debian/Ubuntu
sudo yum install pgbadger # RHEL/CentOS
# 分析日志
pgbadger /var/lib/pgsql/data/log/*.csv -o report.html
评论