如何获取当前正在跑程序的执行计划
1获取当前程序执行SQL的SQL_ID,这有两种途径:
XXX$XXX<>'BACKGROUND'
XXX'ACTIVE'XXX'%MCA_APD_CHECK_PUBLIC_PKG%';
根据日志记录,定位到程序目前执行到哪一步,再提取这一步的SQL,根据SQL文本获取:SELECTFROMGV$XXX'%INSERTINTO
OWR_AP_BALANCE_F%';
根据SQL_ID,在PLSQLDEVELOPER中执行下面的脚本,获得CLOB格式的执行计划,建议打开后粘贴到文本编辑器查看;
XXX(SQL_ID=>'3mf9uj08k_j30')FROMDUAL;
XXX中所有的V$打头的视图都是动态视图,在运行时随时变化的,因此一个存储过程程序执行一段时间,SQL_ID可能在不断变化;
2.每个V$视图都有对应的GV$视图,多节点的环境(如目前我们使用的e_adata平台)下需要使用GV$,如果查看V$视图只能获取当前连接节点
(数据库实例)的信息。
3.调用了XXX获取的执行计划报告,最大的特点是包含了SQL当前执行状态的信息,即计划估算值和实际执行状态有个明显对比;
SQLMONITOR生成执行计划报告的阅读要点:
1.从头到尾,依次是SQL文本信息,SQL总体执行信息(包含执行时间),并行相关信息,执行计划;
2.执行计划中,ROW(Estim)列是计划估算值(就是前面介绍的基数
Cardinality),rows(Actual)是实际执行值,两者差异太大就说明执行计划有严重偏差,可能需要优化;
3.执行计划的ActivityDetail(samples),详细说明了每个步骤操作具体消耗,因为都是通过系统等待事件表示的,所以需要对等待事件有一定基础。