PG 相关系统日志参数
最近值班的时候遇到pg的日志问题,顺带梳理一下 pg的系统日志参数。
默认情况下,很过日志参数是缺省值,需要查看详细日志信息,必须对相关参数进行修改。
logging_collector = on/off
是否将日志重定向至文件中,默认是off, 修改该参数之后后,需要重启DB服务。
对比修改前后,postgresql的进程变化,修改之后多3个postgres: logger
进程。log_directory = 'log'
:日志文件目录,默认是变量 PGDATA的相对路径,即{PGDATA}/log, 因为 PGDATA 路径下存放的数据文件,元数据库表等信息,一般我们会指向到其他目录。避免写日志的时候,影响读写数据文件的性能。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,则会覆盖原来的日志。同时也需要注意该参数只是针对时间到期的切换,如果是因为大小或者系统重启发生切换时,并不会覆盖已有的文件。
"But such truncation only occurs on time-driven rotation, not on restarts or size-driven rotation. Default is off, meaning append to existing files in all cases."
log_lock_waits = off
:控制会话等待时间超过deadlock_timeout
而被锁时是否产生一个日志信息。在判断一个锁等待是否会影响性能时是有用的,缺省是off。log_statement = 'none'
控制记录哪些SQL语句。
none不记录,
ddl 记录所有数据定义命令,比如CREATE,ALTER,和DROP 语句。
mod 记录所有ddl语句,加上数据修改语句INSERT,UPDATE等,
all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句。
log_duration = off
记录每条SQL语句执行完成消耗的时间,将此配置设置为on,用于统计哪些SQL语句耗时较长。开启该参数会消耗IO性能,如果客户端使用扩展查询协议,则会记录解析、绑定、执行三个阶段的时间。log_min_duration_statement = -1
-1 表示不可用记录任何慢查
0 将记录所有SQL语句和它们的耗时 大于0时比如N,单位是ms,表示系统会记录 耗时大于等于N ms的SQL语句。
log_connections = off
表示是否记录连接日志log_disconnections = off
表示是否记录连接断开日志log_line_prefix = '%m %p %u %d %r '
日志输出格式(%m,%p实际意义配置文件中有解释),可根据自己需要设置(能够记录时间,用户名称,数据库名称,客户端IP和端口,方便定位问题)log_min_messages
控制PG 系统日志级别,log_min_error_statement 要大于等于 log_min_messages 时,SQL语句才会被记录(默认ERROR,足够)。默认是WARNING。