Skip to content

系统慢SQL日志-sys_slowsql_log

功能描述

sys_slowsql_log系统表用于查询当前节点记录的慢SQL命令,参数slow_sql_time,0表示关闭,正数表示开启记载执行时长超过阈值的SQL,当SQL执行时间超过设置的阈值时间将记录SQL且生成SLOWSQL.LOG日志文件,通过sys_slowsql_log可查询结果。

字段说明

序号字段名类型说明
0NODEIDINTEGER节点ID
1DB_IDVARCHAR库ID
2USER_NAMEINTEGER用户名
3SESSION_IDVARCHAR会话ID
4CLIENT_IPDATETIME客户端IP
5EX_TIMEVARCHAR当前时间
6ELAPSE_TIMEINTEGERSQL执行时间(毫秒)
7SQL_STRVARCHAR执行SQL
8SQL_PARASVARCHAR传入参数

参数说明

当有传入参数时(如预处理语句),将记录传入参数信息,其记录格式如下:

{PN=参数个数,GN=参数组数 <参数序号,参数类型,参数值><参数序号,参数类型,参数值>...}
  • 参数个数:本组传输的参数个数

  • 参数组数:本组传输的参数所属的组数

  • 参数序号:本组传输的当前参数序号,从 1 开始

  • 参数类型:本组传输的当前参数类型,下述类型括号中数字为类型 ID

    • B:表示类型为 TYPE_BOOL(2) 的布尔数据
    • I1:表示类型为 TYPE_I1(3) 的 1 字节整型数据
    • I2:表示类型为 TYPE_I2(4) 的 2 字节整型数据
    • I4:表示类型为 TYPE_I4(5) 的 4 字节整型数据
    • I8:表示类型为 TYPE_I8(6) 的 8 字节整型数据
    • R4:表示类型为 TYPE_R4(8) 的 4 字节浮点数据
    • R8:表示类型为 TYPE_R8(9) 的 8 字节浮点数据
    • S:表示类型为 TYPE_CHAR(30) 的字符串数据
    • TID:0:表示类型为上述类型之外的类型,其中 0 将替换为类型 ID,若本参数值为 NULL,则 0 将替换为 NULL
  • 参数值:本组传输的当前参数值

    • B:输出真值 T 或假值 F
    • I1:输出 1 字节整型值表示字符串
    • I2:输出 2 字节整型值表示字符串
    • I4:输出 4 字节整型值表示字符串
    • I8:输出 8 字节整型值表示字符串
    • R4:输出 4 字节浮点值表示字符串
    • R8:输出 8 字节浮点值表示字符串
    • S:输出由单引号 ' 包裹的字符串,最长为 128 字节
    • 当类型为上述类型之外的类型,不输出参数值部分

示例

  • 示例1
    记载当前节点的操作命令。

    sql
    -- 设置慢SQL日志的时间阈值为10
    SQL> SET slow_sql_time to 10; 
    
    -- 执行一个等待20s的SQL语句
    SQL> SELECT SLEEP(20); 
    
    -- 查看慢SQL日志
    SQL> SELECT * FROM sys_slowsql_log;
    
    NODEID | DB_ID | USER_NAME | SESSION_ID | CLIENT_IP | EX_TIME |ELAPSE_TIME| SQL_STR | SQL_PARAS | 
    ------------------------------------------------------------------------------------------------
    1 | 1 | SYSDBA| 0 | 10.28.10.156| 2024-09-18 10:10:58.000 AD |20| select sleep(20);| <NULL>|
    
    -- 重置慢SQL日志的时间阈值为0
    SQL> SET slow_sql_time to 0;
  • 示例2
    查看当前节点的操作记载。

    sql
    -- 查看慢SQL日志
    SQL> SELECT * FROM sys_slowsql_log;
                                                                         
    NODEID | DB_ID | USER_NAME | SESSION_ID | CLIENT_IP | EX_TIME | ELAPSE_TIME | SQL_STR | SQL_PARAS |
    ------------------------------------------------------------------------------
    1 | 1 | SYSDBA| 3 | 10.28.10.156| 2024-09-18 14:13:43.000 AD | 30 | CREATE TABLE SLOWSQL_TABLE(ID INT ,C1 VARCHAR)| <NULL>|
    1 | 1 | SYSDBA| 3 | 10.28.10.156| 2024-09-18 14:13:46.000 AD | 233 | DECLARE BEGIN FOR i IN 1...10000 LOOP INSERT INTO SLOWSQL_TABLE values(i,'张三');END LOOP; END;| <NULL>|
    1 | 1 | SYSDBA| 3 | 10.28.10.156| 2024-09-18 14:13:49.000 AD | 20 | SELECT sleep(20);| <NULL>|
    1 | 1 | SYSDBA| 3 | 10.28.10.156| 2024-09-18 14:13:50.000 AD | 30 | SELECT sleep(30);| <NULL>|
    1 | 1 | SYSDBA| 3 | 10.28.10.156| 2024-09-18 14:14:10.000 AD | 10 | DROP TABLE SLOWSQL_TABLE| <NULL>|
  • 示例3
    传参方式。

    sql
    -- 执行Java程序进行PrepareStatement语句绑定参数,SQL命令如下所示
    sleep(?);
    -- 查询SLOWSQL.LOG中输出记录
    1	1	SYSDBA 8 192.168.2.236 2024-09-22 08:58:35 ? st64bc21ac3	<1,S,'20'>}

    说明:

    上述PrepareStatement语句有唯一的预处理编号st64bc21ac3,有一个绑定参数,参数类型为S(TYPE_CHAR(30)的字符串数据),值为‘20’

相关系统表

sys_all_slowsql_log