PostgreSQL的日志文件参数及注意事项有哪些

99次阅读
没有评论

共计 5233 个字符,预计需要花费 14 分钟才能阅读完成。

这篇文章主要介绍“PostgreSQL 的日志文件参数及注意事项有哪些”,在日常操作中,相信很多人在 PostgreSQL 的日志文件参数及注意事项有哪些问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PostgreSQL 的日志文件参数及注意事项有哪些”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

运行日志参数

1.1 运行日志主要参数

运行日志主要相关的参数如下,默认没有开启的话没有 log 目录,开启后会自动生成。

参数

可选值 / 说明

og_destination = csvlog  

# stderr, csvlog, syslog, and eventlog ,csvlog requires logging_collector to be on

一般选择这个,可以将 csv 日志导入数据库中查看

logging_collector = on

# Enable capturing of stderr and csvlog into log files
选 scv 格式的日志必须设置这个参数 on,修改需要重启

log_directory = log

日志输出目录

log_filename = postgresql-%Y-%m-%d_%H%M%S.log

日志输出目录

log_file_mode = 0600 

日志文件名字格式

log_truncate_on_rotation = on

# creation mode for log files  日志文件权限

log_rotation_age = 1d

设置重用日志

log_rotation_size = 10MB

多长时间重用日志

log_min_messages = warning 

日志达到多大重用

log_min_duration_statement = 60

# debug5,debug4,debug3,debug2,debug1,info,notice,warning,error,log,fatal,panic

log_checkpoints = on

慢 sql 记录(超过多长时间的 sql)

log_connections = on

记录 checkpoint 操作

log_disconnections = on

记录会话断开操作

log_duration = on

记录 sql 执行时间

log_lock_waits = on 

# log lock waits = deadlock_timeout  记录时间长的阻塞

log_statement = ddl  

# none, ddl, mod, all  记录 ddl

1.2  注意事项

设置 csv 格式日志的话一定要设置 logging_collector 为 on
pg10 版本的运行日志一般在 $PGDATA/log 目录下
log 目录是开启运行日志后自动生成的
可以通过 log_rotation_age 来设置多久重新生成一个日志文件
可以通过 log_rotation_size 来设置多大的日志来重新生成日志文件
上面两个都需要配合 log_truncate_on_rotation 为 on 来使用
可以开启 log_duration 来记录 sql 执行时间
可以开启 log_statement 来记录数据库 ddl

1.3  csv 日志载入数据库

Oracle 有外部表,pg 也有 fdw。oracle 可以用外部表的方式将 alert 日志载入到数据库中用 SQL 来查看。PG 可以用 copy 命令将 csv 日志载入到数据库中用 SQL 来查看。这种方式都可以很方便得用 sql 来查询想要的日志内容。这种方式的有点是显而易见的,就是可以很容易得用 SQL 来查询和过滤日志,pg 的日志文件可以截断分割成若干小文件,可以载入自己需要的日志。而 Oracle 的 alert 通常会很大。

缺点也是显而易见的,如果数据库挂了就不能用这种方式来查看日志。而且 pg 的 csv 日志不容易直接阅读。

1.3.1 创建日志表

创建了一个数据库和新的表来载入日志

postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database test as user pg12 .
test=# CREATE TABLE pg_log
test-# (
test(#  log_time timestamp(3) with time zone,
test(#  user_name text,
test(#  database_name text,
test(#  process_id integer,
test(#  connection_from text,
test(#  session_id text,
test(#  session_line_num bigint,
test(#  command_tag text,
test(#  session_start_time timestamp with time zone,
test(#  virtual_transaction_id text,
test(#  transaction_id bigint,
test(#  error_severity text,
test(#  sql_state_code text,
test(#  message text,
test(#  detail text,
test(#  hint text,
test(#  internal_query text,
test(#  internal_query_pos integer,
test(#  context text,
test(#  query text,
test(#  query_pos integer,
test(#  location text,
test(#  application_name text,
test(#  PRIMARY KEY (session_id, session_line_num)
test(#);

CREATE TABLE
test=#

1.3.2 查看日志文件名字

[pg12@whf307 ~]$ cd $PGDATA/log
[pg12@whf307 log]$ ls -rtl
total 24
-rw——- 1 pg12 pg12  166 May 30 13:32 postgresql-2019-05-30_133202.log
-rw——- 1 pg12 pg12  496 May 30 13:32 postgresql-2019-05-30_133202.csv
-rw——- 1 pg12 pg12  0 May 30 13:32 postgresql-2019-05-30_133254.log
-rw——- 1 pg12 pg12  170 May 30 13:32 postgresql-2019-05-30_133254.csv
-rw——- 1 pg12 pg12  166 May 30 13:33 postgresql-2019-05-30_133324.log
-rw——- 1 pg12 pg12 6566 May 30 16:16 postgresql-2019-05-30_133324.csv
-rw——- 1 pg12 pg12  0 May 31 00:00 postgresql-2019-05-31_000000.log
-rw——- 1 pg12 pg12  0 May 31 00:00 postgresql-2019-05-31_000000.csv
[pg12@whf307 log]$
[pg12@whf307 log]$ pwd
/soft/pg_data/log
[pg12@whf307 log]$

1.3.3 载入到数据库

[pg12@whf307 log]$ psql  test
psql (12beta1)
Type help for help.
test=# \d
  List of relations
 Schema |  Name  | Type  | Owner

——–+——–+——-+——-
 public | pg_log | table | pg12
(1 row)

test=# copy pg_log from /soft/pg_data/log/postgresql-2019-05-30_133324.csv with csv;

COPY 32

1.3.4 查看日志

这样就可以用 sql 来查看了。执行一个普通查询

test=# select relfilenode from pg_class where relname= pg_log
 relfilenode

————-
  16385
(1 row)

载入最新的日志。这里可以重复载入,不会覆盖之前的数据。

[pg12@whf307 log]$ ls -rtl
total 32
-rw——- 1 pg12 pg12  166 May 30 13:32 postgresql-2019-05-30_133202.log
-rw——- 1 pg12 pg12  496 May 30 13:32 postgresql-2019-05-30_133202.csv
-rw——- 1 pg12 pg12  0 May 30 13:32 postgresql-2019-05-30_133254.log
-rw——- 1 pg12 pg12  170 May 30 13:32 postgresql-2019-05-30_133254.csv
-rw——- 1 pg12 pg12  166 May 30 13:33 postgresql-2019-05-30_133324.log
-rw——- 1 pg12 pg12 6566 May 30 16:16 postgresql-2019-05-30_133324.csv
-rw——- 1 pg12 pg12  0 May 31 00:00 postgresql-2019-05-31_000000.log
-rw——- 1 pg12 pg12 4545 May 31 00:37 postgresql-2019-05-31_000000.csv
[pg12@whf307 log]$ psql test
psql (12beta1)
Type help for help.
test=# copy pg_log from /soft/pg_data/log/postgresql-2019-05-31_000000.csv with csv;

COPY 28

再次查看日志

test=# SELECT COUNT(*) FROM PG_LOG;
 count

——-
  60
(1 row)

test=# select log_time at time zone UTC ,database_name,connection_from,query from pg_log where log_time to_timestamp(2019-05-31 14:35:00 , yyyy-mm-dd hh34:mi:ss
  timezone  | database_name | connection_from |  query 

————————-+—————+—————–+———————————————————–
 2019-05-31 06:35:42.843 | test  | [local]  |

 2019-05-31 06:35:57.582 | test  | [local]  |

 2019-05-31 06:36:54.369 | test  | [local]  | selectt relfilenode from pg_class where relname= pg_log
 2019-05-31 06:36:58.002 | test  | [local]  |

 2019-05-31 06:37:00.192 | test  | [local]  |

 2019-05-31 06:37:11.651 |  | [local]  |

 2019-05-31 06:37:11.651 | test  | [local]  |

(7 rows)

可以看到记录数变成了 60,之前的记录没有被覆盖,我们可以一直使用该表,可以用 sql 来查看 sql,数据库,登录时间等等的所有日志。

查看日志起始结束时间

test=# select min(log_time)  at time zone UTC ,max(log_time)  at time zone UTC from pg_log;
  timezone  |  timezone 

————————-+————————-
 2019-05-30 19:33:24.892 | 2019-05-31 06:37:11.651
(1 row)

有了灵活的数据加载方式,让 SQL 处理很多问题更加简捷便利。

到此,关于“PostgreSQL 的日志文件参数及注意事项有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计5233字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)