墨墨导读:本文主要介绍PostgreSQL的日志文件参数及注意事项,从csv日志中载入数据库。通过灵活的数据加载方式,让SQL在处理很多问题上更加简捷便利。

运行日志参数



1.1 运行日志主要参数

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

参数

可选值/说明

log_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

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

log_truncate_on_rotation = on

设置重用日志

log_rotation_age = 1d

多长时间重用日志

log_rotation_size = 10MB

日志达到多大重用

log_min_messages = warning

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

log_min_duration_statement = 60

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

log_checkpoints = on

记录checkpoint操作

log_connections = on

记录会话连接操作

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 hh24: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处理很多问题更加简捷便利。

扩展阅读


  1. 《PostgreSQL 指南:内幕探索》之基础备份与时间点恢复(上)

  2. 《PostgreSQL 指南:内幕探索》之基础备份与时间点恢复(下)

  3. 史上最全PostgreSQL体系结构

  4. 2019全球PostgreSQL生态报告出炉,PG为何从RDBMS中脱颖而出?

  5. “王者对战”之 MySQL 8 vs PostgreSQL 10

  6. 大象起舞:用PostgreSQL解海盗分金问题

  7. 解读年度数据库PostgreSQL:如何巧妙地实现缓冲区管理器

  8. 美女DBA带你了解PostgreSQL用户及角色

  9. 从Oracle到PostgreSQL:最全控制文件

  10. PostgreSQL的常见参数和技巧

  11. PostgreSQL的日志文件和数据加载

  12. 从Oracle到PostgreSQL:一文掌握Checkpoint重要概念

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

help,30万+下载的完整菜单栏

2019DTCC,数据库大会PPT

2018DTCC , 数据库大会PPT

2018DTC,2018 DTC 大会 PPT

ENMOBK,《Oracle性能优化与诊断案例》

DBALIFE,“DBA 的一天”海报

DBA04,DBA 手记4 电子书

122ARCH,Oracle 12.2体系结构图

2018OOW,Oracle OpenWorld 资料

产品推荐

云和恩墨Bethune Pro2 企业版,集监控、巡检、安全于一身,你的专属数据库实时监控和智能巡检平台,漂亮的不像实力派,你值得拥有!

云和恩墨zData一体机现已发布超融合版本和精简版,支持各种简化场景部署,零数据丢失备份一体机ZDBM也已发布,欢迎关注。

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

解读年度数据库性能:PostgreSQL的日志文件和数据加载相关推荐

  1. PostgreSQL的日志文件和数据加载

    墨墨导读:本文主要介绍PostgreSQL的日志文件参数及注意事项,从csv日志中载入数据库.通过灵活的数据加载方式,让SQL在处理很多问题上更加简捷便利. 运行日志参数 1.1 运行日志主要参数 运 ...

  2. mysql 远程load data,PyMySQL将(文件)数据加载到远程MySQL实例时发生错误/异常

    我正在使用PyMySQL-0.5.0并在将数据从文件加载到远程MySQL实例时遇到了一个模糊的错误/异常.在执行"loaddatalocalinfile-"语句时,我看到一个异常, ...

  3. 【电商数仓】数仓搭建之明细数据(data warehouse detail -- DWD)层(用户行为数据之曝光、错误日志表、数据加载脚本,业务数据之评价、订单事实表)

    文章目录 一 曝光日志表 1 思路解析 2 建表语句 3 数据导入 4 查看数据 二 错误日志表 1 思路解析 2 建表语句 3 数据导入 4 查看数据 三 DWD层用户行为数据加载脚本 四 DWD层 ...

  4. Paging3、Room使用,1、从本地Room数据库加载 2、直接网络获取数据加载 3、网络访问数据到Room数据库再加载 4、封装使用

    目录 1.从本地Room数据库加载数据 viewmodel fragment中使用 页面 数据库相关 2.直接网络获取数据加载 3.网络访问数据到Room数据库再加载数据 自定义RemoteMedia ...

  5. 解读年度数据库PostgreSQL:如何巧妙地实现缓冲区管理器

    墨墨导读:PostgreSQL 已获得 DB-Engines 排行榜 2017 年和2018年的"年度数据库"称号,发展如此迅猛,它究竟有什么内幕呢?接下来,我们将选择Postgr ...

  6. 解读年度数据库PostgreSQL:如何处理并发控制(一)

    墨墨导读:最近电子工业出版社博文视点出版了<PostgreSQL指南:内幕探索>,日前「数据和云」公众号推荐了这本书并赠送了五本,百多位用户参与,几十条留言未能放出,为了让大家更好地学习开 ...

  7. MySQL数据库中常见的日志文件汇总!

    一个优秀的Java后端开发工程师一定要掌握MySQL数据库,而日志文件记录了影响MySQL数据库的各种类型活动,因此也成为其必须要掌握的知识.今天千锋ava培训小编就给大家介绍MySQL数据库中常见的 ...

  8. jsp页面判断输入编号已存在mysql中_面试官让我聊聊Mysql基础架构之日志文件与数据文件...

    上一篇文章讲述了Mysql的基本框架,和sql执行的流程,这篇文章首先分析下每个流程的具体细节,然后介绍日志文件和数据文件以下面语句作为例子来分析流程中每一步的具体细节: select * from ...

  9. GreenPlum数据库数据加载之copy命令的使用

    对于数据加载,GreenPlum数据库提供copy工具,copy工具源于PostgreSql数据库,copy命令不仅支持表于表之间的数据加载,也支持文件与表之间的数据加载和表对文件的数据卸载.使用co ...

最新文章

  1. python创建数据集_使用Python从图像创建数据集以进行人脸识别
  2. 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application )
  3. radware Alten系列的HA配置
  4. 基于 HTML5 网络拓扑图的快速开发之入门篇(二)
  5. Python学习之Python安装
  6. 全球首富贝索斯离婚第二天 出轨对象女主播宣布离婚...
  7. 实体首部字段-四大首部字段之一
  8. 使用zlog实现日志记录
  9. 银河麒麟v10_中国崛起?我对银河麒麟操作系统V10的一点小看法
  10. FPGA智能网卡功能剖析
  11. RequestHead详解
  12. 【Unity3D】资源文件 ③ ( Unity 资源包简介 | 导出 Unity 资源包 | 导出资源包的包含依赖选项 | 导入 Unity 资源包 | Unity 资源商店 )
  13. 用 MatLab 绘制立体心形
  14. java实现 蓝桥杯 算法训练 操作格子
  15. 第二十五期 总结《路由器就是开发板》
  16. redis 中setex、setnx、set、getset 命令的区别与使用
  17. 关于android6.0网络连接感叹号的问题
  18. Mybatis批量将list数据插入到Oracle数据库
  19. loadrunner server压力测试 sql_LoadRunner进行负载压力测试
  20. 虚化背景 - 基于镜头模糊滤镜的深度映射

热门文章

  1. Docker 1.0对OpenStack意味着什么
  2. (15)Node.js 自定义模块
  3. python matplotlib 画一条水平直线遇到的问题
  4. 线性最小二乘法的通俗理解
  5. mysql e 变量_mysql 变量简介
  6. linux race window,java开发环境(QTrace)
  7. matlab中solver函数_Simulink求解器(Solver)相关知识
  8. [转]如何让DIV固定在页面的某个位置而不随着滚动条随意滚动
  9. 移动营销的魔力:让你的客户无处可逃(附赠2012移动营销百问百答手册)
  10. 查看 Proxy 的 $ProxyX.class文件