[20241128]21c下测试软解析人为修改cursor pin S的mutext值.txt --//21c下测试软解析人为修改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.建立测试环境: SCOTT@book01p> create table deptxxx as select * from dept; Table created. $ uniq -c m2.sh 1 #! /bin/bash 1 sleep $(echo $1/500 | bc -l ) 1 sqlplus -s -l scott/book@book01p <<EOF >/dev/null 1 set feedback off 1 select count(1) from deptxxx; 20002 / 1 quit 1 EOF 3.测试: $ /usr/local/bin/zzdate ; seq 10 | xargs -IQ -P 10 ./m2.sh Q ; /usr/local/bin/zzdate trunc(sysdate)+08/24+39/1440+17/86400 -1732754357.243716630 trunc(sysdate)+08/24+39/1440+49/86400 1732754389.135336931 --//需要31.891620301秒。 SYS@book> @ mutexprofz idn,hash,loc,maddr "ts>=trunc(sysdate)+08/24+39/1440+17/86400 and ts<=trunc(sysdate)+08/24+39/1440+49/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 ---------- -------------- --------------- ---------- ---------- --------------------------------- -------------------- -------------------------------------------------------------------------------- 3 322926 Cursor Pin 2945576271 2945576271 kksfbc [KKSCHLPIN1] 0000000060E01730 select count(1) from deptxxx 2 92252 Cursor Pin 2945576271 2945576271 kksLockDelete [KKSCHLPIN6] 0000000060E01730 select count(1) from deptxxx --//主要目的获得mutex_addr=0000000060E01730 SYS@book> @ opeek 0000000060E01730 24 0 [060E01730, 060E01748) = 00000000 00000000 00061AC6 00000009 AF91ED4F 00000000 --//前面8位是mutex的值。前4位为持有mutex的数量,后4位为阻塞的sid,注意ashtop输出p2raw参数大小头问题显示是反过来的。 $ mod_addr.sh 0000000060E01730 0 100 0x60e01730: 0x00000100 SYS@book> @ opeek 0000000060E01730 24 0 [060E01730, 060E01748) = 00000100 00000000 00061AC6 00000009 AF91ED4F 00000000 --//session 1: SCOTT@book01p> @ spid ============================== SID : 404 SERIAL# : 11390 PROCESS : 3534 SERVER : DEDICATED SPID : 3536 PID : 63 P_SERIAL# : 2 KILL_COMMAND : alter system kill session '404,11390' immediate; PL/SQL procedure successfully completed. --//window 1: $ strace -f -p 3536 -y -Ttt 2>&1 | tee /tmp/test.txt --//session 1: SCOTT@book01p> select count(1) from deptxxx; COUNT(1) ---------- 4 --//完全不阻塞。 4.继续测试: $ mod_addr.sh 0000000060E01730 4 101 0x60e01734: 0x00000101 SYS@book> @ opeek 0000000060E01730 24 0 [060E01730, 060E01748) = 00000100 00000101 00061AC8 00000009 AF91ED4F 00000000 --//session 1,退出重新登录: SCOTT@book01p> @ spid ============================== SID : 404 SERIAL# : 27532 PROCESS : 3747 SERVER : DEDICATED SPID : 3749 PID : 63 P_SERIAL# : 3 KILL_COMMAND : alter system kill session '404,27532' immediate; PL/SQL procedure successfully completed. --//window 1: $ strace -f -p 3749 -y -Ttt 2>&1 | tee /tmp/test.txt --//session 1: SCOTT@book01p> select count(1) from deptxxx; --//挂起!! --//window 2: $ mod_addr.sh 0000000060E01730 4 0 0x60e01734: 0x00000000 SYS@book> @ opeek 0000000060E01730 24 0 [060E01730, 060E01748) = 00000100 00000000 00061ACA 00000E22 AF91ED4F 00000000 --//session 1: SCOTT@book01p> select count(1) from deptxxx; COUNT(1) ---------- 4 $ awk '{print $2}' /tmp/test.txt | uniq -c 1 3749 1 read(16<socket:[23424]>, 2 getrusage(0x1 247 select(0, 1 getrusage(0x1 361 select(0, 1 getrusage(0x1 338 select(0, 1 getrusage(0x1 357 select(0, 1 getrusage(0x1 709 select(0, 1 getrusage(0x1 404 select(0, 1 getrusage(0x1 833 select(0, 1 getrusage(0x1 360 select(0, 1 getrusage(0x1 1 write(16<socket:[23424]>, 1 read(16<socket:[23424]>, 1 getrusage(0x1 1 write(16<socket:[23424]>, 1 read(16<socket:[23424]>, $ grep getrusage /tmp/test.txt 08:48:19.496961 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 32003}, ru_stime={0, 11734}, ...}) = 0 <0.000023> 08:48:19.497149 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 32060}, ru_stime={0, 11755}, ...}) = 0 <0.000026> 08:48:20.778744 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 38627}, ru_stime={0, 18177}, ...}) = 0 <0.000013> 08:48:22.788879 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 48600}, ru_stime={0, 30375}, ...}) = 0 <0.000151> 08:48:24.797299 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 56541}, ru_stime={0, 37266}, ...}) = 0 <0.000017> 08:48:26.801396 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 66621}, ru_stime={0, 46776}, ...}) = 0 <0.000191> 08:48:28.802363 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 83307}, ru_stime={0, 72304}, ...}) = 0 <0.000014> 08:48:30.804658 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 85094}, ru_stime={0, 94211}, ...}) = 0 <0.000029> 08:48:32.804952 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 100286}, ru_stime={0, 127348}, ...}) = 0 <0.000014> 08:48:33.471489 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 102827}, ru_stime={0, 134961}, ...}) = 0 <0.000008> 08:48:33.472671 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 102973}, ru_stime={0, 135152}, ...}) = 0 <0.000007> --//间隔2秒调用getrusage。 $ grep select /tmp/test.txt | head -10 08:48:19.497351 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001294> 08:48:19.498783 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.003449> 08:48:19.502327 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001882> 08:48:19.504299 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.002276> 08:48:19.506666 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.002341> 08:48:19.509249 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001735> 08:48:19.511126 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.002005> 08:48:19.513223 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001741> 08:48:19.515055 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001938> 08:48:19.517085 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001795> --//select 调用休眠时间是1毫秒。 5.小结: --//说明软解析是持有数量mutext值前4位,不阻塞sql语句执行。 6.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"
[20241128]21c下测试软解析人为修改cursor pin S的mutext值.txt
来源:这里教程网
时间:2026-03-03 20:56:57
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- delete 删除2600万数据
delete 删除2600万数据
26-03-03 - Oracle数据恢复—底层解析数据文件恢复Oracle数据库数据的案例
Oracle数据恢复—底层解析数据文件恢复Oracle数据库数据的案例
26-03-03 - 数据库管理-第266期 MOS改版,该如何登录(20241126)
数据库管理-第266期 MOS改版,该如何登录(20241126)
26-03-03 - 全 网 第 一 份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
