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

人大金仓数据库KingbaseES 慢查询日志的获取(一)

原创 数据猿 2023-12-26
3821


金仓数据库KingbaseES 慢查询日志的获取(一)

关键字:

KingbaseES、慢查询日志、log、人大金仓、KingbaseES、

一、慢查询日志概述

慢查询日志可以记录所有执行时间超过一定阈值(1s)的SQL语句。通过分析慢查询日志可以找出哪些查询比较耗时,然后在进行优化。获取慢查询日志的方法有两种:

  1. 开启慢查询日志。
  2. 使用sys_stat_statements扩展。

下面详细介绍开启慢查询日志的方法。

二、开启慢查询日志

如果想开启慢查询日志,首先需要在kingbase.conf中配置开启慢查询日志需要的参数。在kingbase.conf中,开启慢查询日志相关的参数有三种:

  1. 在哪里写日志

(1)log_destination参数值的类型为string,有效值包括stderr、csvlog和syslog。设置这个参数为一个由想要的日志目的地列表,之间用逗号分隔。默认值是只记录到stderr

如果csvlog被包括在log_destination中,日志项会以CSV格式被输出,这样可以很方便地把日志载入到程序中。要产生 CSV 格式的日志输出,必须启用logging_collector。默认值为:log_destination = 'stderr'。

(2)logging_collector参数值的类型为boolean,这个参数用于启用日志收集器,它是一个捕捉被发送到stderr或csvlog的日志消息的后台进程,并且它会将这些消息重定向到日志文件中。这种方法比记录到syslog通常更有用,因为某些类型的消息不会在syslog输出中出现。这个参数只能在服务器启动时设置,并且重启生效。默认值为:logging_collector = on。

(3)log_directory参数值类型为string,当logging_collector被启用时,这个参数决定日志文件将被在哪个目录下创建。该目录可以为一个绝对路径,也可以为一个KBDATA的相对路径。默认值为sys_log:log_directory = 'sys_log'。

(4)log_filename参数值类型为string,当logging_collector被启用时,这个参数设置被创建的日志文件的文件名。该值被视为一种strftime模式,因此%转义可以被用来指定根据时间变化的文件名(注意如果有任何时区独立的%转义,计算将在由log_timezone指定的时区中完成)。默认值为:log_filename = 'kingbase-%Y-%m-%d_%H%M%S.log'。

(5)log_file_mode参数值类型为integer,在 Unix 系统上,当logging_collector被启用时,这个参数设置日志文件的权限(在Windows 上这个参数将被忽略)。 默认的权限是0600:log_file_mode = 0600,表示只有服务器拥有者才能读取或写入日志文件。其他常用的设置是0640,它允许拥有者的组成员读取文件。

(6)log_rotation_age 参数值类型为integer,当logging_collector被启用时,这个参数决定使用一个单个日志文件的最大时间量,之后将创立一个新的日志文件。 如果指定值时没有单位,则以分钟为单位。默认为24小时:log_rotation_age = 1d。

(7)log_rotation_size 参数值类型为integer,当logging_collector被启用时,这个参数决定一个单个日志文件的最大尺寸。 当这些数据量被发送到一个日志文件后,将创建一个新的日志文件。默认值为:log_rotation_size = 10MB。

(8)log_truncate_on_rotation 参数值类型为boolean。当logging_collector被启用时,这个参数将导致Kingbase截断(覆盖而不是追加)任何已有的同名日志文件。不过,截断只在一个新文件由于基于时间的轮转被打开时发生,在服务器启动或基于尺寸的轮转时不会发生。如果被关闭,在所有情况下以前存在的文件将被追加:log_truncate_on_rotation = off。

  1. 记录什么到日志

(1)log_statement参数值类型为enum。控制哪些SQL语句被记录。有效值是 none (off)、ddl、mod和 all(所有语句)。ddl记录所有数据定义语句,例如CREATE、ALTER和 DROP语句。mod记录所有ddl语句,外加数据修改语句例如INSERT, UPDATE、DELETE、TRUNCATE和COPY FROM。参数默认值为none:log_statement = 'none'。

3. 什么时候记录日志

(1)log_min_duration_statement参数值类型为integer,该参数设置写入日志的慢查询语句的最小执行时长。如果没有指定单位,默认以毫秒为单位。将这个参数设置为0将打印所有语句的执行时间。 设置为-1(默认值)将停止记录语句持续时间: log_min_duration_statement 。

三、举例说明

(1)在kingbase.conf中,配置以下参数:

logging_collector = on

log_directory = 'sys_log'

log_timezone = 'Asia/Shanghai'

log_min_duration_statement = 0

重新启动,使上述参数设置生效。

(2)在Kingbase数据库中输入任一sql命令,例如:

test=# \set SQLTERM /

test=# delete from xml_test;

test-# declare

test-# lxmldata xmltype;

test-# begin

test-# lxmldata := dbms_xmlgen.getxmltype('select * from xmldemo');

test-# insert into xml_test values(lxmldata);

test-# end;

test-# select * from xml_test;

test-# /

DELETE 0

ANONYMOUS BLOCK

result

-----------------

<rowset> +

<row> +

<a>1</a> +

<b>first</b> +

<c>壹</c> +

</row> +

<row> +

<a>2</a> +

<b>second</b>+

<c>贰</c> +

</row> +

<row> +

<a>3</a> +

<c>叁</c> +

</row> +

</rowset> +

(1 行记录)

(3)查看日志文件名称和内容。

1)日志文件名称:

2)日志文件内容:

2023-10-27 12:40:37.895 CST [2877358] LOG: 执行时间: 3.654 ms 语句: delete from xml_test;

declare

lxmldata xmltype;

begin

lxmldata := dbms_xmlgen.getxmltype('select * from xmldemo');

insert into xml_test values(lxmldata);

end;

select * from xml_test;

2023-10-27 12:40:37.897 CST [2877358] LOG: 执行时间: 1.082 ms 语句: select dbms_output.send_print(10)

2023-10-27 12:40:37.897 CST [2877358] LOG: 执行时间: 0.739 ms 语句: call dbms_output.clear_cache();

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

评论