暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

MogDB学习笔记-从7开始(日志管理)

日志概述

PG有三种日志pg_log、pg_xlog、pg_clog

pg_log:系统运行日志,里面记录了慢sql,以及数据库的运行日志,报错信息等等,MogDB存放在$DATA_DIR/log/pg_log中,如果数据库启动失败、运行过程中失败都会记录到这个日志中。

pg_xlog:记录的是redo日志,redo日志是数据库中比较重要的日志,用户数据恢复前滚操作,MogDB默认存放在$DATA_DIR/data/中,默认是开启的。

pg_clog:记录数据库的事务提交信息MogDB默认存放在$DATA_DIR/data/中,默认是开启的。

但是查看Mogdb的日志目录还有一下几个目录

日志目录介绍

/log/bin

记录了Mogdb服务端工具调用数据库产生的日志

/log/sql_monitor

慢sql日志

/log/om

记录了gs_om的日志以及本地的控制日志

/log/pg_audit

审计日志

/log/gs_profile

性能日志数据库系统在运行时检测物理资源的运行状态的日志

/log/asp_data

应该是与快照和样本有关的路径,具体还不太清楚

目录中dn_6001或者dn_6002中的数字表示节点编号,可以通过gs_om -t query查看。

与日志相关的参数

1)日志参数列表

参数名称

含义

log_directory

MogDB运行日志路径

log_filename

MogDB运行日志格式

query_log_directory

Sql执行日志路径

query_log_file

sql日志文件格式

log_max_size

控制日志最大存储值

log_max_count

硬盘上可存储的最多日志数量。

log_saved_days

日志保存的天数。

enable_slow_query_log

是否开启慢日志

wal_keep_segments

xlog保留的最小日志个数

wal_level

写入WAL信息量的级别

wal_segment_size

WAL日志段文件的大小默认是16M

log_statement

记录到日志中的sql格式,会记录到运行日志中,不建议开启,如果设置为all会导致运行日志非常大,并且会忽略掉

log_min_duration_statement,跟踪所有的sql语句

log_rotation_age

多长时间创建新的文件记录日志,分钟

log_rotation_size

文件多大后创建新的文件记录日志,kb

log_truncate_on_rotation

可重用同名日志文件

  1. 查看参数

以上都属于GUC参数,GUC参数主要是存储在(“postgresql.conf”、“pg_hba.conf”)配置文件中建议使用gs_guc命令修改参数值。

查看所有节点参数命令

gs_guc check -N all -D /opt/mogdb/data/data -c "log_filename"

或者使用

gs_guc check -N all -I all -c "log_filename"

-N all表示所有节点

-D 表示数据文件路径

-I 表示instance_id

Instance_id和node_id可以通过一下命令查看

gs_om -t status --all

3)修改guc参数

gs_guc set -N all -I all -c "log_filename='pgtest-%Y-%m-%d_%H%M%S.log'"

gs_guc reload -N all -I all -c "log_filename='pgtest-%Y-%m-%d_%H%M%S.log'"

归档日志

日志归档主要是针对xlog日志而言,数据库在热备份的时候,归档日志做为备份的一部分,可以让数据库恢复到数据库损坏之前,或者指定时间点恢复,指定归档日志以后,在线wal日志在轮转重用wal文件之前,要先把wal归档,然后在覆盖重写。

1)查看当前归档模式

方式一:登录MogDB数据库查看

db_mogdb=> show archive_mode;

方式二:使用gs_guc命令查看

[omm@pkt_mogdb1 gs_guc]$ gs_guc check -N all -I all -c "archive_mode"

2)打开归档模式

[omm@pkt_mogdb1 gs_guc]$ gs_guc reload -N all -I all -c "archive_mode=on"

3)修改归档日志路径

mkdir -p /opt/mogdb/data/archivelog

gs_guc reload -N all -I all -c "archive_dest='/opt/mogdb/data/archivelog'"

慢SQL诊断

与慢sql相关的参数:
track_stmt_stat_level:

格式是【fullsql,slowsql】,取值范围是OFF,L0,L1,L2,fullsql表明是否记录所有的sql语句,不建议开启,除非是在某一个时间段执行诊断的时候可以临时打开。L0只记录sql,L1记录sql+执行计划、L3记录sql+执行计划+锁信息。默认值是OFF,L0,表示不记录所有sql,只记录慢sql的sql语句。

