[20250221]library cache bucket mutex等待模式测试脚本.txt --//以前的测试都是手工操作,操作很繁琐,经常在tmux界面上切换session。 --//写一个测试脚本方便测试。 $ cat lcm.sh #!/bin/bash # arg1=mutex_address arg2=offset arg3=monitor_times offset=${2:-4} sleeps=${3:-20} v_addr="0x${1}+${offset}" echo "begin mutex value :" gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/8wx 0x${1}" -ex "quit" | grep "^0x" | grep -v "^0x0" gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "set *( int *)(${v_addr})=0x7777" -ex "quit" >/dev/null echo "modify mutex value :" gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/8wx 0x${1}" -ex "quit" | grep "^0x" | grep -v "^0x0" echo sleep $sleeps seconds (sleep $sleeps ;gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "set *( int *)(${v_addr})=0x0" -ex "quit" > /dev/null) & sqlplus -s -l scott/book@book01p <<EOF > /dev/null set echo off head off verify off feedback off define # variable my_sid number column spid new_value v_spid exec :my_sid := userenv('sid'); select p.spid from v\$session s,v\$process p where s.sid = :my_sid and s.paddr=p.addr; host strace -Ttt -y -f -p #v_spid -o laji.txt 2>&1 & host sleep 1 select /*+ 9 */ count(*) from dept where deptno = 93834; quit EOF echo "end mutex value :" gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/8wx 0x${1}" -ex "quit" | grep "^0x" | grep -v "^0x0" mv -iv laji.txt mutex$(date +"%Y%m%d%H%M%S").txt --//简单说明:选择select /*+ 9 */ count(*) from dept where deptno = 93834;这条语句bucket=0. --//缺省修改该地址偏移量=4,检测时间20秒,修改的值直接写死0x7777。 --// arg1=mutex_address arg2=offset arg3=monitor_times,最后文件保存为mutex$(date +"%Y%m%d%H%M%S").txt --//必须安装gdb,并且正常使用。要修改define #代替原来的&,避免冲突,因为在sqlplus调用bash shell时需要使用&放在后台执行。 --//写的有点粗糙。host starce 后面加入host sleep 1主要是因为发现后面的sql语句会先于strace执行。 --//里面是sql语句登录后第1次执行,必须软解析,要使用library cache bucket mutex。可以在前面加入alter session set --//session_cached_cursors=0 ;更加保险。 --//再次提醒千万不要在生产系统尝试使用!! --//验证测试: 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.确定要修改的mutex地址。 SCOTT@book01p> select /*+ 9 */ count(*) from dept where deptno = 93834; COUNT(*) ---------- 0 SCOTT@book01p> @hashz HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET HASH_HEX SQL_EXEC_START SQL_EXEC_ID ---------- ------------- ------------ ---------- ---------- ------------------- ----------- 3403546624 as3g00v5dw000 0 0 cade0000 2025-02-21 16:17:21 16777216 SYS@book> oradebug setmypid Statement processed. SYS@book> oradebug dump library_cache 4 Statement processed. $ grep "^Bucket:" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_10770.trc | head -4 Bucket: #=0 Mutex=0x6cfa1400(1125281431552, 9, 0, 6) Bucket: #=5 Mutex=0x6cfa14f0(1125281431552, 4, 0, 6) Bucket: #=17 Mutex=0x6cfa1730(1125281431552, 8, 0, 6) Bucket: #=39 Mutex=0x6cfa1b50(1125281431552, 4, 0, 6) --//以上是前面测试的结果,直接找Bucket: #=0 Mutex=0x6cfa1400的语句测试。 --//该sql语句select /*+ 9 */ count(*) from dept where deptno = 93834;的bucket=0. --//Bucket: #=0 Mutex=0x6cfa1400 --//0x6cfa1400-0x10 = 0x6cfa13f0 3.测试_mutex_wait_scheme=2. --//_mutex_wait_scheme=2是缺省值: $ ./lcm.sh 6cfa1400 4 20 begin mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000004 0x00000000 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 modify mutex value : 0x6cfa1400: 0x00000000 0x00007777 0x00000004 0x00000000 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 sleep 20 seconds end mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000005 0x00000490 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 'laji.txt' -> 'mutex20250221162228.txt' $ egrep "getrusage" mutex20250221162228.txt 4090 16:22:07.482052 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 39076}, ru_stime={0, 8015}, ...}) = 0 <0.000020> 4090 16:22:08.668687 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 42091}, ru_stime={0, 10792}, ...}) = 0 <0.000009> 4090 16:22:10.681071 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 46590}, ru_stime={0, 13977}, ...}) = 0 <0.000014> 4090 16:22:12.680455 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 49810}, ru_stime={0, 15793}, ...}) = 0 <0.000014> 4090 16:22:14.700046 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 51433}, ru_stime={0, 20818}, ...}) = 0 <0.000014> 4090 16:22:16.707209 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 56275}, ru_stime={0, 23557}, ...}) = 0 <0.000014> 4090 16:22:18.714197 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 63273}, ru_stime={0, 25578}, ...}) = 0 <0.000014> 4090 16:22:20.719146 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 66264}, ru_stime={0, 28197}, ...}) = 0 <0.000013> 4090 16:22:22.727183 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 71892}, ru_stime={0, 29955}, ...}) = 0 <0.000013> 4090 16:22:24.729607 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 74703}, ru_stime={0, 33689}, ...}) = 0 <0.000014> 4090 16:22:26.736605 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 78728}, ru_stime={0, 36336}, ...}) = 0 <0.000014> 4090 16:22:27.190076 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 78736}, ru_stime={0, 37854}, ...}) = 0 <0.000007> 4090 16:22:27.191199 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 78919}, ru_stime={0, 37942}, ...}) = 0 <0.000006> 4090 16:22:27.195224 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 78959}, ru_stime={0, 37961}, ...}) = 0 <0.000008> 4090 16:22:27.196208 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 80047}, ru_stime={0, 37961}, ...}) = 0 <0.000008> --//getrusage的时间间隔2秒。 $ awk '{print $3}' mutex20250221162228.txt |egrep "semtimedop|getrusage|sched_yield|select" | uniq -c 1 getrusage(0x1 2 sched_yield() 81 semtimedop(98304, 1 getrusage(0x1 129 semtimedop(98304, 1 getrusage(0x1 84 semtimedop(98304, 1 getrusage(0x1 111 semtimedop(98304, 1 getrusage(0x1 119 semtimedop(98304, 1 getrusage(0x1 134 semtimedop(98304, 1 getrusage(0x1 98 semtimedop(98304, 1 getrusage(0x1 123 semtimedop(98304, 1 getrusage(0x1 119 semtimedop(98304, 1 getrusage(0x1 124 semtimedop(98304, 1 getrusage(0x1 44 semtimedop(98304, 4 getrusage(0x1 --//开始2次sched_yield,采用semtimedop休眠,如此循环。 $ egrep "semtimedop" mutex20250221162228.txt| head -3 4090 16:22:07.482361 semtimedop(98304, {{65, -1, 0}}, 1, {0, 10000000}) = -1 EAGAIN (Resource temporarily unavailable) <0.009582> 4090 16:22:07.492051 semtimedop(98304, {{65, -1, 0}}, 1, {0, 10000000}) = -1 EAGAIN (Resource temporarily unavailable) <0.014498> 4090 16:22:07.506732 semtimedop(98304, {{65, -1, 0}}, 1, {0, 10000000}) = -1 EAGAIN (Resource temporarily unavailable) <0.011557> --//时间是{0, 10000000},前者是秒,后面是纳秒。10000000/10^9 = .01 ,相当于10毫秒。 $ egrep "semtimedop|sched_yield|select" mutex20250221162228.txt|wc 1168 18668 152856 --//休眠1168次。前面记录0x00000490 = 1168,完全一致。 4.测试_mutex_wait_scheme=1. SYS@book> alter system set "_mutex_wait_scheme"=1 scope=memory; System altered. $ ./lcm.sh 6cfa1400 4 20 begin mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000006 0x00000490 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 modify mutex value : 0x6cfa1400: 0x00000000 0x00007777 0x00000006 0x00000490 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 sleep 20 seconds end mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000007 0x000019b2 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 'laji.txt' -> 'mutex20250221162924.txt' $ egrep "getrusage" 'mutex20250221162924.txt' 4311 16:29:04.215070 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 19086}, ru_stime={0, 7798}, ...}) = 0 <0.000015> 4311 16:29:04.215204 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 19086}, ru_stime={0, 7798}, ...}) = 0 <0.000013> 4311 16:29:05.361880 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 36767}, ru_stime={0, 15757}, ...}) = 0 <0.000009> 4311 16:29:07.377948 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 55633}, ru_stime={0, 27816}, ...}) = 0 <0.000009> 4311 16:29:09.382434 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 70886}, ru_stime={0, 46348}, ...}) = 0 <0.000014> 4311 16:29:11.382197 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 89110}, ru_stime={0, 53466}, ...}) = 0 <0.000014> 4311 16:29:13.383764 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 107836}, ru_stime={0, 74137}, ...}) = 0 <0.000009> 4311 16:29:15.396900 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 116985}, ru_stime={0, 80218}, ...}) = 0 <0.000015> 4311 16:29:17.403258 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 125922}, ru_stime={0, 93542}, ...}) = 0 <0.000013> 4311 16:29:19.414202 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 128673}, ru_stime={0, 102938}, ...}) = 0 <0.000014> 4311 16:29:21.415667 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 131408}, ru_stime={0, 113157}, ...}) = 0 <0.000014> 4311 16:29:23.434382 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 149940}, ru_stime={0, 134562}, ...}) = 0 <0.000007> 4311 16:29:23.891391 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 152444}, ru_stime={0, 141011}, ...}) = 0 <0.000008> 4311 16:29:23.892466 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 152581}, ru_stime={0, 141138}, ...}) = 0 <0.000006> 4311 16:29:23.896382 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 152610}, ru_stime={0, 141164}, ...}) = 0 <0.000007> --//getrusage的时间间隔2秒。 $ awk '{print $3}' mutex20250221162924.txt |egrep "semtimedop|getrusage|sched_yield|select" | uniq -c 2 getrusage(0x1 1 sched_yield() 563 select(0, 1 getrusage(0x1 642 select(0, 1 getrusage(0x1 698 select(0, 1 getrusage(0x1 466 select(0, 1 getrusage(0x1 825 select(0, 1 getrusage(0x1 308 select(0, 1 getrusage(0x1 414 select(0, 1 getrusage(0x1 232 select(0, 1 getrusage(0x1 247 select(0, 1 getrusage(0x1 769 select(0, 1 getrusage(0x1 245 select(0, 3 getrusage(0x1 --//开始1次sched_yield,采用select休眠,如此循环。 $ egrep "select" 'mutex20250221162924.txt'| head -3 4311 16:29:04.215383 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001700> 4311 16:29:04.217165 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001122> 4311 16:29:04.218381 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.001717> --//时间是{0, 1000},前者是秒,后面是微秒。1000/10^6 = .001秒 ,相当于1毫秒。 $ egrep "semtimedop|sched_yield|select" 'mutex20250221162924.txt'|wc 5410 64914 432775 --//0x000019b2-0x490 = 5410,前面的输出记录前面相减正好也是5410. 5.测试_mutex_wait_scheme=0. SYS@book> alter system set "_mutex_wait_scheme"=0 scope=memory; System altered. $ ./lcm.sh 6cfa1400 4 20 begin mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000007 0x000019b2 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 modify mutex value : 0x6cfa1400: 0x00000000 0x00007777 0x00000007 0x000019b2 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 sleep 20 seconds end mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000008 0x00001a72 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 'laji.txt' -> 'mutex20250221163433.txt' $ egrep "getrusage" 'mutex20250221163433.txt' 4431 16:34:12.806912 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 19180}, ru_stime={0, 14571}, ...}) = 0 <0.000018> 4431 16:34:12.807044 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 19180}, ru_stime={0, 14571}, ...}) = 0 <0.000013> 4431 16:34:13.986557 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 128699}, ru_stime={0, 83541}, ...}) = 0 <0.000008> 4431 16:34:15.989945 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 191514}, ru_stime={0, 142765}, ...}) = 0 <0.000007> 4431 16:34:17.993149 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 273577}, ru_stime={0, 209624}, ...}) = 0 <0.000010> 4431 16:34:19.994035 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 368504}, ru_stime={0, 295521}, ...}) = 0 <0.000007> 4431 16:34:21.996906 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 474400}, ru_stime={0, 368316}, ...}) = 0 <0.000009> 4431 16:34:23.001664 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 515769}, ru_stime={0, 407250}, ...}) = 0 <0.000010> 4431 16:34:25.003146 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 575372}, ru_stime={0, 456413}, ...}) = 0 <0.000014> 4431 16:34:27.026933 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 627941}, ru_stime={0, 495616}, ...}) = 0 <0.000014> 4431 16:34:29.032056 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 727438}, ru_stime={0, 567155}, ...}) = 0 <0.000012> 4431 16:34:31.051320 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 801699}, ru_stime={0, 616884}, ...}) = 0 <0.000011> 4431 16:34:32.510836 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 919641}, ru_stime={0, 703181}, ...}) = 0 <0.000006> 4431 16:34:32.515097 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 920391}, ru_stime={0, 703181}, ...}) = 0 <0.000006> 4431 16:34:32.515681 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 920674}, ru_stime={0, 703181}, ...}) = 0 <0.000005> --//getrusage的时间间隔2秒。 $ awk '{print $3}' 'mutex20250221163433.txt' |egrep "semtimedop|getrusage|sched_yield|select" | uniq -c| head -10 2 getrusage(0x1 99 sched_yield() 1 select(0, 99 sched_yield() 1 select(0, 99 sched_yield() 1 select(0, 99 sched_yield() 1 select(0, 99 sched_yield() --//99次sched_yield(),1次select,如此循环,到2秒之后调用getrusage。 $ egrep "semtimedop|sched_yield|select" 'mutex20250221163433.txt'|wc 196800 1192608 10873200 --//0x00001a72-0x000019b2 = 0xc0= 192,以前测试已经说明单次测试最大记录sleeps 0xffff,大于该值就溢出了,仅仅记录后4位。 --//196800 = 0x300c0,前面的3丢失了,真实的环境很少出现这样的情况。 SYS@book> @ mutexprofz idn,hash,loc,req,blk,maddr "idn=0" -- MutexProf by Tanel Poder (http://www.tanelpoder.com) -- Showing profile of top 50 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 REQ BLK mutex_addr OBJECT_NAME ---------- -------------- --------------- ---------- ---------- --------------------------------- ---------- ---------- -------------------- ----------------- 192 Library Cache 0 kglhdgn1 62 156 30583 000000006CFA1400 (name not found) --//每次登录执行的sid不变,仅仅记录最后的情况。blk=30583 = 0x7777 6.测试修改mutext值的0-3字节。 SYS@book> alter system set "_mutex_wait_scheme"=2 scope=memory; System altered. $ ./lcm.sh 6cfa1400 0 5 begin mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000014 0x00001a72 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 modify mutex value : 0x6cfa1400: 0x00007777 0x00000000 0x00000014 0x00001a72 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 sleep 5 seconds end mutex value : 0x6cfa1400: 0x00000000 0x00000000 0x00000015 0x0000c854 0x6cfa1410: 0x00000000 0x00000000 0x6608b220 0x00000000 'laji.txt' -> 'mutex20250221171440.txt' $ egrep "getrusage" mutex20250221171440.txt 5088 17:14:34.993468 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 24405}, ru_stime={0, 8919}, ...}) = 0 <0.000014> 5088 17:14:34.993582 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 24405}, ru_stime={0, 8919}, ...}) = 0 <0.000012> 5088 17:14:36.335821 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 261605}, ru_stime={0, 101049}, ...}) = 0 <0.000005> 5088 17:14:38.336613 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 621233}, ru_stime={0, 215673}, ...}) = 0 <0.000006> 5088 17:14:39.645600 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 843491}, ru_stime={0, 304561}, ...}) = 0 <0.000005> 5088 17:14:39.646849 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 843702}, ru_stime={0, 304637}, ...}) = 0 <0.000005> 5088 17:14:39.650208 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 843734}, ru_stime={0, 304648}, ...}) = 0 <0.000006> 5088 17:14:39.650780 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 844098}, ru_stime={0, 304780}, ...}) = 0 <0.000005> --//getrusage的时间间隔2秒。 $ awk '{print $3}' mutex20250221171440.txt | egrep "semtimedop|getrusage|sched_yield|select" | uniq -c| head -10 2 getrusage(0x1 99 sched_yield() 1 select(0, 99 sched_yield() 1 select(0, 99 sched_yield() 1 select(0, 99 sched_yield() 1 select(0, 99 sched_yield() --//99次sched_yield(),1次select,如此循环,到2秒之后调用getrusage。类似_mutex_wait_scheme=0. $ egrep "semtimedop|sched_yield|select" mutex20250221171440.txt|wc 110050 666900 6080250 --//0x0000c854-0x00001a72 = 0xade2= 44514.以前测试已经说明单次测试最大记录sleeps 0xffff,大于该值就溢出了,仅仅记录后4位。 --//110050 = 0x1ade2,前面的1丢失了,真实的环境很少出现这样的情况。 SYS@book> @ mutexprofz idn,hash,loc,req,blk,maddr "idn=0" -- MutexProf by Tanel Poder (http://www.tanelpoder.com) -- Showing profile of top 50 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 REQ BLK mutex_addr OBJECT_NAME ---------- -------------- --------------- ---------- ---------- --------------------------------- ---------- ---------- -------------------- ---------------- 44514 Library Cache 0 kglhdgn1 62 156 0 000000006CFA1400 (name not found)
[20250221]library cache bucket mutex等待模式测试脚本.txt
来源:这里教程网
时间:2026-03-03 21:33:55
作者:
编辑推荐:
- [20250221]library cache bucket mutex等待模式测试脚本.txt03-03
- hyper网络,hyper网络的实操攻略,hyper-v批量管理工具的使用指南03-03
- Oracle 23C 新特性AI Vector Search03-03
- [20250210]library cache mutex X与library cache bucket mutex X的区别(11g).txt03-03
- [20250211]更正11g x$mutex_sleep_history记录的一些疑问.txt03-03
- [20250214]不要乱设置隐含参数.txt03-03
- 第31期 SQL中COUNT(*)与COUNT(column)区别03-03
- [20250214]设置_disable_last_successful_login_time=true.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- hyper网络,hyper网络的实操攻略,hyper-v批量管理工具的使用指南
- 当哪吒邂逅铂乐・极满家,开启家居新境界
当哪吒邂逅铂乐・极满家,开启家居新境界
26-03-03 - hyper xp,hyper xp的实操攻略,hyper-v批量管理工具的使用指南
- hyper 共享,hyper 共享的实操流程,hyper-v批量管理工具的使用指南
- hyper v win10,hyper v win10的实操流程,hyper-v批量管理工具的使用指南
- hyper v vmware,hyper v vmware的实操流程,hyper-v批量管理工具的使用指南
- 数据库io负载瓶颈问题
数据库io负载瓶颈问题
26-03-03 - log file sync导致的Oracle重大生产性能故障
log file sync导致的Oracle重大生产性能故障
26-03-03 - 蛇年第一个Oracle 600错误!15年老司机也没见过
蛇年第一个Oracle 600错误!15年老司机也没见过
26-03-03 - oracle多次密码错误登录,用户锁住或失效
oracle多次密码错误登录,用户锁住或失效
26-03-03
