PostgreSQL日志管理

日志分类

PostgreSQL有3种日志,分别是:

日志目录作用可读性默认状态
pg_log数据库运行日志内容可读默认关闭,需要设置参数启动
pg_xlogWAL 日志,即重做日志内容一般不具有可读性强制开启
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_log是可以被清理删除,压缩打包或者转移,同时并不影响数据库的正常运行。
应用场景:

  • 当我们有遇到数据库无法启动或者更改参数没有生效时,第一个想到的就是查看这个日志。
pg_xlog

这个日志是记录的Postgresql的WAL信息,也就是一些事务日志信息(transaction log)。

WAL:PostgreSQL在将缓存的数据刷入到磁盘之前,先写日志,这就是PostgreSQL WAL ( Write-Ahead Log )方式,也就是预写日志方式 。

这种日志形如 ‘00000001000000000000008E’,包含的是最近失误的数据镜像;

这些日志会在定时回滚恢复(PITR),流复制(Replication Stream)以及归档时能被用到。

这些日志是非常重要的,记录着数据库发生的各种事务信息,不得随意删除或者移动这类日志文件,不然你的数据库会有无法恢复的风险。
大小:每个日志文件是16M。

注意:当你的归档或者流复制发生异常的时候,事务日志会不断地生成,有可能会造成你的磁盘空间被塞满,最终导致数据库挂掉或者起不来。遇到这种情况不用慌,可以先关闭归档或者流复制功能,备份pg_xlog日志到其他地方,但不要删除。然后删除较早时间的的pg_xlog,有一定空间后再试着启动Postgresql。

pg_clog

pg_clog这个文件也是事务日志文件,但与pg_xlog不同的是它记录的是事务的元数据(metadata),这个日志告诉我们哪些事务完成了,哪些没有完成。这个日志文件一般非常小,但是重要性也是相当高,不得随意删除或者对其更改信息。

配置文件中与日志相关的配置项

这些配置项都在配置文件postgresql.conf中。

  • logging_collector = on/off
    是否将日志重定向至文件中,默认是off。

  • log_directory = ‘pg_log’
    日志文件目录,默认是PGDATA的相对路径,即PGDATA的相对路径,即{PGDATA}/pg_log,也可以改为绝对路径。日志文件可能会非常多,建议将日志重定向到其他目录或分区。将此配置修改其他目录时,必须先创建此目录,并修改权限,使得postgres用户对该目录有写权限。

  • log_filename = ‘postgresql-%Y-%m-%d_%H%M%S.log’
    日志文件命名形式,使用默认即可

  • log_rotation_age = 1d
    单个日志文件的生存期,默认1天,在日志文件大小没有达到log_rotation_size时,一天只生成一个日志文件。

  • log_rotation_size = 10MB
    单个日志文件的大小,如果时间没有超过log_rotation_age,一个日志文件最大只能到10M,否则将新生成一个日志文件。

  • log_truncate_on_rotation = off
    当日志文件已存在时,该配置如果为off,新生成的日志将在文件尾部追加,如果为on,则会覆盖原来的日志。

  • log_lock_waits = off
    控制当一个会话等待时间超过deadlock_timeout而被锁时是否产生一个日志信息。在判断一个锁等待是否会影响性能时是有用的,缺省是off。

  • log_statement = ‘none’ # none, ddl, mod, all
    控制记录哪些SQL语句。none不记录,ddl记录所有数据定义命令,比如CREATE,ALTER和DROP 语句。mod记录所有ddl语句,加上数据修改语句INSERT,UPDATE等。all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句。

  • log_duration = off
    记录每条SQL语句执行完成消耗的时间,将此配置设置为on,用于统计哪些SQL语句耗时较长。

  • log_min_duration_statement = -1
    -1表示关闭记录。0表示记录所有statements的执行时间按,若为>0(单位为ms)的一个值,则记录执行时间大于该值的statements。
    个人更喜欢使用该配置来跟踪那些耗时较长,可能存在性能问题的SQL语句。虽然使用log_statement和log_duration也能够统计SQL语句及耗时,但是SQL语句和耗时统计结果可能相差很多行,或在不同的文件中,但是log_min_duration_statement会将SQL语句和耗时在同一行记录,更方便阅读。

  • log_connections = off
    是否记录连接日志

  • log_disconnections = off
    是否记录连接断开日志

  • log_line_prefix = '%m %p %u %d %r ’
    日志输出格式(%m,%p实际意义配置文件中有解释),可根据自己需要设置(能够记录时间,用户名称,数据库名称,客户端IP和端口,方便定位问题)。

  • log_timezone = ‘Asia/Shanghai’
    日志时区,最好和服务器设置同一个时区,方便问题定位

实例:
只保留一周的日志,进行循环覆盖:
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

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 前言 何为 PostgreSQL? PostgreSQL 格式约定 更多信息 臭虫汇报指导 I. 教程 1. 从头开始 2. SQL 语言 3. 高级特性 II. SQL 语言 4. SQL 语法 5. 数据定义 6. 数据操作 7. 查询 8. 数据类型 9. 函数和操作符 10. 类型转换 11. 索引 12. 并发控制 13. 性能提升技巧 III. 服务管理 14. 安装指导 15. 在 Windows 上安装客户端 16. 操作系统环境 17. 服务器配置 18. 数据库角色和权限 19. 管理数据库 20. 用户认证 21. 区域 22. 日常数据库维护工作 23. 备份与恢复 24. 高可用性与负载均衡 25. 监控数据库的活动 26. 监控磁盘使用情况 27. 可靠性和预写式日志 28. 回归测试 IV. 客户端接口 29. libpq - C库 30. 大对象 31. ECPG - 在C里嵌入SQL 32. 信息模式 V. 服务器端编程 33. 扩展 SQL 34. 触发器 35. 规则系统 36. 过程语言 37. PL/pgSQL - SQL 过程语言 38. PL/Tcl - Tcl 过程语言 39. PL/Perl - Perl 过程语言 40. PL/Python - Python 过程语言 41. 服务器编程接口 VI. 参考手册 I. SQL 命令 II. PostgreSQL 客户端应用程序 III. PostgreSQL 服务器应用程序 VII. 内部 42. PostgreSQL 内部概貌 43. 系统表 44. 前/后端协议 45. PostgreSQL 编码约定 46. 本地语言支持 47. 书写一个过程语言处理器 48. 基因查询优化器 49. 索引访问方法接口定义 50. GiST 索引 51. GIN 索引 52. 数据库物理存储 53. BKI 后端接口 54. 规划器如何使用统计信息 VIII. 附录 A. PostgreSQL 错误代码 B. 日期/时间支持 C. SQL 关键字 D. SQL 兼容性 F. CVS 仓库 G. 文档 H. 外部项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值