系统慢SQL日志-SYS_SLOWSQL_LOG
📄字数 2.2K
👁️阅读量 加载中...
功能描述
SYS_SLOWSQL_LOG系统表用于查询当前节点记录的慢SQL命令,通过读取当前节点的SLOWSQL.LOG日志文件的内容进行展示。
由参数slow_sql_time决定是否记载。0表示不开启记载,正数表示开启记载,且为执行时间阈值;当SQL执行时长超过当前时间阈值,该SQL将被记录到当前节点的SLOWSQL.LOG日志文件,并可通过SYS_SLOWSQL_LOG查询结果。
字段说明
序号 | 字段名 | 类型 | 说明 | V11 | V12 |
---|---|---|---|---|---|
0 | NODEID | INTEGER | 节点ID | × | √ |
1 | DB_ID | VARCHAR | 库ID | × | √ |
2 | USER_NAME | VARCHAR | 用户名 | × | √ |
3 | SESSION_ID | INTEGER | 会话ID | × | √ |
4 | CLIENT_IP | CHAR | 客户端IP | × | √ |
5 | EX_TIME | DATETIME | 当前时间 | × | √ |
6 | ELAPSE_TIME | INTEGER | SQL执行时间(毫秒) | × | √ |
7 | SQL_STR | VARCHAR | 执行SQL | × | √ |
8 | SQL_PARAS | VARCHAR | 传入参数 | × | √ |
参数说明
当有传入参数时(如预处理语句),将记录传入参数信息,其记录格式如下:
{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’
。