1.log_destination
log_destination默认是stderr,有三个选项stderr,csvlog,syslog;如果使用csvlog的话,logging_collector必须开启。也可以同时使用csvlog和stderr,会记录两种格式的日志。
2.log_rotation_age
log_rotation_age当logging_collector被启用时,这个参数决定一个个体日志文件的最长生命期。当这些分钟过去后,一个新的日志文件将被创建。将这个参数设置为零将禁用基于时间的新日志文件创建。1d代表1天。
3.log_rotation_size
log_rotation_size:当logging_collector被启用时,这个参数决定一个个体日志文件的最大尺寸。当这么多千字节被发送到一个日志文件后,将创建一个新的日志文件。将这个参数设置为零将禁用基于尺寸的新日志文件创建。
4.log_min_messages
log_min_messages:控制哪些消息级别 被写入到服务器日志。有效值是DEBUG5、DEBUG4、 DEBUG3、DEBUG2、DEBUG1、 INFO、NOTICE、WARNING、 ERROR、LOG、FATAL和 PANIC。每个级别都包括以后的所有级别。级别越靠后,被发送的消息越少。默认值是WARNING。
5.log_min_duration_statement
log_min_duration_statement:相当于mysql的long_query_time,记录慢SQL,超过这个时间的SQL将会被记录到日志里。
6.log_connections
log_connections:导致每一次尝试对服务器的连接被记录,客户端认证的成功完成也会被记录。 只有超级用户能在会话开始时更改这个参数,在会话中它不能被更改。默认 为off。
7.log_disconnections
log_disconnections:导致会话终止也会被记录。日志输出提供的信息类似于 log_connections,不过还外加会话的持续时间。 只有超级用户能在会话开始时更改这个参数,在会话中它不能被更改。默认 为off。
8.log_duration
log_duration:导致每一个完成的语句的持续时间被记录。默认值是off。如果log_duration为on并且log_min_duration_statement为正值,所有持续时间都将被记录,但是只有超过阈值的语句才会被记录查询文本。这种行为有助于在高负载安装中收集统计信息
9.log_line_prefix
log_line_prefix:设置日志输出格式(能够记录时间,用户名称,数据库名称,客户端IP和端口,方便定位问题)默认值是’%m [%p] ',它记录时间戳和进程ID
设置格式符说明:
%a:应用名
%u:用户名
%d:数据库名
%r:远程主机名或 IP 地址,以及远程端口
%h:远程主机名或 IP 地址
%b:后端类型
%p:进程 ID
%t:无毫秒的时间戳
%m:带毫秒的时间戳
%n:带毫秒的时间戳(作为 Unix 时代)
%i:命令标签:会话当前命令的类型
%e:SQLSTATE 错误代码
%c:会话 ID:见下文
%l:对每个会话或进程的日志行号,从 1 开始
%s:进程开始的时间戳
%v:虚拟事务 ID (backendID/localXID)
%x:事务 ID (如果未分配则为 0)
%q:不产生输出,但是告诉非会话进程在字符串的这一点停止;会话进程忽略
%%:纯文字%案例:
log_line_prefix = '%m [%p] %q %u %d %a %r %e '
10.log_lock_waits
log_lock_waits:控制当一个会话为获得一个锁等到超过deadlock_timeout时,是否要产生一个日志消息。这有助于决定是否锁等待造成了性能低下。默认值是off
11.log_statement
log_statement:控制哪些 SQL 语句被记录。有效值是 none (off)、ddl、mod和 all(所有语句)。默认值是none。
none,即不记录
ddl(记录create,drop和alter)
mod(记录ddl+insert,delete,update,truncate,copy from; 如果PREPARE、EXECUTE和 EXPLAIN ANALYZE包含合适类型的命令,它们也会被记录。)
all(mod+select)
12.log_filename
log_filename:是定义记录数据库日志格式文件,一般初始话数据库都会有默认日志文件格式;一般数据库记录日志文件格式会根据数据库日志量、日志保留时长和查询便利等因素来调整日志文件格式。比如按小时生成一个日志文件、按天生成一个日志文件、按星期生成一个日志文件等等。
设置格式符说明:
%a:星期的英文单词的缩写:如星期一, 则返回 Mon
%A:星期的英文单词的全拼:如星期一,返回 Monday
%b:月份的英文单词的缩写:如一月, 则返回 Jan
%B:月份的引文单词的缩写:如一月, 则返回 January
%c:返回datetime的字符串表示,如03/08/15 23:01:26
%d:返回的是当前时间是当前月的第几天
%f:微秒的表示: 范围: [0,999999]
%H:以24小时制表示当前小时
%I:以12小时制表示当前小时
%j:返回 当天是当年的第几天 范围[001,366]
%m:返回月份 范围[0,12]
%M:返回分钟数 范围 [0,59]
%P:返回是上午还是下午–AM or PM
%S:返回秒数 范围 [0,61]。。。手册说明的
%U:返回当周是当年的第几周 以周日为第一天
%W:返回当周是当年的第几周 以周一为第一天
%w:当天在当周的天数,范围为[0, 6],6表示星期天
%x:日期的字符串表示 :03/08/15
%X:时间的字符串表示 :23:22:08
%y:两个数字表示的年份 15
%Y:四个数字表示的年份 2015
%z:与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z:时区名称(如果是本地时间,返回空字符串案例:
log_filename='postgresql-%Y-%m-%d.log'
总结:
对于postgresql数据库调整日志方面的参数来说,大部分参数都是比较方便修改,不需要重启数据库,只需要重新reload参数就可以生效;对于需要重启数据库才生效的参数,尽量放到变更窗口期进行调整,调整过程中注意对整个数据库架构的影响,例如分布式架构和集中式架构等。
参数生效方式可以查询pg_settings系统视图中的context字段进行进行确认。
对于
context
有多种可能的取值。为了降低改变设置的难度,它们是:
internal
这些设置不能被直接修改,它们反映了内部决定的值。某些可能在使用不同配置选项重建系统时或者改变
initdb
的选项时可以调整。
postmaster
这些设置只能在服务器启动时应用,因此任何修改都需要重启服务器。这些设置的值通常都存储在
postgresql.conf
文件中,或者在启动服务器时通过命令行传递。当然,具有更低context
类型的设置也可以在服务器启动时间被设置。
sighup
对于这些设置的修改可以在
postgresql.conf
中完成并且不需要重启服务器。发送一个SIGHUP信号给postmaster会导致它重新读取postgresql.conf
并应用修改。Postmaster将会把SIGHUP信号传递给它的孩子进程,这样它们也会获得新的值。
superuser-backend
对于这些设置的更改可以在
postgresql.conf
中进 行而无需重启服务器。也可以在连接请求包(例如通过libpq 的PGOPTIONS
环境变量)中为一个特定的会话设定它们,但是 只有在连接用户是超级用户时才能这样做。如果,在会话启动后这些设置就 不会改变。如果你在postgresql.conf
改变了它们, 向 postmaster 发送一个SIGHUP信号让 postmaster 重新读取postgresql.conf
。新的值将 只会影响后续启动的会话。
backend
对于这些设置的修改可以在
postgresql.conf
中完成并且不需要重启服务器。它们也可以在一个连接请求包(例如,通过libpq的PGOPTIONS
环境变量)中为一个特定会话设置 ,任何用户都可以为这个会话做这种修改。然而,这些设置在会话启动后永不变化。如果你在postgresql.conf
中修改它们,可以向postmaster发送一个SIGHUP信号让它重读postgresql.conf
。新值只会影响后续启动的会话。
superuser
这些设置可以从
postgresql.conf
设置,或者在会话中用SET
命令设置。仅当没有通过SET
设置会话本地值时,postgresql.conf
中的改变才会影响现有的会话。
user
这些设置可以从
postgresql.conf
设置,或者在会话中用SET
命令设置。任何用户都被允许修改它们的会话本地值。仅当没有通过SET
设置会话本地值时,postgresql.conf
中的改变才会影响现有的会话。