[20241124]测试软软解析人为修改cursor pin S的mutext值.txt --//测试软软解析人为修改cursor pin S的mutext值会出现怎么情况。 1.环境: SCOTT@book01p> @ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 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'; insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,:v_method) ; commit ; 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 3.测试: --//delete from JOB_TIMES ; --//commit ; --//删除前面的测试结果。 $ zzdate;seq 20 | xargs -P 20 -IQ sqlplus -s -l scott/book@book01p @m9.txt 1e4 AAAA > /dev/null;zzdate trunc(sysdate)+15/24+42/1440+00/86400 trunc(sysdate)+15/24+42/1440+03/86400 SYS@book> @ mutexprofz idn,hash,loc,maddr "ts>=trunc(sysdate)+15/24+42/1440+00/86400 and ts<=trunc(sysdate)+15/24+42/1440+03/86400" -- MutexProf by Tanel Poder (http://www.tanelpoder.com) -- Showing profile of top 20 sleeps... -- column info : id idn hash hash_value=>hash_value ts=>sleep_timestamp -- req=>requesting_session blk=>blocking_session val=>mutex_value maddr=>mutex_addr SUM_SLEEPS GETS_DIFF MUTEX_TYPE IDN HASH GET_LOCATION mutex_addr OBJECT_NAME ---------- -------------- --------------- ---------- ---------- --------------------------------- -------------------- -------------------------------------------------------------------------------- 25 258891 Cursor Pin 321664448 321664448 kksLockDelete [KKSCHLPIN6] 00000000611FCD58 Select /*+ AAAA */ count(*) from t where id = :j 3 123257 Cursor Pin 321664448 321664448 kksfbc [KKSCHLFSP2] 00000000611FCD58 Select /*+ AAAA */ count(*) from t where id = :j --//主要目的获得mutex_addr=00000000611FCD58。 SYS@book> @ opeek 00000000611FCD58 24 1 New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3440_0001.trc [0611FCD58, 0611FCD70) = 00000000 00000000 00061A98 000000C1 132C35C0 00000000 --//前面8位是mutex的值。前4位为持有mutex的数量,后4位为阻塞的sid,注意ashtop输出p2raw参数大小头问题显示是反过来的。 $ mod_addr.sh 00000000611FCD58 0 100 0x611fcd58: 0x00000100 SYS@book> @ opeek 00000000611FCD58 24 1 New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3440_0002.trc [0611FCD58, 0611FCD70) = 00000100 00000000 00061A99 000000C1 132C35C0 00000000 --//session 1: SCOTT@book01p> @ spid ============================== SID : 145 SERIAL# : 5816 PROCESS : 4007 SERVER : DEDICATED SPID : 4009 PID : 45 P_SERIAL# : 7 KILL_COMMAND : alter system kill session '145,5816' immediate; PL/SQL procedure successfully completed. --//window 1: $ strace -f -p 4009 -y -Ttt 2>&1 | tee /tmp/test.txt --//session 1: SCOTT@book01p> @ m9.txt 1 AAAA PL/SQL procedure successfully completed. 1 row created. Commit complete. PL/SQL procedure successfully completed. 1 row updated. Commit complete. 4.测试2: --//修改后4位。 $ mod_addr.sh 00000000611FCD58 4 1 0x611fcd5c: 0x00000001 SYS@book> @ opeek 00000000611FCD58 24 1 New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3440_0003.trc [0611FCD58, 0611FCD70) = 00000000 00000001 00061AAD 00004CA5 132C35C0 00000000 --//window 1: $ strace -f -p 4557 -y -Ttt 2>&1 | tee /tmp/test2.txt --//session 1: SCOTT@book01p> @ m9.txt 1 AAAA --//挂起!! SYS@book> @ ashtop event,p1raw,p1,p2raw 1=1 trunc(sysdate)+16/24+04/1440+18/86400 sysdate Total Distinct Distinct Distinct Seconds AAS %This EVENT P1RAW P1 P2RAW FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1 --------- ------- ------- ------------------------------------------ ----------------- ---------- ----------------- ------------------- ------------------- ---------- -------- ----------- 18 .1 43% | cursor: pin S 00000000132C35C0 321664448 0000000100000000 2024-11-24 16:06:29 2024-11-24 16:06:46 1 18 18 12 .1 29% | 100 2024-11-24 16:04:36 2024-11-24 16:07:12 1 11 11 9 .0 21% | 3 2024-11-24 16:04:36 2024-11-24 16:05:56 1 9 9 2 .0 5% | 1 2024-11-24 16:05:04 2024-11-24 16:05:25 1 2 2 1 .0 2% | 0 2024-11-24 16:05:58 2024-11-24 16:05:58 1 1 1 SYS@book> @ mutexprofz idn,hash,loc,maddr "ts>=trunc(sysdate)+16/24+04/1440+18/86400 and maddr='00000000611FCD58'" -- MutexProf by Tanel Poder (http://www.tanelpoder.com) -- Showing profile of top 20 sleeps... -- column info : id idn hash hash_value=>hash_value ts=>sleep_timestamp -- req=>requesting_session blk=>blocking_session val=>mutex_value maddr=>mutex_addr SUM_SLEEPS GETS_DIFF MUTEX_TYPE IDN HASH GET_LOCATION mutex_addr OBJECT_NAME ---------- -------------- --------------- ---------- ---------- --------------------------------- -------------------- ------------------------------------------------- 5276 Cursor Pin 321664448 321664448 kkslce [KKSCHLPIN2] 00000000611FCD58 Select /*+ AAAA */ count(*) from t where id = :j $ egrep "sched_yield|getrusage|select" /tmp/test2.txt | awk '{print $2}'| uniq -c| head -60 187 select(0, 1 getrusage(0x1 652 select(0, 1 getrusage(0x1 400 select(0, 1 getrusage(0x1 754 select(0, 1 getrusage(0x1 321 select(0, 1 getrusage(0x1 486 select(0, 1 getrusage(0x1 528 select(0, 1 getrusage(0x1 963 select(0, 1 getrusage(0x1 290 select(0, 9 getrusage(0x1 $ egrep "sched_yield|getrusage|select" /tmp/test2.txt | grep getrusage 16:06:32.546801 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 57279}, ru_stime={0, 31503}, ...}) = 0 <0.000013> 16:06:34.553095 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 73031}, ru_stime={0, 50457}, ...}) = 0 <0.000022> 16:06:36.558399 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 79758}, ru_stime={0, 61748}, ...}) = 0 <0.000018> 16:06:38.561963 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 109984}, ru_stime={0, 77131}, ...}) = 0 <0.000054> 16:06:40.563244 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 123649}, ru_stime={0, 81969}, ...}) = 0 <0.000009> 16:06:42.573588 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 134842}, ru_stime={0, 95343}, ...}) = 0 <0.000013> 16:06:44.577038 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 153945}, ru_stime={0, 108586}, ...}) = 0 <0.000047> 16:06:46.578335 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 172698}, ru_stime={0, 127025}, ...}) = 0 <0.000054> 16:06:46.970193 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 178005}, ru_stime={0, 129856}, ...}) = 0 <0.000013> 16:06:46.971183 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 178220}, ru_stime={0, 130013}, ...}) = 0 <0.000012> 16:06:46.971384 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 178315}, ru_stime={0, 130082}, ...}) = 0 <0.000042> 16:06:46.971767 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 178492}, ru_stime={0, 130211}, ...}) = 0 <0.000023> 16:06:46.972097 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 178530}, ru_stime={0, 130239}, ...}) = 0 <0.000012> 16:06:46.972316 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 178609}, ru_stime={0, 130297}, ...}) = 0 <0.000011> 16:06:46.973629 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 179287}, ru_stime={0, 130297}, ...}) = 0 <0.000017> 16:06:46.977169 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 179287}, ru_stime={0, 130297}, ...}) = 0 <0.000011> 16:06:46.978066 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 179750}, ru_stime={0, 130297}, ...}) = 0 <0.000031> --//调用getrusage 2秒间隔。 $ egrep "sched_yield|getrusage|select" /tmp/test2.txt | grep select | head -10 16:06:31.865221 select(0, [], [], [], {0, 167}) = 0 (Timeout) <0.001087> 16:06:31.866541 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001832> 16:06:31.868463 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001889> 16:06:31.870420 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001885> 16:06:31.872362 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001827> 16:06:31.874246 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001098> 16:06:31.875419 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001811> 16:06:31.877299 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.002742> 16:06:31.880132 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.002035> 16:06:31.882230 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001717> --//休眠的时间是1毫秒。 5.mod_addr.sh 代码如下: $ cat mod_addr.sh #/bin/bash # modify address value # arg1=address arg2=offset (default 0) arg3=value (default 0) offset=${2:-0} value=${3:-0} gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "set *( int *)(0x${1}+0x${offset})=0x${value}" -ex "x /wx 0x${1}+0x${offset}" -ex "quit" | grep "^0x" | grep -v "^0x0"
[20241124]测试软软解析人为修改cursor pin S的mutext值.txt
来源:这里教程网
时间:2026-03-03 20:56:43
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 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磁盘
