赞
踩
PostgreSQL有3种日志,分别是:
日志目录 | 作用 | 可读性 | 默认状态 |
---|---|---|---|
pg_log | 数据库运行日志 | 内容可读 | 默认关闭,需要设置参数启动 |
pg_xlog | WAL 日志,即重做日志 | 内容一般不具有可读性 | 强制开启 |
pg_clog | 事务提交日志,记录的是事务的元数据 | 内容一般不具有可读性 | 强制开启 |
pg_xlog 和 pg_clog 一般是在 PGDATA 下面的文件夹下。
pg_log 默认路径是 PGDATA/pg_log,实际路径可以在 PGDATA/postgresql.conf 文件中设置。
这个日志一般是记录服务器与DB的状态,比如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息,诸如此类。
该日志有.csv格式和.log。建议使用.csv格式,因为它一般会按大小和时间自动切割,毕竟查看一个巨大的日志文件比查看不同时间段的多个日志要难得多。
pg_log是可以被清理删除,压缩打包或者转移,同时并不影响数据库的正常运行。
应用场景:
这个日志是记录的 Postgresql 的WAL信息,也就是一些事务日志信息(transaction log)。
WAL:PostgreSQL在将缓存的数据刷入到磁盘之前,先写日志,这就是PostgreSQL WAL ( Write-Ahead Log )方式,也就是预写日志方式 。
这种日志形如 ‘00000001000000000000008E’,包含的是最近失误的数据镜像;
这些日志会在定时回滚恢复(PITR),流复制(Replication Stream)以及归档时能被用到。
这些日志是非常重要的,记录着数据库发生的各种事务信息,不得随意删除或者移动这类日志文件,不然你的数据库会有无法恢复的风险。
大小:每个日志文件是16M。
注意:当你的归档或者流复制发生异常的时候,事务日志会不断地生成,有可能会造成你的磁盘空间被塞满,最终导致数据库挂掉或者起不来。遇到这种情况不用慌,可以先关闭归档或者流复制功能,备份pg_xlog日志到其他地方,但不要删除。然后删除较早时间的的pg_xlog,有一定空间后再试着启动Postgresql。
pg_clog这个文件也是事务日志文件,但与pg_xlog不同的是它记录的是事务的元数据(metadata),这个日志告诉我们哪些事务完成了,哪些没有完成。这个日志文件一般非常小,但是重要性也是相当高,不得随意删除或者对其更改信息。
这些配置项都在配置文件postgresql.conf中。
实例:
只保留一周的日志,进行循环覆盖:
log_filename = ‘postgresql-%a.log’
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
当查看日志时,由于日志文件的可读性较差,可以通过下面方法将CSV日志导入到数据库表里。
1.调整参数
log_destination = 'csvlog'
logging_collector = on
这两个参数修改后,PG SERVER 需要重启。
2.建表
CREATE TABLE postgres_log ( log_time timestamp(3) with time zone --日志生成时间 user_name text --登陆用户名 database_name text --数据库名 process_id integer, connection_from text --登陆ip 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) );
3.使用copy命令导入数据,然后就可以通过sql语句进行分析。
COPY postgres_log FROM 'd:\\datafile\\postgresql-2018-04-17_094948.csv' WITH csv;
参考:
1.https://blog.csdn.net/yueludanfeng/article/details/83153523
2.https://906179271.iteye.com/blog/2270652
3.https://blog.csdn.net/shanzhizi/article/details/47616645
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。