1 - 定位问题 SQL
- 用户直接提供的问题SQL。
- 通过实时系统视图 "v$long_exec_sqls" 观察到的问题SQL。
- 通过开启SQLLOG 日志分析出执行时间或执行次数超过设定的阈值的问题SQL。
2 - 需要和用户确认上面找到的问题SQL
避免后续分析的偏差
3 - 使用 "DM 管理工具"
3.1 - 个人习惯
在查询窗口最上方,放置常用的SQL:
--set schema user01 # 切换到问题SQL 所属Schema下
--alter session set 'MONITOR_SQL_EXEC'=1 #
--et() # 打印操作符统计时间
--select * from v$dm_ini where para_name like 'ENABLE_IN%' #查找需要设定的HINT
3.2 - 打印问题SQL 的执行计划
查看执行计划<实际不执行SQL,只是产生预估的执行计划> explain select * from <table_name>;
例如:
SQL> explain select * from test01;
1 #NSET2: [1, 3, 64]
2 #PRJT2: [1, 3, 64]; exp_num(3), is_atom(FALSE)
3 #CSCN2: [1, 3, 64]; INDEX33555486(test01); btr_scan(1)
已用时间: 4.232(毫秒). 执行号:0.
3.3 - 打印问题SQL 的操作符统计耗时
需要先执行一次问题SQL,然后获取执行号,例如:3802 select * from <table_name>;
打印操作符统计耗时 et(3802)
例如:
现有测试用户登录,并执行测试的SQL
conn user01/xx
alter session set 'MONITOR_SQL_EXEC'=1;
SQL> alter session set 'MONITOR_SQL_EXEC'=1;
SQL> select * from test01;
行号 id name
---------- ----------- ----
1 1 a
2 2 b
3 3 c
已用时间: 0.229(毫秒). 执行号:3802.
使用管理员查看 ET:
conn sysdba/xx
SQL> ET(3802);
行号 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 DLCK 1 1.92% 4 0 2 0 0 0 0 NULL NULL 0
2 PRJT2 2 3.85% 3 2 4 0 0 0 0 NULL NULL 0
3 NSET2 24 46.15% 2 1 3 0 0 0 0 NULL NULL 0
4 CSCN2 25 48.08% 1 3 2 0 0 0 0 NULL NULL 0
已用时间: 23.943(毫秒). 执行号:4501.
4 - 使用 "disql"打印实际的执行计划
在 disql 下面,开启autotrace
注意:已经测试过最新版本的"DM 管理工具"中就可以设置 autotrace,那么就无需使用 disql 工具了。
SQL> conn <username>/<password>
SQL> set autotrace traceonly
SQL> select * from <table_name>;
例如
1 #NSET2: [1, 1, 64]
2 #PRJT2: [1, 1, 64]; exp_num(3), is_atom(FALSE)
3 #CSCN2: [1, 1, 64]; INDEX33555486(test01); btr_scan(1)
Statistics
-----------------------------------------------------------------
0 data pages changed
0 undo pages changed
1 logical reads
0 physical reads
0 redo size
259 bytes sent to client
86 bytes received from client
1 roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
0 io wait time(ms)
0 exec time(ms)
已用时间: 0.161(毫秒). 执行号:3509.
欢迎访问达梦技术分享社区 ECO