log_min_duration_statement:

sql执行时间超过这个值(毫秒)会记录为慢sql。默认1800000毫秒,30分钟才定义为慢sql在OLTP类系统中显然是不可能的,方便测试,我修改成了10秒。

[omm@pkt_mogdb1 ~]$ gs_guc reload -N all -I all -c "log_min_duration_statement=10000";

或者

[omm@pkt_mogdb1 ~]$ gs_guc set -N all -I all -c "log_min_duration_statement=10000";

或者

ALTER DATABASE zkh SET log_min_duration_statement TO 10000;

其他参数:

enable_stmt_track

开启sql收集

track_stmt_details_size

单条Sql收集最大字节

track_stmt_parameter

是否开启收集sql中的参数

track_stmt_retention_time

历史sql保留时间

track_stmt_session_slot

最多可以收集多少条sql

query_log_directory

慢sql日志地址

query_log_file

慢sql日志文件格式

与慢sql相关的系统表

STATEMENT_HISTORY:

获得当前节点的执行语句的信息。查询系统表必须具有sysadmin权限。只可在系统库postgres中查询到结果,用户库中无法查询并且必须配置上面两个参数。

与慢sql相关的日志

$DATA_DIR/log/sql_monitor/dn_N

慢sql测试:
在上一个笔记中我使用MTK导入了一个600多万的表

select count(*) from db_mysql.dump_tables_mysql dtm ;

这条sql执行了13秒,检查一下慢查询表,连接到postgres数据库

创建角色,并且给zkh用户赋权

CREATE ROLE manager IDENTIFIED BY 'Zkh12345678';
ALTER ROLE manager SYSADMIN;

GRANT USAGE ON SCHEMA dbe_perf to zkh;
grant manager to zkh;

使用用户zkh登录postgres数据库查询STATEMENT_HISTORY

gsql -U zkh -W Zkh12345678 -d postgres
select * from STATEMENT_HISTORY;

select * from dbe_perf.get_global_slow_sql_by_timestamp('2022-08-15 20:40:21', '2022-08-15 21:51:21');

查询STATEMENT_HISTORY和 dbe_perf.get_global_slow_sql_by_timestamp结果都为空。。。。。。

数据库重启之后还是如此,看来不是参数问题导致的,因为log_min_duration_statement这个参数是superuser,按理说是实时生效的,不需要重启。

已经在https://gitee.com/enmotech/mogdb-docs/issues/I5MGMR?from=project-issue和

https://www.modb.pro/issue/16084提交问题。后续跟踪。

感谢墨天轮高云龙老师帮忙解答了问题,原来是因为参数enable_resource_track没有打开,这个参数的含义是是否启用跟踪统计。

GUC参数补充

结合官方中的GUC参数级别,查询pg_settings表中的context分类,不同的分类支持不同的修改方式

select distinct context from pg_settings;

参数级别

说明

设置方式和备注

INTERNAL

固定参数

POSTMASTER

数据库服务端参数,在数据库启动时确定,可以通过配置文件指定

1、gs_guc set

2、MogDB=# ALTER SYSTEM SET paraname TO value;

重启后生效

SIGHUP

数据库全局参数,可在数据库启动时设置或者在数据库启动后,发送指令重新加载。

1、gs_guc set

2、gs_guc reload

3、MogDB=# ALTER SYSTEM SET paraname TO value;

不需要重启

BACKEND

会话连接参数。在创建会话连接时指定,连接建立后无法修改。连接断掉后参数失效

1、gs_guc set

2、gs_guc reload

3、MogDB=# ALTER SYSTEM SET paraname TO value;

不需要重启,当前会话无效,新连接的会话生效

USER

普通用户参数。可被任何用户在任何时刻设置

1、gs_guc set

2、gs_guc reload

3、三个级别数据库、用户、会话:
当前会话无效,下次会话生效

ALTER DATABASE dbname SET paraname TO value;

ALTER USER username SET paraname TO value;

当前会话生效

MogDB=# SET paraname TO value;

superuser

数据库管理员参数。可在数据库启动时、数据库启动后或者数据库管理员通过SQL进行设置

同user级别的参数

注意:参数的生效优先级是 session>user>dbname>postgres

最后修改时间:2022-08-18 09:35:24
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论