ET工具是DM数据库自带的SQL性能分析工具,能够统计SQL语句执行过程中每个操作符的实际开销,为SQL优化提供依据以及指导。以下是ET使用过程中遇到的一个小问题及处理方式分享给大家。
目前新版本已解决:V8.1.2.197以上版本已解决。(bug:113774)
ET功能的开启将对数据库整体性能造成一定影响,建议仅开启会话级别,优化工作结束后关闭该功能以提升数据库整体运行效率;
DM数据库新版本的开启ET功能时需要设置:
ENABLE_MONITOR = 1(默认打开)
MONITOR_TIME = 1 (默认打开)
MONITOR_SQL_EXEC = 1(设置成1)
设置参数,
sp_set_para_value(1,'ENABLE_MONITOR',1); --默认打开
sp_set_para_value(1,'MONITOR_SQL_EXEC',1); --默认打开
SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC',1); --会话级
查询,(系统级参数,可以在线修改,及时生效)
select * from v$dm_ini where para_name = '参数名';
select * from test00; --举例查询一张表,在开启会话级参数的会话下执行
获取到SQL语句的执行号,如下,
ET(535);
结果如下,
OP:指的是操作符名称;
TIME(US):指的是每种操作符使用的时间,单位是微秒;
PERCENT:指的是每种操作符占用整个SQL执行时间的百分比。
。。。
注:查看哪种操作符占用时间比较长,再根据执行计划中的操作符的位置,再去判断如何优化。
获取ET数据时,报-6102:数据溢出。
目前新版本已解决:V8.1.2.197以上版本已解决。(bug:113774)
首先开启ET,步骤如前面第1步。
然后,执行问题SQL。此时会获得SQL 执行号,如果结果集太多,可以添加limit等限制数据量。
注:MONITOR_SQL_EXEC是会话级,此会话执行的所有SQL都会通过v$sql_node_history视图查出。
接着,查询v$sql_node_history
select * from v$sql_node_history; --exec_id就是你刚才执行SQL的真实执行id号。
最后,找到ET这个存储过程,将里面的SQL语句拿出,单独执行(替换exec_id号),如下,
SELECT
NAME AS "OP" ,
TIME_USED AS "TIME(US)",
CAST(TIME_USED * 100.0/SUM(TIME_USED) OVER() AS DEC(10, 2))
|| '%' AS "PERCENT" ,
RANK() OVER (ORDER BY TIME_USED DESC) AS "RANK" ,
SEQ_NO AS "SEQ" ,
N_ENTER AS "N_ENTER" ,
HASH_USED_CELLS AS "HASH_USED_CELLS",
HASH_CONFLICT AS "HASH_CONFLICT"
FROM
V$SQL_NODE_HISTORY A,
V$SQL_NODE_NAME B
WHERE
A.TYPE$ = B.TYPE$
AND EXEC_ID = -355425673
ORDER BY
2;
注:ET里面有多个SQL,根据架构不同选择合适的SQL,里面有MPP的。
获得结果如下,
文章
阅读量
获赞