1 前言
ET
工具是DM
数据库内置的 SQL 性能分析工具,具备统计 SQL 语句执行过程中各操作符实际开销之功能,为 SQL 优化提供依据及指导。该工具能够协助数据库管理员与开发人员深入理解 SQL 语句的执行细节,识别性能瓶颈,并据此采取相应的优化措施。利用 ET 工具,用户能够清晰地观察到 SQL 语句中各操作符的执行时间、CPU 使用率、内存消耗等关键性能指标,这些数据对于精确地定位性能问题极为关键。
2 使用示例
默认情况下,不启用ET
功能。另外新版只需调整MONITOR_SQL_EXEC
参数即可。
注意:
ET
功能的开启将对数据库整体性能造成一定影响,优化工作结束后尽量关闭该功能以提升数据库整体运行效率;DM 数据库新版本的开启 ET 功能时需要设置:ENABLE_MONITOR = 1
(默认打开)MONITOR_TIME = 1
(默认打开)MONITOR_SQL_EXEC = 1
(设置成 1)。
部分 DM 数据库版本的开启方式可能存在一定区别,详细内容请参照安装目录 /doc 下《系统管理员手册》。
select
para_name,
para_value,
para_type
from
v$dm_ini
where
para_name in ('ENABLE_MONITOR', 'MONITOR_TIME', 'MONITOR_SQL_EXEC');
SQL> select
2 para_name,
3 para_value,
4 para_type
5 from
6 v$dm_ini
7 where
8 para_name in ('ENABLE_MONITOR', 'MONITOR_TIME', 'MONITOR_SQL_EXEC');
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- ---------------- ---------- ---------
1 ENABLE_MONITOR 1 SYS
2 MONITOR_SQL_EXEC 0 SESSION
已用时间: 14.809(毫秒). 执行号:3779601.
SQL>
使用SP_SET_PARA_VALUE
开启参数
SQL> SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',1);
DMSQL 过程已成功完成
已用时间: 26.344(毫秒). 执行号:3779602.
SQL>
SQL>
SQL> select
2 para_name,
3 para_value,
4 para_type
5 from
6 v$dm_ini
7 where
8 para_name in ('ENABLE_MONITOR', 'MONITOR_TIME', 'MONITOR_SQL_EXEC');
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- ---------------- ---------- ---------
1 ENABLE_MONITOR 1 SYS
2 MONITOR_SQL_EXEC 1 SESSION
已用时间: 11.808(毫秒). 执行号:3779603.
SQL>
在使用et
之前,必须先执行一次SQL
,拿到执行号:183004
。
SQL> SET AUTOTRACE TRACE
SQL> select * from v$dm_ini where PARA_NAME='MONITOR_SQL_EXEC';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL PARA_MODULE
---------- ---------------- ---------- --------- --------- ------------- ------- ---------- ---------- ------------------------------------- --------- --------- ---------- -----------
1 MONITOR_SQL_EXEC 1 0 2 0 N 1 1 Whether to enable monitor sql execute SESSION ALL_SYNC CAN_SYNC monitor
1 #NSET2: [1, 25->1, 624]
2 #PRJT2: [1, 25->1, 624]; exp_num(13), is_atom(FALSE)
3 #SLCT2: [1, 25->1, 624]; V$DM_INI.PARA_NAME = 'MONITOR_SQL_EXEC'
4 #DSCN: [1, 1014->807, 624]; SYSINDEXV$DM_INI(V$DM_INI)
Statistics
-----------------------------------------------------------------
0 data pages changed
0 undo pages changed
150 logical reads
0 physical reads
0 redo size
1147 bytes sent to client
123 bytes received from client
1 roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
0 io wait time(ms)
24 exec time(ms)
已用时间: 24.724(毫秒). 执行号:3779606.
SQL>
上面执行号为3779606
SQL> et(183004);
SQL> et(3779606);
行号 OP TIME(US) PERCENT RANK SEQ N_ENTER MEM_USED(KB) DISK_USED(KB) HASH_USED_CELLS HASH_CONFLICT DHASH3_USED_CELLS DHASH3_CONFLICT HASH_SAME_VALUE
---------- ----- -------------------- ------- -------------------- ----------- ----------- -------------------- -------------------- -------------------- -------------------- ----------------- --------------- --------------------
1 PRJT2 10 0.04% 4 2 4 0 0 0 0 NULL NULL 0
2 SLCT2 61 0.25% 3 3 6 0 0 0 0 NULL NULL 0
3 NSET2 150 0.62% 2 1 3 0 0 0 0 NULL NULL 0
4 DSCN 23802 99.08% 1 4 4 0 0 0 0 NULL NULL 0
Statistics
-----------------------------------------------------------------
0 data pages changed
0 undo pages changed
333 logical reads
0 physical reads
0 redo size
1627 bytes sent to client
77 bytes received from client
1 roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
1 rows processed
0 io wait time(ms)
53 exec time(ms)
已用时间: 53.943(毫秒). 执行号:3779608.
SQL>
ET
结果中每一行对应一个操作符,每一列对应的解释如下:
OP
: 操作符名称
TIME(US)
: 执行耗时,以微秒为单位
PERCENT RANK
: 在整个计划中用时占比
SEQ
: 计划中的序号
N_ENTER
:操作符进入的次数
–随着版本变化参数也在不断增加
MEM_USED(KB)
:表示 SQL 语句在执行过程中使用的内存大小,单位为千字节(KB)。
DISK_USED(KB)
:代表 SQL 操作在执行过程中使用磁盘空间的大小,单位为千字节(KB)。
HASH_USED_CELLS
:在哈希操作(如哈希连接、哈希聚合等)中,该指标表示被使用的哈希桶(cells)的数量。
HASH_CONFLICT
:在哈希操作中,当不同的数据元素被映射到同一个哈希桶时就会发生哈希冲突。
DHASH3_USED_CELLS
:特定类型(比如某种深度哈希或者三阶段哈希操作)下被使用的哈希桶数量。
DHASH3_CONFLICT :与 HASH_CONFLICT 类似,不过是针对 DHASH3 这种特定哈希操作所记录的冲突次数。
HASH_SAME_VALUE
:表示在哈希操作中遇到相同哈希值的元素数量。
然后就可以与执行计划对应起来看了。
3 普通用户查看 ET 功能
只需将权限授权给普通用户即可,如下所示:
grant EXECUTE on "SYS"."ET" to T1;