PG 相关系统日志参数

最近值班的时候遇到pg的日志问题,顺带梳理一下 pg的系统日志参数。

默认情况下,很过日志参数是缺省值,需要查看详细日志信息,必须对相关参数进行修改。

  1. logging_collector = on/off 是否将日志重定向至文件中,默认是off, 修改该参数之后后,需要重启DB服务。
    对比修改前后,postgresql的进程变化,修改之后多3个 postgres: logger 进程。
  2. postgres pg_log 文件夹下的日志能不能删除 pg数据库日志_日志文件

  3. log_directory = 'log' :日志文件目录,默认是变量 PGDATA的相对路径,即{PGDATA}/log, 因为  PGDATA 路径下存放的数据文件,元数据库表等信息,一般我们会指向到其他目录。避免写日志的时候,影响读写数据文件的性能。
  4. log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'  生成的日志文件命名规则。一般使用默认值即可。
  5. log_rotation_age = 1d 单个日志文件的生命周期,默认1天,在日志文件大小没有达到log_rotation_size时,一天只生成一个日志文件
  6. log_rotation_size = 10MB  单个日志文件的大小,如果时间没有超过log_rotation_age,一个日志文件最大只能到10M,否则将新生成一个日志文件。
  7. 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."

  1. log_lock_waits = off :控制会话等待时间超过 deadlock_timeout 而被锁时是否产生一个日志信息。在判断一个锁等待是否会影响性能时是有用的,缺省是off。
  2. log_statement = 'none' 控制记录哪些SQL语句。

none不记录,

ddl 记录所有数据定义命令,比如CREATE,ALTER,和DROP 语句。

mod 记录所有ddl语句,加上数据修改语句INSERT,UPDATE等,

all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句。

  1. log_duration = off 记录每条SQL语句执行完成消耗的时间,将此配置设置为on,用于统计哪些SQL语句耗时较长。开启该参数会消耗IO性能,如果客户端使用扩展查询协议,则会记录解析、绑定、执行三个阶段的时间。
  2. log_min_duration_statement = -1

-1 表示不可用记录任何慢查

0 将记录所有SQL语句和它们的耗时 大于0时比如N,单位是ms,表示系统会记录 耗时大于等于N ms的SQL语句。

  1. log_connections = off 表示是否记录连接日志
  2. log_disconnections = off 表示是否记录连接断开日志
  3. log_line_prefix = '%m %p %u %d %r ' 日志输出格式(%m,%p实际意义配置文件中有解释),可根据自己需要设置(能够记录时间,用户名称,数据库名称,客户端IP和端口,方便定位问题)
  4. log_min_messages 控制PG 系统日志级别,log_min_error_statement 要大于等于 log_min_messages 时,SQL语句才会被记录(默认ERROR,足够)。默认是WARNING。