为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM DATABASE SERVER 64V8 8.1 企业版 db version 0x7000c
【操作系统】:鲲鹏KYLINOS_V10_SP3
【CPU】:
【问题描述】*:
这个参数ENABLE_MONITOR是1
ALTER SESSION SET 'MONITOR_SQL_EXEC' = 1;
CALL ET(55);
select DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=>55) from dual;
都查不出来结果
新开一个会话,再尝试
SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC',1);
1、在开启ET的会话窗口执行待优化SQL
2、执行CALL ET(执行号)
MONITOR_SQL_EXEC是不是本来就全局为1了,如果是先关掉,再在会话级别打开。
数据库版本呢,select * from v$version;
尝试SQL,
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;
我猜测,有一种可能,就是最近系统业务多,造成SQL执行量上来,而达梦库运行内存中能缓存的运行时信息(比如ET里用到的 V$SQL_NODE_HISTORY或者如 V$SQL_STAT_HISTORY 等)是有限的,并不会持久性记录,是存在一个记录量限制阈值。
这就造成你要查的SQL EXEC_ID相关信息很快就被其他会话执行的SQL给冲掉,从而出现有时能查到有时查不到的现象。
不过这只是我的一种猜测,需要结合现场实际情况确认。
可能是sql太多被淘汰掉了,ET主要还是针对特定sql进行调试时候使用,MONITOR_SQL_EXEC还是全局关闭然后在会话级开比较合理

enable_monitor有没有设置为1?查一下