[20230921]为什么执行计划不再awr中.txt
--//昨天看了https://www.cnblogs.com/kerrycode/p/17694824.html=>[翻译]——Why my execution plan is not in AWR.
--//原始链接:https://hourim.wordpress.com/2021/06/27/why-my-execution-plan-is-not-in-awr
--//类似的问题我自己以前遇到过,多数情况下出现大量没有使用绑定变量变量的sql语句对生产系统的冲击,导致在生成awr报表时,在共
--//享池里面已经无法找到对应sql语句,这样其对应的执行计划在以后使用dbms_xplan.display_awr查询时找不到对应的执行计划.
--//另外还有1个小问题:翻译里面出现一个cie怎么意思,我看了原始链接:
In order to answer this question one needs to know that dba_hist_active_sess_history gets its data from
gv$active_session_history (ASH) while dba_hist_sqlstat and cie get their data from a bunch of other dynamic performance
view like v$sql, v$version, etc..
为了回答这个问题,我们需要知道 dba_hist_active_sess_history 是从gv$active_session_history (ASH) 获取/采集数据,而
dba_hist_sqlstat 和 cie 从一堆其他动态性能视图中(如 v$sql、v$version 等)获取数据。
--//作者没有翻译cie,是原始作者笔误还是表示怎么,我使用金山词霸看了一下:
cie
=[法] Compagnie(=company)
company
n.公司, 陪伴, (一)群, (一)队, (一)伙, 连, 连队
--//当然这些不重要.
--//我自己写一个简单的例子验证这个过程,加强记忆。
1.环境:
SCOTT@test01p> @ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
2.测试:
SCOTT@test01p> set timing on
SCOTT@test01p> select count(*) from all_objects,(select 1 from dual connect by level<=1000);
COUNT(*)
----------
18648000
Elapsed: 00:00:23.19
SCOTT@test01p> set timing off
SCOTT@test01p> @ hash
HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
2382077584 6uf3m7u6zr7nh 0 106128 2524108416 8dfb9e90 2023-09-21 21:18:11 16777216
SCOTT@test01p> @ ashtop sql_id,is_awr_sample sql_id='6uf3m7u6zr7nh' sysdate-1/24 sysdate
Total Distinct Distinct
Seconds AAS %This SQL_ID I FIRST_SEEN LAST_SEEN Execs Seen Tstamps
--------- ------- ------- ------------- - ------------------- ------------------- ---------- --------
46 .0 88% | 6uf3m7u6zr7nh N 2023-09-21 21:18:12 2023-09-21 21:20:28 2 46
6 .0 12% | 6uf3m7u6zr7nh Y 2023-09-21 21:18:11 2023-09-21 21:20:22 2 6
--//仅仅有6条记录是is_awr_sample='Y',注我执行2次。
alter system flush shared_pool;
alter system flush shared_pool;
alter system flush shared_pool;
SYS@test> EXECUTE DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
PL/SQL procedure successfully completed.
--//注意一定要在cdb层面执行,,如果在PB下执行不会写awr的历史表!!
SCOTT@test01p> @ dashtop sql_id sql_id='6uf3m7u6zr7nh' sysdate-1/24 sysdate
Total
Seconds AAS %This SQL_ID FIRST_SEEN LAST_SEEN
--------- ------- ------- ------------- ------------------- -------------------
60 .0 100% 6uf3m7u6zr7nh 2023-09-21 21:18:11 2023-09-21 21:20:22
--//相当于查询dba_hist_active_sess_history找到对应记录,变成60秒,实际上前面的ashtop记录消耗时间是46+6=52秒。
SCOTT@test01p> @ dpcawr 6uf3m7u6zr7nh '' ''
no rows selected
SCOTT@test01p> select * from table(dbms_xplan.display_awr('6uf3m7u6zr7nh'));
no rows selected
--//执行计划不再awr中.
SCOTT@test01p> @ sqlhh 6uf3m7u6zr7nh 1
no rows selected
--//查询dba_hist_sqlstat也找不到相关信息。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2985177/ ,如需转载,请注明出处,否则将追究法律责任。