Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


系统慢SQL日志-SYS_SLOWSQL_LOG

📄字数 2.2K
👁️阅读量 加载中...

功能描述

SYS_SLOWSQL_LOG系统表用于查询当前节点记录的慢SQL命令,通过读取当前节点的SLOWSQL.LOG日志文件的内容进行展示。
由参数slow_sql_time决定是否记载。0表示不开启记载,正数表示开启记载,且为执行时间阈值;当SQL执行时长超过当前时间阈值,该SQL将被记录到当前节点的SLOWSQL.LOG日志文件,并可通过SYS_SLOWSQL_LOG查询结果。

字段说明

序号字段名类型说明V11V12
0NODEIDINTEGER节点ID×
1DB_IDVARCHAR库ID×
2USER_NAMEVARCHAR用户名×
3SESSION_IDINTEGER会话ID×
4CLIENT_IPCHAR客户端IP×
5EX_TIMEDATETIME当前时间×
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 字节
    • 当类型为上述类型之外的类型,不输出参数值部分

应用举例

  • 记载当前节点的慢sql命令
sql
-- 设置慢SQL日志的时间阈值为10ms
SQL> SET slow_sql_time to 10; 

-- 执行一个等待20ms的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 |
+--------+-------+-----------+------------+---------------+--------------------------+-------------+-------------------+-----------+
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:16:35.000  | 20          | SELECT SLEEP(20); | <NULL>    |
+--------+-------+-----------+------------+---------------+--------------------------+-------------+-------------------+-----------+

-- 重置慢SQL日志的时间阈值为0
SQL> SET slow_sql_time to 0;

提示

数据库内部的时钟维护步长为5ms,所以ELAPSE_TIME若存在5ms以内的误差,属于正常现象。

  • 查看当前节点的慢sql操作记载
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 |
+--------+-------+-----------+------------+---------------+--------------------------+-------------+-------------------------------------------------+-----------+
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:16:35.000  | 25          | SELECT SLEEP(20);                               | <NULL>    |
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:17:08.000  | 20          | SELECT SLEEP(20);                               | <NULL>    |
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:17:17.000  | 20          | SELECT SLEEP(20);                               | <NULL>    |
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:17:19.000  | 20          | SELECT SLEEP(20);                               | <NULL>    |
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:17:28.000  | 10          | SELECT SLEEP(10);                               | <NULL>    |
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:21:56.000  | 20          | SELECT * FROM SYS_SLOWSQL_LOG;SELECT SLEEP(20); | <NULL>    |
| 2      | 1     | SYSDBA    | 8          | 192.168.2.236 | 2025-06-30 10:21:59.000  | 20          | SELECT SLEEP(20);                               | <NULL>    |
+--------+-------+-----------+------------+---------------+--------------------------+-------------+-------------------------------------------------+-----------+
  • 传参方式。
sql
-- 执行Java程序进行PrepareStatement语句绑定参数,SQL命令如下所示
select sleep(?) from dual;

-- 查询SYS_SLOW_SQL倒数1行记录
SQL> SELECT * FROM SYS_SLOWSQL_LOG ORDER BY ex_time DESC LIMIT 1;
+--------+-------+-----------+------------+----------------+--------------------------+-------------+-----------------------+--------------+
| NODEID | DB_ID | USER_NAME | SESSION_ID |   CLIENT_IP    |         EX_TIME          | ELAPSE_TIME |        SQL_STR        |  SQL_PARAS   |
+--------+-------+-----------+------------+----------------+--------------------------+-------------+-----------------------+--------------+
| 1      | 1     | SYSDBA    | 33         | 192.168.30.236 | 2025-06-30 10:31:51.000  | 20          | ? st5560bcdf0: SELECT+| {<1,S,'20'>} |
|        |       |           |            |                |                          |             | "SLEEP"(:1)          +|              |
|        |       |           |            |                |                          |             | FROM                 +|              |
|        |       |           |            |                |                          |             | "DUAL"                |              |
+--------+-------+-----------+------------+----------------+--------------------------+-------------+-----------------------+----------- --+

-- 查询SLOWSQL.LOG中输出记录
[xugu@kunqian236 XGLOG]# tail SLOWSQL.LOG 
1 1 SYSDBA 33 192.168.30.236 2025-06-30 10:31:51 20 ? st5560bcdf0: SELECT
"SLEEP"(:1)
FROM
"DUAL" {<1,S,'20'>}

提示

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

相关系统表