[20241123]11g下测试遇到latch shared pool等待事件问题.txt --//这是昨天测试遇到的问题,实际上以前也遇到,没有仔细探究。以前的方法就是启动后做小量延迟,规避这个问题,实际上还是出现。 --//这次测试我总感觉哪里做的不对,仔细分析看看。 1.环境: SCOTT@book> @ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 2.建立测试环境: create table job_times (sid number, time_ela number,method varchar2(20)); drop table t purge ; create table t as select rownum id ,'test' pad from dual connect by level<=5e5; create unique index pk_t on t(id); exec dbms_stats.gather_table_stats(user, 't', method_opt=>'for all columns size 1'); $ cat m9.txt set verify off variable v_method varchar2(20) exec :v_method := '&&2'; --host sleep $((&&2/100|bc -l)) insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,'&&2') ; --insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,:v_method) ; commit ; --select sysdate from dual ; DECLARE l_count PLS_INTEGER; BEGIN FOR i IN 1..&&1 LOOP EXECUTE IMMEDIATE 'Select /*+ &2 */ count(*) from t where id = :j ' INTO l_count USING i; END LOOP; END; / update job_times set time_ela = dbms_utility.get_time - time_ela where sid=sys_context ('userenv', 'sid') and method= :v_method; commit; quit --//如果参数2带入参数不同,开始执行瞬间基本全是硬解析,insert语句也是。导致测试前面出现latch shared pool等待事件应该正常。 --//但是我发现21c这样测试并没有出现,而11g出现很多,难道oracle 21c做了什么改进,先测试在11g的情况。 SCOTT@book> delete from job_times ; 60 rows deleted. SCOTT@book> commit ; Commit complete. SYS@book> alter system flush shared_pool; System altered. SYS@book> alter system flush shared_pool; System altered. --//为了保证测试的重复性每次执行前刷新共享池。 3.测试: $ zzdate;seq 20 | xargs -P 20 -IQ sqlplus -s -l scott/book @m9.txt 5e5 Q > /dev/null;zzdate trunc(sysdate)+10/24+08/1440+59/86400 trunc(sysdate)+10/24+09/1440+48/86400 SYS@book> @ ashtop event,p1raw 1=1 trunc(sysdate)+10/24+08/1440+59/86400 trunc(sysdate)+10/24+09/1440+48/86400 Total Distinct Distinct Distinct Seconds AAS %This EVENT P1RAW FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1 --------- ------- ------- ------------------------------------------ ----------------- ------------------- ------------------- ---------- -------- ----------- 445 9.1 46% | 2024-11-23 10:08:59 2024-11-23 10:09:47 221 49 268 300 6.1 31% | resmgr:cpu quantum 0000000000000003 2024-11-23 10:09:01 2024-11-23 10:09:47 3 41 3 190 3.9 20% | latch: shared pool 000000006010DE50 2024-11-23 10:09:02 2024-11-23 10:09:43 1 26 26 17 .3 2% | resmgr:cpu quantum 0000000000000002 2024-11-23 10:09:00 2024-11-23 10:09:47 4 4 7 4 .1 0% | cursor: pin S wait on X 00000000367D06A6 2024-11-23 10:08:59 2024-11-23 10:08:59 1 1 1 1 .0 0% | control file parallel write 0000000000000002 2024-11-23 10:09:01 2024-11-23 10:09:01 1 1 1 1 .0 0% | cursor: pin S wait on X 0000000010439DEE 2024-11-23 10:08:59 2024-11-23 10:08:59 1 1 1 1 .0 0% | library cache load lock 0000000085E91AA0 2024-11-23 10:08:59 2024-11-23 10:08:59 1 1 1 8 rows selected. --//latch: shared pool到达190秒。 SYS@book> @ la 000000006010DE50 ADDR LATCH# CHLD NAME GETS IGETS MISSES IMISSES SPINGETS SLEEPS WAIT_TIME ---------------- ---------- ------ --------------------------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 000000006010DE50 336 1 shared pool 20422610 0 3350915 0 3342509 8864 337481310 --//我的测试环境配置内存不是很大,仅仅存在1个shared pool latch。 SYS@book> select addr,gets from v$latch_children where name like 'shared pool'; ADDR GETS ---------------- ---------- 000000006010E210 56 000000006010E170 56 000000006010E0D0 56 000000006010E030 56 000000006010DF90 56 000000006010DEF0 56 000000006010DE50 20426597 7 rows selected. --//其他gets很少。 --//根据前面m9.txt脚本,出现大量硬解析仅仅出现在测试开始。 $ zzdate;seq 20 | xargs -P 20 -IQ sqlplus -s -l scott/book @m9.txt 5e5 Q > /dev/null;zzdate trunc(sysdate)+10/24+08/1440+59/86400 trunc(sysdate)+10/24+09/1440+48/86400 SYS@book> @ ashtop sample_time "event='latch: shared pool'" trunc(sysdate)+10/24+08/1440+59/86400 trunc(sysdate)+10/24+09/1440+48/86400 Total Distinct Distinct Distinct Seconds AAS %This SAMPLE_TIME FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1 --------- ------- ------- ----------------------- ------------------- ------------------- ---------- -------- ----------- 15 .3 8% | 2024-11-23 10:09:11.821 2024-11-23 10:09:11 2024-11-23 10:09:11 1 1 1 15 .3 8% | 2024-11-23 10:09:27.831 2024-11-23 10:09:27 2024-11-23 10:09:27 1 1 1 14 .3 7% | 2024-11-23 10:09:02.811 2024-11-23 10:09:02 2024-11-23 10:09:02 1 1 1 14 .3 7% | 2024-11-23 10:09:24.821 2024-11-23 10:09:24 2024-11-23 10:09:24 1 1 1 14 .3 7% | 2024-11-23 10:09:39.831 2024-11-23 10:09:39 2024-11-23 10:09:39 1 1 1 13 .3 7% | 2024-11-23 10:09:07.821 2024-11-23 10:09:07 2024-11-23 10:09:07 1 1 1 13 .3 7% | 2024-11-23 10:09:22.821 2024-11-23 10:09:22 2024-11-23 10:09:22 1 1 1 12 .2 6% | 2024-11-23 10:09:33.831 2024-11-23 10:09:33 2024-11-23 10:09:33 1 1 1 10 .2 5% | 2024-11-23 10:09:35.831 2024-11-23 10:09:35 2024-11-23 10:09:35 1 1 1 9 .2 5% | 2024-11-23 10:09:05.821 2024-11-23 10:09:05 2024-11-23 10:09:05 1 1 1 9 .2 5% | 2024-11-23 10:09:14.821 2024-11-23 10:09:14 2024-11-23 10:09:14 1 1 1 9 .2 5% | 2024-11-23 10:09:15.821 2024-11-23 10:09:15 2024-11-23 10:09:15 1 1 1 6 .1 3% | 2024-11-23 10:09:19.821 2024-11-23 10:09:19 2024-11-23 10:09:19 1 1 1 5 .1 3% | 2024-11-23 10:09:06.821 2024-11-23 10:09:06 2024-11-23 10:09:06 1 1 1 5 .1 3% | 2024-11-23 10:09:38.831 2024-11-23 10:09:38 2024-11-23 10:09:38 1 1 1 4 .1 2% | 2024-11-23 10:09:16.821 2024-11-23 10:09:16 2024-11-23 10:09:16 1 1 1 3 .1 2% | 2024-11-23 10:09:09.821 2024-11-23 10:09:09 2024-11-23 10:09:09 1 1 1 3 .1 2% | 2024-11-23 10:09:20.821 2024-11-23 10:09:20 2024-11-23 10:09:20 1 1 1 3 .1 2% | 2024-11-23 10:09:21.821 2024-11-23 10:09:21 2024-11-23 10:09:21 1 1 1 3 .1 2% | 2024-11-23 10:09:23.821 2024-11-23 10:09:23 2024-11-23 10:09:23 1 1 1 2 .0 1% | 2024-11-23 10:09:31.831 2024-11-23 10:09:31 2024-11-23 10:09:31 1 1 1 2 .0 1% | 2024-11-23 10:09:36.831 2024-11-23 10:09:36 2024-11-23 10:09:36 1 1 1 2 .0 1% | 2024-11-23 10:09:37.831 2024-11-23 10:09:37 2024-11-23 10:09:37 1 1 1 2 .0 1% | 2024-11-23 10:09:42.831 2024-11-23 10:09:42 2024-11-23 10:09:42 1 1 1 2 .0 1% | 2024-11-23 10:09:43.831 2024-11-23 10:09:43 2024-11-23 10:09:43 1 1 1 1 .0 1% | 2024-11-23 10:09:17.821 2024-11-23 10:09:17 2024-11-23 10:09:17 1 1 1 26 rows selected. 2024-11-23 10:09:02.811 2024-11-23 10:09:05.821 2024-11-23 10:09:06.821 2024-11-23 10:09:07.821 2024-11-23 10:09:09.821 2024-11-23 10:09:11.821 2024-11-23 10:09:14.821 2024-11-23 10:09:15.821 2024-11-23 10:09:16.821 2024-11-23 10:09:17.821 2024-11-23 10:09:19.821 2024-11-23 10:09:20.821 2024-11-23 10:09:21.821 2024-11-23 10:09:22.821 2024-11-23 10:09:23.821 2024-11-23 10:09:24.821 2024-11-23 10:09:27.831 2024-11-23 10:09:31.831 2024-11-23 10:09:33.831 2024-11-23 10:09:35.831 2024-11-23 10:09:36.831 2024-11-23 10:09:37.831 2024-11-23 10:09:38.831 2024-11-23 10:09:39.831 2024-11-23 10:09:42.831 2024-11-23 10:09:43.831 --//单独取出SAMPLE_TIME排序,并没有出现在开头,而是出现在09:02-09:43范围内,这就解析不通了。 SYS@book> @ ashtop sid,module "event='latch: shared pool'" trunc(sysdate)+10/24+08/1440+59/86400 trunc(sysdate)+10/24+09/1440+48/86400 Total Distinct Distinct Distinct Seconds AAS %This SID MODULE FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1 --------- ------- ------- ---------- ------------ ------------------- ------------------- ---------- -------- ----------- 14 .3 7% | 13 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:39 1 14 14 13 .3 7% | 196 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:39 1 13 13 12 .2 6% | 132 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:42 1 12 12 12 .2 6% | 197 SQL*Plus 2024-11-23 10:09:06 2024-11-23 10:09:43 1 12 12 11 .2 6% | 68 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:39 1 11 11 11 .2 6% | 137 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:39 1 11 11 10 .2 5% | 18 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:39 1 10 10 10 .2 5% | 195 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:39 1 10 10 10 .2 5% | 199 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:43 1 10 10 9 .2 5% | 7 SQL*Plus 2024-11-23 10:09:05 2024-11-23 10:09:39 1 9 9 9 .2 5% | 16 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:35 1 9 9 8 .2 4% | 12 SQL*Plus 2024-11-23 10:09:07 2024-11-23 10:09:39 1 8 8 8 .2 4% | 72 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:38 1 8 8 8 .2 4% | 74 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:39 1 8 8 8 .2 4% | 75 SQL*Plus 2024-11-23 10:09:05 2024-11-23 10:09:27 1 8 8 8 .2 4% | 140 SQL*Plus 2024-11-23 10:09:05 2024-11-23 10:09:39 1 8 8 8 .2 4% | 192 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:37 1 8 8 7 .1 4% | 9 SQL*Plus 2024-11-23 10:09:11 2024-11-23 10:09:39 1 7 7 7 .1 4% | 133 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:33 1 7 7 7 .1 4% | 134 SQL*Plus 2024-11-23 10:09:02 2024-11-23 10:09:35 1 7 7 20 rows selected. --//正好20行,确实测试程序执行的。 --//我取消以下注解 --host sleep $((&&2/100|bc -l)) --//问题还是一样,说明我以前的测试并没有规避这个问题,以前的测试疏忽了,注意测试前一定要刷新共享池,看后面的测试就明白为 --//什么。也许以前的测试忘记做刷新共享池这步,以为小量延迟后问题消失。 --//我开始也怀疑resmgr:cpu quantum导致,仔细想想不应该。 --//当我将insert采用绑定变量写法后,问题依旧。 --insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,'&&2') ; insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,:v_method) ; --//定下心来思考,理论在测试的中间不会出现latch: shared pool等待事情,sql语句也不会产生子光标,应该是执行第1次执行如下是 --//硬解析。 EXECUTE IMMEDIATE 'Select /*+ &2 */ count(*) from t where id = :j ' INTO l_count USING i; --//在等待事件中记录的是latch: shared pool,后面几次执行后马上软软解析。 --//而ash在取样是还是取到latch: shared pool等待事件,这样才会出现前面ashtop输出的奇葩情况。 --//注实际上有几次测试我忘记刷新共享池,发现latch: shared pool消失,这才想起问题匿名PLSQL代码循环体执行sql语句第1次是硬 --//解析,就会出现这样的情况。而且只有这样解析才解析的通。 --//修改如下: $ cat m9.txt set verify off variable v_method varchar2(20) exec :v_method := '&&2'; DECLARE l_count PLS_INTEGER; BEGIN FOR i IN 1..1 LOOP EXECUTE IMMEDIATE 'Select /*+ &2 */ count(*) from t where id = :j ' INTO l_count USING i; END LOOP; END; / --host sleep $((&&2/100|bc -l)) insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,'&&2') ; --insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,:v_method) ; commit ; --select sysdate from dual ; DECLARE l_count PLS_INTEGER; BEGIN FOR i IN 1..&&1 LOOP EXECUTE IMMEDIATE 'Select /*+ &2 */ count(*) from t where id = :j ' INTO l_count USING i; END LOOP; END; / update job_times set time_ela = dbms_utility.get_time - time_ela where sid=sys_context ('userenv', 'sid') and method= :v_method; commit; quit --//先循环1次就可以规避这个问题。 $ zzdate;seq 20 | xargs -P 20 -IQ sqlplus -s -l scott/book @m9.txt 5e5 Q > /dev/null;zzdate trunc(sysdate)+11/24+40/1440+35/86400 trunc(sysdate)+11/24+41/1440+22/86400 SYS@book> @ ashtop event 1=1 trunc(sysdate)+11/24+40/1440+35/86400 trunc(sysdate)+11/24+41/1440+22/86400 Total Distinct Distinct Distinct Seconds AAS %This EVENT FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1 --------- ------- ------- ------------------------------------------ ------------------- ------------------- ---------- -------- ----------- 655 13.9 72% | resmgr:cpu quantum 2024-11-23 11:40:36 2024-11-23 11:41:20 8 45 11 237 5.0 26% | 2024-11-23 11:40:36 2024-11-23 11:41:21 128 46 164 6 .1 1% | cursor: pin S wait on X 2024-11-23 11:40:35 2024-11-23 11:40:35 1 1 1 6 .1 1% | log file sync 2024-11-23 11:40:37 2024-11-23 11:41:21 1 3 3 1 .0 0% | control file parallel write 2024-11-23 11:40:59 2024-11-23 11:40:59 1 1 1 1 .0 0% | kksfbc child completion 2024-11-23 11:40:35 2024-11-23 11:40:35 1 1 1 6 rows selected. --//不再出现latch: shared pool等待事情,我反复测试多次,结果都是一样。 4.总结: --//感觉应该算11g的bug,不过我的测试是一个循环,非常特殊。 --//以前确实没有仔细查看一些细节,也许这样问题早就能发现。
[20241123]11g下测试遇到latch shared pool等待事件问题.txt
来源:这里教程网
时间:2026-03-03 20:56:46
作者:
编辑推荐:
- [20241123]11g下测试遇到latch shared pool等待事件问题.txt03-03
- [20241123]测试软软解析遇到的疑惑3.txt03-03
- [20241123]PLSQL语句代码执行几次会缓存.txt03-03
- [20241124]测试软软解析人为修改cursor pin S的mutext值.txt03-03
- 全 网 第 一 份JSON二元性“写操作”的实践03-03
- 第15期Oracle调用DBMS_JOB.SUBMIT报错:ORA-27486:权限不足03-03
- 新控制文件恢复旧的备份(表空间被删除新控制文件里面没有)03-03
- Oracle数据库 Truncate慢分析03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 全 网 第 一 份JSON二元性“写操作”的实践
全 网 第 一 份JSON二元性“写操作”的实践
26-03-03 - 第15期Oracle调用DBMS_JOB.SUBMIT报错:ORA-27486:权限不足
- Oracle数据库 Truncate慢分析
Oracle数据库 Truncate慢分析
26-03-03 - 长沙家具宝藏店法拉利沙发,奢华优雅的家居典范
长沙家具宝藏店法拉利沙发,奢华优雅的家居典范
26-03-03 - oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
26-03-03 - 一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
26-03-03 - 湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
26-03-03 - 07 Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线
- 湖南家具大黑牛沙发,舒适与品质的完美邂逅
湖南家具大黑牛沙发,舒适与品质的完美邂逅
26-03-03 - 实战分享:如何在HP-UX上高效扩容Oracle 12c RAC ASM磁盘
