[20260812]简单探究row cache mutex的相关问题.txt
[20260812]简单探究row cache mutex的相关问题.txt
--//继续昨天的探究.
--//假设一个表scott.dept,对象类型dc_objects,oracle如何确定那些chunk上寻找row cache mutex以及row cache hash呢? 必须还
--//有chunk记录这些信息.
1.环境:
SYS@book> @ 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.分析:
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
FROM x$ksmsp a
WHERE KSMCHCOM like 'row cache %' ;
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS
---------------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------------- ---------- -------- ---------- ---------------- ----------
...
00007FD9EB702A80 99864 1 1 1 1 row cache mutex 00000000760C3958 1040 perm 0 0000000076081000 256
00007FD9EB702A18 99865 1 1 1 1 row cache mutex 00000000760C2148 6160 perm 0 0000000076081000 256
00007FD9EB7029B0 99866 1 1 1 1 row cache hash 00000000760C1138 4112 perm 0 0000000076081000 256
...
--//单独拿其中一段看看,注我的测试环境每次重启该地址不会变化的,我没有修改sga相关配置.
--//以前11下可以使用x$ksmmem视图查询,但是21c仅仅取其中1个共享内存段:
YS@book> select max(ADDR),min(addr) from x$ksmmem ;
MAX(ADDR) MIN(ADDR)
---------------- ----------------
000000006093C7F0 0000000060000000
$ pmap -x $(pgrep pmon) | egrep -i "sysv|^Address"
Address Kbytes RSS Dirty Mode Mapping
0000000060000000 10240 0 0 rw-s- SYSV00000000 (deleted)
0000000061000000 1114112 0 0 rw-s- SYSV00000000 (deleted)
00000000a5000000 8192 0 0 rw-s- SYSV00000000 (deleted)
00000000a6000000 2048 0 0 rw-s- SYSVafa94c20 (deleted)
--//仅仅查询到0000000060000000这个内存段,真正需要查询的信息在0000000061000000.
--//21c可以尝试使用dumpsga转储sga信息:
$ mdkir sga
$ export DUMPSGA_DIR=/home/oracle/sga
$ cd sga
$ dumpsga
$ cd $DUMPSGA_DIR/
$ ll
$ ll -R $DUMPSGA_DIR
/home/oracle/sga:
total 0
drwxr-x---. 2 oracle oinstall 87 2026-08-12 16:41:30 Aug_12_16:41:17_2026
'/home/oracle/sga/Aug_12_16:41:17_2026':
total 1134596
-rw-rw----. 1 oracle oinstall 10485760 2026-08-12 16:41:30 60000000
-rw-rw----. 1 oracle oinstall 1140850688 2026-08-12 16:41:17 61000000
-rw-rw----. 1 oracle oinstall 8388608 2026-08-12 16:41:30 a5000000
-rw-rw----. 1 oracle oinstall 2097152 2026-08-12 16:41:30 a6000000
-rw-rw----. 1 oracle oinstall 1752 2026-08-12 16:41:30 diagmdata
--//建立一个带时间戳的目录,里面包含如上文件,命名方式很容易看出与前面pmap -x 的输出的Address相关.通过文件大小也可以相互验
--//证.
--//将前面字段KSMCHPTR的3个地址分别加上0x10(16).
0x00000000760C3958 + 0x10 = 0x760c3968
0x00000000760C2148 + 0x10 = 0x760c2158
0x00000000760C1138 + 0x10 = 0x760c1148
--//根据地址0x760c3948,很容易确定在61000000文件中.
$ cd Aug_12_16\:41\:17_2026/
$ od -t x8 -A x -w64 61000000 | egrep -i "00000000760c3968|00000000760c2158|00000000760c1148"
150c1080 00000000760c1148 0000000000000000 0000000000000000 00000000774c9238 0000000000000000 00000000760c1130 00000000760c2158 00000000760c3968
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
150c1140 0000000016b4e6b4 00000000760c1148 00000000760c1148 00000000760c1158 00000000760c1158 00000000760c1168 00000000760c1168 00000000760c1178
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
--//注:使用下划线表示过滤查询的结果.
--//位于 0x150c1080+0x0000000061000000 = 0x760c1080,0x150c1140+0x0000000061000000 = 0x760c1140.
SYS@book> @ fchaz 0x760c1080
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 00000000760C1030 1 1 row cache 144 perm 0 0000000076081000 00000000760C1030 00000000760C10C0
SYS@book> @ fchaz 0x760c1140
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 00000000760C1138 1 1 row cache hash 4112 perm 0 0000000076081000 00000000760C1138 00000000760C2148
--//后面出现2次位于row cache hash,表示bucket=0的没有对象.
--//可以发现三个地址的信息在KSMCHSIZ=144的chunk中.KSMCHPTR_BEGIN=00000000760C1030
SYS@book> @ opeek 00000000760C1030 144 1
New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3070_0001.trc
[0760C1030, 0760C10C0) = 00000091 00B38F00 16B4E6AA 00000000 760C10D0 00000000 760C1118 00000000 760C10E8 00000000 760C1100 00000000 01900001 00000028 ...
--//查看转储文件:
Processing Oradebug command 'peek 0x00000000760c1030 144 1'
[0760C1030, 0760C10C0) = 00000091 00B38F00 16B4E6AA 00000000 760C10D0 ...
Dump of memory from 0x0760C1044 to 0x0760C10C0
0760C1040 00000000 760C1118 00000000 [.......v....]
0760C1050 760C10E8 00000000 760C1100 00000000 [...v.......v....]
0760C1060 01900001 00000028 16B4E808 00000000 [....(...........]
0760C1070 00000011 00000000 00000100 00000000 [................]
++++++++
0760C1080 760C1148 00000000 00000000 00000000 [H..v............]
~~~~~~~~~~~~~~~~
0760C1090 00000000 00000000 774C9238 00000000 [........8.Lw....]
0760C10A0 00000000 00000000 760C1130 00000000 [........0..v....]
0760C10B0 760C2158 00000000 760C3968 00000000 [X!.v....h9.v....]
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
*** 2026-08-13T15:45:32.889509+08:00 (CDB$ROOT(1))
--//加号指向的信息猜测表示BUCKETS的大小,换算十进制表示256.
--//偏移0x0760C1078-0x0760C1030 = 0x48 = 72 。
SYS@book> select count(*) from x$ksmsp where KSMCHSIZ=144 and KSMCHCOM='row cache';
COUNT(*)
----------
62
--//又是正好等于62.
--//再次改写前面写的sql语句:
$ cat row_cache.sql
column INDX format 999999
column INST_ID format 9999999
column con_id format 99999
column kSMCHIDX format 99999999
column KSMCHDUR format 99999999
column KSMCHCOM format a15
column KSMCHTYP format 99999999
column BUCKETS format 999999
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX') "KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache %' OR (KSMCHCOM = 'row cache' AND (KSMCHSIZ = 144 OR ksmchsiz = 24 or ksmchsiz=32));
SYS@book> @ row_cache
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS KSMCHPTR_BEGIN KSMCHPTR_END+1
---------------- ------- -------- ------ --------- --------- --------------- ---------------- ---------- -------- --------- ---------------- ------- ---------------- -----------------
00007F6035EE7C80 101105 1 1 1 1 row cache mutex 0000000077AD7C78 1572880 perm 0 0000000077004000 65536 0000000077AD7C78 0000000077C57C88
00007F6035EE7C18 101106 1 1 1 1 row cache hash 00000000779D7C68 1048592 perm 0 0000000077004000 65536 00000000779D7C68 0000000077AD7C78
00007F6035EE7BB0 101107 1 1 1 1 row cache 00000000779D7C50 24 perm 0 0000000077004000 00000000779D7C50 00000000779D7C68
00007F6035EE7B48 101108 1 1 1 1 row cache 00000000779D7C38 24 perm 0 0000000077004000 00000000779D7C38 00000000779D7C50
00007F6035EE7AE0 101109 1 1 1 1 row cache 00000000779D7C20 24 perm 0 0000000077004000 00000000779D7C20 00000000779D7C38
00007F6035EE7A78 101110 1 1 1 1 row cache 00000000779D7C08 24 perm 0 0000000077004000 00000000779D7C08 00000000779D7C20
00007F6035EE7A10 101111 1 1 1 1 row cache 00000000779D7BF0 24 perm 0 0000000077004000 00000000779D7BF0 00000000779D7C08
00007F6035EE79A8 101112 1 1 1 1 row cache 00000000779D7B60 144 perm 0 0000000077004000 00000000779D7B60 00000000779D7BF0
00007F6035EE7940 101113 1 1 1 1 row cache mutex 00000000779D7950 528 perm 0 0000000077004000 128 00000000779D7950 00000000779D7B60
00007F6035EE78D8 101114 1 1 1 1 row cache mutex 00000000779D6D40 3088 perm 0 0000000077004000 128 00000000779D6D40 00000000779D7950
00007F6035EE7870 101115 1 1 1 1 row cache hash 00000000779D6530 2064 perm 0 0000000077004000 128 00000000779D6530 00000000779D6D40
00007F6035EE7808 101116 1 1 1 1 row cache 00000000779D6518 24 perm 0 0000000077004000 00000000779D6518 00000000779D6530
00007F6035EE77A0 101117 1 1 1 1 row cache 00000000779D6500 24 perm 0 0000000077004000 00000000779D6500 00000000779D6518
00007F6035EE7738 101118 1 1 1 1 row cache 00000000779D64E8 24 perm 0 0000000077004000 00000000779D64E8 00000000779D6500
00007F6035EE76D0 101119 1 1 1 1 row cache 00000000779D64D0 24 perm 0 0000000077004000 00000000779D64D0 00000000779D64E8
00007F6035EE7668 101120 1 1 1 1 row cache 00000000779D64B8 24 perm 0 0000000077004000 00000000779D64B8 00000000779D64D0
00007F6035EE7600 101121 1 1 1 1 row cache 00000000779D6428 144 perm 0 0000000077004000 00000000779D6428 00000000779D64B8
....
00007F6035EE5108 101212 1 1 1 1 row cache mutex 000000007756AB60 65552 perm 0 0000000077004000 16384 000000007756AB60 000000007757AB70
00007F6035EE50A0 101213 1 1 1 1 row cache mutex 000000007750AB50 393232 perm 0 0000000077004000 16384 000000007750AB50 000000007756AB60
00007F6035EE5038 101214 1 1 1 1 row cache hash 00000000774CAB40 262160 perm 0 0000000077004000 16384 00000000774CAB40 000000007750AB50
00007F6035EE4FD0 101215 1 1 1 1 row cache 00000000774CAB28 24 perm 0 0000000077004000 00000000774CAB28 00000000774CAB40
00007F6035EE4F68 101216 1 1 1 1 row cache 00000000774CAB10 24 perm 0 0000000077004000 00000000774CAB10 00000000774CAB28
00007F6035EE4F00 101217 1 1 1 1 row cache 00000000774CAAF8 24 perm 0 0000000077004000 00000000774CAAF8 00000000774CAB10
00007F6035EE4E98 101218 1 1 1 1 row cache 00000000774CAAE0 24 perm 0 0000000077004000 00000000774CAAE0 00000000774CAAF8
00007F6035EE4E30 101219 1 1 1 1 row cache 00000000774CAAC8 24 perm 0 0000000077004000 00000000774CAAC8 00000000774CAAE0
00007F6035EE4DC8 101220 1 1 1 1 row cache 00000000774CAA38 144 perm 0 0000000077004000 00000000774CAA38 00000000774CAAC8
--//地址出现跳跃,两者的KSMCHPAR不同。使用fchaz 查询@ fchaz 0000000076081000,@ fchaz 0000000077004000,没有记录返回的。
00007F6035EC12E0 102623 1 1 1 1 row cache 0000000076A46BA8 24 perm 0 0000000076081000 0000000076A46BA8 0000000076A46BC0
00007F6035EC1278 102624 1 1 1 1 row cache 0000000076A46B88 32 perm 0 0000000076081000 0000000076A46B88 0000000076A46BA8
00007F6035EC1210 102625 1 1 1 1 row cache 0000000076A46B70 24 perm 0 0000000076081000 0000000076A46B70 0000000076A46B88
00007F6035EC11A8 102626 1 1 1 1 row cache 0000000076A46B50 32 perm 0 0000000076081000 0000000076A46B50 0000000076A46B70
00007F6035EC1140 102627 1 1 1 1 row cache 0000000076A46B30 32 perm 0 0000000076081000 0000000076A46B30 0000000076A46B50
00007F6035EC10D8 102628 1 1 1 1 row cache 0000000076A46B18 24 perm 0 0000000076081000 0000000076A46B18 0000000076A46B30
00007F6035EC1008 102630 1 1 1 1 row cache mutex 0000000076A469C8 272 perm 0 0000000076081000 64 0000000076A469C8 0000000076A46AD8 --//0000000076A46AD8 - 0000000076A46B18 有1个64字节的chunk。
00007F6035EC0FA0 102631 1 1 1 1 row cache mutex 0000000076A463B8 1552 perm 0 0000000076081000 64 0000000076A463B8 0000000076A469C8
00007F6035EC0F38 102632 1 1 1 1 row cache hash 0000000076A45FA8 1040 perm 0 0000000076081000 64 0000000076A45FA8 0000000076A463B8
00007F6035EC0ED0 102633 1 1 1 1 row cache 0000000076A45F90 24 perm 0 0000000076081000 0000000076A45F90 0000000076A45FA8
00007F6035EC0E68 102634 1 1 1 1 row cache 0000000076A45F78 24 perm 0 0000000076081000 0000000076A45F78 0000000076A45F90
00007F6035EC0E00 102635 1 1 1 1 row cache 0000000076A45F60 24 perm 0 0000000076081000 0000000076A45F60 0000000076A45F78
00007F6035EC0D98 102636 1 1 1 1 row cache 0000000076A45F48 24 perm 0 0000000076081000 0000000076A45F48 0000000076A45F60
00007F6035EC0D30 102637 1 1 1 1 row cache 0000000076A45F30 24 perm 0 0000000076081000 0000000076A45F30 0000000076A45F48
00007F6035EC0CC8 102638 1 1 1 1 row cache 0000000076A45EA0 144 perm 0 0000000076081000 0000000076A45EA0 0000000076A45F30
....
00007F6035EB6088 103062 1 1 1 1 row cache mutex 00000000760C3958 1040 perm 0 0000000076081000 256 00000000760C3958 00000000760C3D68
00007F6035EB6020 103063 1 1 1 1 row cache mutex 00000000760C2148 6160 perm 0 0000000076081000 256 00000000760C2148 00000000760C3958
00007F6035EB5FB8 103064 1 1 1 1 row cache hash 00000000760C1138 4112 perm 0 0000000076081000 256 00000000760C1138 00000000760C2148
00007F6035EB5F50 103065 1 1 1 1 row cache 00000000760C1120 24 perm 0 0000000076081000 00000000760C1120 00000000760C1138
00007F6035EB5EE8 103066 1 1 1 1 row cache 00000000760C1108 24 perm 0 0000000076081000 00000000760C1108 00000000760C1120
00007F6035EB5E80 103067 1 1 1 1 row cache 00000000760C10F0 24 perm 0 0000000076081000 00000000760C10F0 00000000760C1108
00007F6035EB5E18 103068 1 1 1 1 row cache 00000000760C10D8 24 perm 0 0000000076081000 00000000760C10D8 00000000760C10F0
00007F6035EB5DB0 103069 1 1 1 1 row cache 00000000760C10C0 24 perm 0 0000000076081000 00000000760C10C0 00000000760C10D8
00007F6035EB5D48 103070 1 1 1 1 row cache 00000000760C1030 144 perm 0 0000000076081000 00000000760C1030 00000000760C10C0
00007F6035EB5CE0 103071 1 1 1 1 row cache mutex 0000000076081020 262160 perm 0 0000000076081000 65536 0000000076081020 00000000760C1030
564 rows selected.
--//可以发现许多情况中间出现5个24大小的chunk,也有小部分中间出现32大小的chunk。大部分都是5个。
--//后记:直接执行如下:
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX') "KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache%';
--//从下往上看,chunk都是连接在一起的.
--//补充可以执行如下验证:
$ cat row_cache2.sql
/* Formatted on 2026-08-14 17:02:56 (QP5 v5.277) */
WITH x1
AS ( SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX')
"KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache%'
-- OR (KSMCHCOM = 'row cache' AND (KSMCHSIZ = 144 OR ksmchsiz = 24 OR ksmchsiz = 32 or ksmchsiz=64))
ORDER BY 15)
,x2
AS (SELECT x1.*
,"KSMCHPTR_END+1" KSMCHPTR_END
,LEAD (KSMCHPTR_BEGIN, 1) OVER (ORDER BY KSMCHPTR_BEGIN) KSMCHPTR_next
FROM x1)
SELECT *
FROM x2
WHERE KSMCHPTR_END <> KSMCHPTR_next;
SYS@book> @ row_cache2
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS KSMCHPTR_BEGIN KSMCHPTR_END+1 KSMCHPTR_END KSMCHPTR_NEXT
---------------- ------ -------- ------ --------- --------- -------------------------------- ---------------- ---------- -------- --------- ---------------- ------- ---------------- ----------------- ----------------- ----------------
00007F58360FF660 98876 1 1 1 1 row cache 0000000076A46BA8 24 perm 0 0000000076081000 0000000076A46BA8 0000000076A46BC0 0000000076A46BC0 00000000774C8628
--//出现地址跳跃的地方是两者的KSMCHPAR不同,KSMCHPAR=0000000077004000,0000000076081000
SYS@book> select * from x$ksmsp where KSMCHSIZ=144 and KSMCHCOM='row cache';
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR
---------------- ------- -------- ------ --------- --------- ---------- ---------------- ---------- -------- --------- ----------------
00007F6035F2F6D8 101085 1 1 1 1 row cache 00000000779D7B60 144 perm 0 0000000077004000
00007F6035F2F330 101094 1 1 1 1 row cache 00000000779D6428 144 perm 0 0000000077004000
00007F6035F2EF88 101103 1 1 1 1 row cache 00000000779AA2F0 144 perm 0 0000000077004000
00007F6035F2EBE0 101112 1 1 1 1 row cache 00000000779A49B8 144 perm 0 0000000077004000
00007F6035F2E838 101121 1 1 1 1 row cache 0000000077844880 144 perm 0 0000000077004000
00007F6035F2E490 101130 1 1 1 1 row cache 00000000776E4740 144 perm 0 0000000077004000
00007F6035F2E0E8 101139 1 1 1 1 row cache 00000000776E3B08 144 perm 0 0000000077004000
00007F6035F2DD40 101148 1 1 1 1 row cache 00000000776E0DD0 144 perm 0 0000000077004000
00007F6035F2D998 101157 1 1 1 1 row cache 00000000776E0718 144 perm 0 0000000077004000
00007F6035F2D5F0 101166 1 1 1 1 row cache 00000000775805E0 144 perm 0 0000000077004000
00007F6035F2D248 101175 1 1 1 1 row cache 000000007757D8A8 144 perm 0 0000000077004000
00007F6035F2CEA0 101184 1 1 1 1 row cache 000000007757AB70 144 perm 0 0000000077004000
00007F6035F2CAF8 101193 1 1 1 1 row cache 00000000774CAA38 144 perm 0 0000000077004000
00007F6035F089F8 102611 1 1 1 1 row cache 0000000076A45EA0 144 perm 0 0000000076081000
00007F6035F08650 102620 1 1 1 1 row cache 0000000076A45268 144 perm 0 0000000076081000
00007F6035F082A8 102629 1 1 1 1 row cache 0000000076A44630 144 perm 0 0000000076081000
00007F6035F07F00 102638 1 1 1 1 row cache 0000000076A439F8 144 perm 0 0000000076081000
00007F6035F07B58 102647 1 1 1 1 row cache 0000000076A40CC0 144 perm 0 0000000076081000
00007F6035F077B0 102656 1 1 1 1 row cache 0000000076A3DF88 144 perm 0 0000000076081000
00007F6035F07408 102665 1 1 1 1 row cache 0000000076A38650 144 perm 0 0000000076081000
00007F6035F07060 102674 1 1 1 1 row cache 0000000076A384E8 144 perm 0 0000000076081000
00007F6035F06CB8 102683 1 1 1 1 row cache 0000000076A357B0 144 perm 0 0000000076081000
00007F6035F06910 102692 1 1 1 1 row cache 0000000076A2FE78 144 perm 0 0000000076081000
00007F6035F06568 102701 1 1 1 1 row cache 0000000076A2E740 144 perm 0 0000000076081000
00007F6035F061C0 102710 1 1 1 1 row cache 0000000076A28E08 144 perm 0 0000000076081000
00007F6035F05E18 102719 1 1 1 1 row cache 0000000076A234D0 144 perm 0 0000000076081000
00007F6035F05A70 102728 1 1 1 1 row cache 0000000076A1DB98 144 perm 0 0000000076081000
00007F6035F056C8 102737 1 1 1 1 row cache 0000000076A18260 144 perm 0 0000000076081000
00007F6035F05320 102746 1 1 1 1 row cache 0000000076A12928 144 perm 0 0000000076081000
00007F6035F04F78 102755 1 1 1 1 row cache 0000000076A0CFF0 144 perm 0 0000000076081000
00007F6035F04BD0 102764 1 1 1 1 row cache 0000000076A076B8 144 perm 0 0000000076081000
00007F6035F04828 102773 1 1 1 1 row cache 0000000076A01D80 144 perm 0 0000000076081000
00007F6035F04480 102782 1 1 1 1 row cache 00000000769FC448 144 perm 0 0000000076081000
00007F6035F040D8 102791 1 1 1 1 row cache 000000007694C310 144 perm 0 0000000076081000
00007F6035F03D30 102800 1 1 1 1 row cache 000000007689C1D8 144 perm 0 0000000076081000
00007F6035F03988 102809 1 1 1 1 row cache 00000000767EC0A0 144 perm 0 0000000076081000
00007F6035F035E0 102818 1 1 1 1 row cache 000000007668BF68 144 perm 0 0000000076081000
00007F6035F03238 102827 1 1 1 1 row cache 000000007652BE30 144 perm 0 0000000076081000
00007F6035F02E90 102836 1 1 1 1 row cache 00000000763CBCF8 144 perm 0 0000000076081000
00007F6035F02AE8 102845 1 1 1 1 row cache 000000007626BBC0 144 perm 0 0000000076081000
00007F6035F02740 102854 1 1 1 1 row cache 0000000076266288 144 perm 0 0000000076081000
00007F6035F02398 102863 1 1 1 1 row cache 0000000076263550 144 perm 0 0000000076081000
00007F6035F01FF0 102872 1 1 1 1 row cache 0000000076260818 144 perm 0 0000000076081000
00007F6035F01C48 102881 1 1 1 1 row cache 000000007625DAE0 144 perm 0 0000000076081000
00007F6035F018A0 102890 1 1 1 1 row cache 000000007625ADA8 144 perm 0 0000000076081000
00007F6035F014F8 102899 1 1 1 1 row cache 0000000076255470 144 perm 0 0000000076081000
00007F6035F01150 102908 1 1 1 1 row cache 0000000076252738 144 perm 0 0000000076081000
00007F6035F00DA8 102917 1 1 1 1 row cache 000000007624FA00 144 perm 0 0000000076081000
00007F6035F00A00 102926 1 1 1 1 row cache 000000007624CCC8 144 perm 0 0000000076081000
00007F6035F00658 102935 1 1 1 1 row cache 0000000076247390 144 perm 0 0000000076081000
00007F6035F002B0 102944 1 1 1 1 row cache 0000000076244658 144 perm 0 0000000076081000
00007F6035EFFE18 102953 1 1 1 1 row cache 0000000076241920 144 perm 0 0000000076081000
00007F6035EFFA70 102962 1 1 1 1 row cache 00000000760E17E8 144 perm 0 0000000076081000
00007F6035EFF6C8 102971 1 1 1 1 row cache 00000000760DEAB0 144 perm 0 0000000076081000
00007F6035EFF320 102980 1 1 1 1 row cache 00000000760DBD78 144 perm 0 0000000076081000
00007F6035EFEF78 102989 1 1 1 1 row cache 00000000760DB980 144 perm 0 0000000076081000
00007F6035EFEBD0 102998 1 1 1 1 row cache 00000000760DAD48 144 perm 0 0000000076081000
00007F6035EFE828 103007 1 1 1 1 row cache 00000000760DA110 144 perm 0 0000000076081000
00007F6035EFE480 103016 1 1 1 1 row cache 00000000760D47D8 144 perm 0 0000000076081000
00007F6035EFE0D8 103025 1 1 1 1 row cache 00000000760CEEA0 144 perm 0 0000000076081000
00007F6035EFDD30 103034 1 1 1 1 row cache 00000000760C3D68 144 perm 0 0000000076081000
00007F6035EFD988 103043 1 1 1 1 row cache 00000000760C1030 144 perm 0 0000000076081000
62 rows selected.
--//前面取2条记录,结尾取2条记录,KSMCHPT+0x16. 用于查询
$ od -t x8 -A x -w64 61000000 | egrep -i "00000000760C1040|00000000760C3D78|00000000779D7B70|00000000779D6438"
164c86c0 0000000076a2e750 00000000776e4750 0000000077844890 00000000779aa300 00000000779d6438 00000000760db990 00000000760da120 00000000779d7b70
164c8740 0000000076a38660 0000000076a28e18 0000000076a0d000 0000000076a12938 0000000076a18270 0000000076a1dba8 0000000076a234e0 00000000760c3d78
164c8800 00000000760e17f8 0000000076a2fe88 00000000779aa300 0000000076a01d90 0000000076a076c8 00000000760c1040 0000000076244668 0000000076a43a08
--//文件偏移量+ 加上0x0000000061000000。
SYS@book> @ fchaz 774c86c0
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- --------- --------- -------------------------------- ---------- -------- --------- ---------------- ---------------- -----------------
VSGA 00000000774C8668 1 1 row cache 544 perm 0 0000000077004000 00000000774C8668 00000000774C8888
SYS@book> @ fchaz 774c8800
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- --------- --------- -------------------------------- ---------- -------- --------- ---------------- ---------------- -----------------
VSGA 00000000774C8668 1 1 row cache 544 perm 0 0000000077004000 00000000774C8668 00000000774C8888
--//在同一个chunk里面,说明以上chunk大小等于144的地址保存在该chunk里面,大小等于544.
--// (544-16)/8 = 66, 一共66个地址。
SYS@book> @ opeek 00000000774C8668 544 1
New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3877_0001.trc
[0774C8668, 0774C8888) = 00000221 00B38F00 16B4E6AA 00000000 776E0728 00000000 7757AB80 00000000 775805F0 00000000 774CAA48 00000000 7757D8B8 00000000 ...
*** 2026-08-13T17:03:31.561361+08:00 (CDB$ROOT(1))
Processing Oradebug command 'peek 0x00000000774c8668 544 1'
[0774C8668, 0774C8888) = 00000221 00B38F00 16B4E6AA 00000000 776E0728 ...
Dump of memory from 0x0774C867C to 0x0774C8888
0774C8670 00000000 [....]
0774C8680 7757AB80 00000000 775805F0 00000000 [..Ww......Xw....]
0774C8690 774CAA48 00000000 7757D8B8 00000000 [H.Lw......Ww....]
0774C86A0 776E0DE0 00000000 776E3B18 00000000 [..nw.....;nw....]
0774C86B0 776E4750 00000000 77844890 00000000 [PGnw.....H.w....]
~~~~~~~~~~~~~~~~~
0774C86C0 76A2E750 00000000 776E4750 00000000 [P..v....PGnw....]
0774C86D0 77844890 00000000 779AA300 00000000 [.H.w.......w....]
0774C86E0 779D6438 00000000 760DB990 00000000 [8d.w.......v....]
0774C86F0 760DA120 00000000 779D7B70 00000000 [ ..v....p{.w....]
0774C8700 779A49C8 00000000 760D47E8 00000000 [.I.w.....G.v....]
0774C8710 760CEEB0 00000000 767EC0B0 00000000 [...v......~v....]
0774C8720 7689C1E8 00000000 76A384F8 00000000 [...v.......v....]
0774C8730 769FC458 00000000 76A357C0 00000000 [X..v.....W.v....]
0774C8740 76A38660 00000000 76A28E18 00000000 [`..v.......v....]
0774C8750 76A0D000 00000000 76A12938 00000000 [...v....8).v....]
0774C8760 76A18270 00000000 76A1DBA8 00000000 [p..v.......v....]
0774C8770 76A234E0 00000000 760C3D78 00000000 [.4.v....x=.v....]
0774C8780 7624CCD8 00000000 762473A0 00000000 [..$v.....s$v....]
0774C8790 76266298 00000000 7624FA10 00000000 [.b&v......$v....]
0774C87A0 76252748 00000000 76255480 00000000 [H'%v.....T%v....]
0774C87B0 7625ADB8 00000000 76A3DF98 00000000 [..%v.......v....]
0774C87C0 76A40CD0 00000000 776E4750 00000000 [...v....PGnw....]
0774C87D0 7625DAF0 00000000 76260828 00000000 [..%v....(.&v....]
0774C87E0 76263560 00000000 76241930 00000000 [`5&v....0.$v....]
0774C87F0 760DBD88 00000000 760DEAC0 00000000 [...v.......v....]
0774C8800 760E17F8 00000000 76A2FE88 00000000 [...v.......v....]
0774C8810 779AA300 00000000 76A01D90 00000000 [...w.......v....]
0774C8820 76A076C8 00000000 760C1040 00000000 [.v.v....@..v....]
0774C8830 76244668 00000000 76A43A08 00000000 [hF$v.....:.v....]
0774C8840 76A44640 00000000 76A45278 00000000 [@F.v....xR.v....]
0774C8850 76A45EB0 00000000 760DAD58 00000000 [.^.v....X..v....]
0774C8860 7626BBD0 00000000 763CBD08 00000000 [..&v......<v....]
0774C8870 7652BE40 00000000 7694C320 00000000 [@.Rv.... ..v....]
0774C8880 7668BF78 00000000 [x.hv....]
--//(544-16)/8 = 66,也就是存在66个地址。
--//如果直接查看文件61000000。
$ od -t x8 -j $[0x774C8668-0x61000000+0x10] -N $[544-16] -A x -w8 61000000 | nl -v 0 -ba
0 164c8678 00000000776e0728
1 164c8680 000000007757ab80
2 164c8688 00000000775805f0
3 164c8690 00000000774caa48
4 164c8698 000000007757d8b8
5 164c86a0 00000000776e0de0
6 164c86a8 00000000776e3b18
7 164c86b0 00000000776e4750
8 164c86b8 0000000077844890
9 164c86c0 0000000076a2e750
10 164c86c8 00000000776e4750
11 164c86d0 0000000077844890
12 164c86d8 00000000779aa300
13 164c86e0 00000000779d6438
14 164c86e8 00000000760db990
15 164c86f0 00000000760da120
16 164c86f8 00000000779d7b70
17 164c8700 00000000779a49c8
18 164c8708 00000000760d47e8
19 164c8710 00000000760ceeb0
20 164c8718 00000000767ec0b0
21 164c8720 000000007689c1e8
22 164c8728 0000000076a384f8
23 164c8730 00000000769fc458
24 164c8738 0000000076a357c0
25 164c8740 0000000076a38660
26 164c8748 0000000076a28e18
27 164c8750 0000000076a0d000
28 164c8758 0000000076a12938
29 164c8760 0000000076a18270
30 164c8768 0000000076a1dba8
31 164c8770 0000000076a234e0
32 164c8778 00000000760c3d78
33 164c8780 000000007624ccd8
34 164c8788 00000000762473a0
35 164c8790 0000000076266298
36 164c8798 000000007624fa10
37 164c87a0 0000000076252748
38 164c87a8 0000000076255480
39 164c87b0 000000007625adb8
40 164c87b8 0000000076a3df98
41 164c87c0 0000000076a40cd0
42 164c87c8 00000000776e4750
43 164c87d0 000000007625daf0
44 164c87d8 0000000076260828
45 164c87e0 0000000076263560
46 164c87e8 0000000076241930
47 164c87f0 00000000760dbd88
48 164c87f8 00000000760deac0
49 164c8800 00000000760e17f8
50 164c8808 0000000076a2fe88
51 164c8810 00000000779aa300
52 164c8818 0000000076a01d90
53 164c8820 0000000076a076c8
54 164c8828 00000000760c1040
55 164c8830 0000000076244668
56 164c8838 0000000076a43a08
57 164c8840 0000000076a44640
58 164c8848 0000000076a45278
59 164c8850 0000000076a45eb0
60 164c8858 00000000760dad58
61 164c8860 000000007626bbd0
62 164c8868 00000000763cbd08
63 164c8870 000000007652be40
64 164c8878 000000007694c320
65 164c8880 000000007668bf78
66 164c8888
--//od 参数说明-t x8 8位一组,-j $[0x774C8668-0x61000000+0x10]表示开始位置,-N $[544-16]取长度,-A x表示文件偏移的16进
--//制显示,-w8显示宽度,相当于每行1个地址。
SYS@book> select min(CACHE#),max(cache#) from v$rowcache order by 1 ;
MIN(CACHE#) MAX(CACHE#)
----------- -----------
0 65
--//也就是这个row cache查询的起点(我猜测),比如查询dc_objects某个对象,知道cache#=8,对应的地址就是0x77844890(注意cache#从
--//0开始计数).
SYS@book> @ fchaz 77844890
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- --------- --------- -------------------------------- ---------- -------- --------- ---------------- ---------------- -----------------
VSGA 0000000077844880 1 1 row cache 144 perm 0 0000000077004000 0000000077844880 0000000077844910
--//通过这个chunk就可以知道关联的相关地址.
SYS@book> @ opeek 0000000077844880 144 1
New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3070_0002.trc
[077844880, 077844910) = 00000091 00B38F00 16B4E6AA 00000000 77844920 00000000 77844968 00000000 77844938 00000000 77844950 00000000 04200002 00010298 ...
*** 2026-08-13T17:16:51.628608+08:00 (CDB$ROOT(1))
Processing Oradebug command 'peek 0x0000000077844880 144 1'
[077844880, 077844910) = 00000091 00B38F00 16B4E6AA 00000000 77844920 ...
Dump of memory from 0x077844894 to 0x077844910
077844890 00000000 77844968 00000000 [....hI.w....]
0778448A0 77844938 00000000 77844950 00000000 [8I.w....PI.w....]
0778448B0 04200002 00010298 16B4E7B8 00000000 [.. .............]
0778448C0 0000000A 00000000 00008000 00000000 [................] --//0x00008000 = 32768
0778448D0 77844998 00000000 00000001 00000000 [.I.w............]
~~~~~~~~~~~~~~~~~
0778448E0 76A46B28 00000000 774C9058 00000000 [(k.v....X.Lw....]
0778448F0 00918700 00001D1B 77844980 00000000 [.........I.w....]
077844900 778C49A8 00000000 779849B8 00000000 [.I.w.....I.w....]
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
*** 2026-08-13T17:16:51.629138+08:00 (CDB$ROOT(1))
--//将上面下划线的地址减去0x10,就可以与如下KSMCHPTR
0x779849B8-0x10 = 0x00000000779849a8
0x778C49A8-0x10 = 0x00000000778c4998
0x77844998-0x10 = 0x0000000077844988
0x77844920-0x10 = 0x0000000077844910
0x77844968-0x10 = 0x0000000077844958
0x77844938-0x10 = 0x0000000077844928
0x77844950-0x10 = 0x0000000077844940
0x77844980-0x10 = 0x0000000077844970
--//单独拿cache_name='dc_objects' chunk看看,注我的测试环境每次重启该地址不会变化的,我没有修改sga相关配置:
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX') "KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache %' OR (KSMCHCOM = 'row cache' AND (KSMCHSIZ = 144 OR ksmchsiz = 24 or ksmchsiz=32));
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS KSMCHPTR_BEGIN KSMCHPTR_END+1
---------------- ------- -------- ------ --------- --------- --------------- ---------------- ---------- -------- --------- ---------------- ------- ---------------- -----------------
00007F6035EE6E48 101140 1 1 1 1 row cache mutex 00000000779849A8 131088 perm 0 0000000077004000 32768 00000000779849A8 00000000779A49B8
00007F6035EE6DE0 101141 1 1 1 1 row cache mutex 00000000778C4998 786448 perm 0 0000000077004000 32768 00000000778C4998 00000000779849A8
00007F6035EE6D78 101142 1 1 1 1 row cache hash 0000000077844988 524304 perm 0 0000000077004000 32768 0000000077844988 00000000778C4998
00007F6035EE6D10 101143 1 1 1 1 row cache 0000000077844970 24 perm 0 0000000077004000 0000000077844970 0000000077844988
00007F6035EE6CA8 101144 1 1 1 1 row cache 0000000077844958 24 perm 0 0000000077004000 0000000077844958 0000000077844970
00007F6035EE6C40 101145 1 1 1 1 row cache 0000000077844940 24 perm 0 0000000077004000 0000000077844940 0000000077844958
00007F6035EE6BD8 101146 1 1 1 1 row cache 0000000077844928 24 perm 0 0000000077004000 0000000077844928 0000000077844940
00007F6035EE6B70 101147 1 1 1 1 row cache 0000000077844910 24 perm 0 0000000077004000 0000000077844910 0000000077844928
00007F6035EE6B08 101148 1 1 1 1 row cache 0000000077844880 144 perm 0 0000000077004000 0000000077844880 0000000077844910
--//许多地址都能对上。
--//疑问:前面测试查询如下
SYS@book> select rownum cache# from dual connect by level <=65 minus select cache# from v$rowcache where type='PARENT';
CACHE#
----------
7
42
51
11
--//type='PARENT' 不存在cache#=7.42.51,11.
--//补充:
SYS@book> select distinct cache#,type,parameter from v$rowcache where cache# in (7,11,42,51);
CACHE# TYPE PARAMETER
---------- ------------------------------ ------------------------------
7 SUBORDINATE dc_users
--//存在 CACHE#=7,TYPE=SUBORDINATE,PARAMETER=dc_users。在type='PARENT',PARAMETER=dc_users,cache#=10.
SYS@book> select distinct cache#,cache_name from v$rowcache_parent where cache# in (7,11,42,51);
CACHE# CACHE_NAME
---------- --------------
11 dc_objects
--//有一部分CACHE_NAME=dc_objects,cache#=11,似乎这些对象在v$fixed_table定义。
--//另外单独写一篇blog分析.
3.验证偏移72位置表示buckets数量:
SYS@book> select 'oradebug peek 0x'||TO_CHAR (TO_NUMBER (KSMCHPTR, 'XXXXXXXXXXXXXXXX') + 72, 'FM0XXXXXXXXXXXXXXX')||' 4' c40 from x$ksmsp where KSMCHSIZ=144 and KSMCHCOM='row cache';
C40
----------------------------------------
oradebug peek 0x00000000779D7BA8 4
oradebug peek 0x00000000779D6470 4
oradebug peek 0x00000000779AA338 4
oradebug peek 0x00000000779A4A00 4
oradebug peek 0x00000000778448C8 4
oradebug peek 0x00000000776E4788 4
oradebug peek 0x00000000776E3B50 4
oradebug peek 0x00000000776E0E18 4
oradebug peek 0x00000000776E0760 4
oradebug peek 0x0000000077580628 4
oradebug peek 0x000000007757D8F0 4
oradebug peek 0x000000007757ABB8 4
oradebug peek 0x00000000774CAA80 4
oradebug peek 0x0000000076A45EE8 4
oradebug peek 0x0000000076A452B0 4
oradebug peek 0x0000000076A44678 4
oradebug peek 0x0000000076A43A40 4
oradebug peek 0x0000000076A40D08 4
oradebug peek 0x0000000076A3DFD0 4
oradebug peek 0x0000000076A38698 4
oradebug peek 0x0000000076A38530 4
oradebug peek 0x0000000076A357F8 4
oradebug peek 0x0000000076A2FEC0 4
oradebug peek 0x0000000076A2E788 4
oradebug peek 0x0000000076A28E50 4
oradebug peek 0x0000000076A23518 4
oradebug peek 0x0000000076A1DBE0 4
oradebug peek 0x0000000076A182A8 4
oradebug peek 0x0000000076A12970 4
oradebug peek 0x0000000076A0D038 4
oradebug peek 0x0000000076A07700 4
oradebug peek 0x0000000076A01DC8 4
oradebug peek 0x00000000769FC490 4
oradebug peek 0x000000007694C358 4
oradebug peek 0x000000007689C220 4
oradebug peek 0x00000000767EC0E8 4
oradebug peek 0x000000007668BFB0 4
oradebug peek 0x000000007652BE78 4
oradebug peek 0x00000000763CBD40 4
oradebug peek 0x000000007626BC08 4
oradebug peek 0x00000000762662D0 4
oradebug peek 0x0000000076263598 4
oradebug peek 0x0000000076260860 4
oradebug peek 0x000000007625DB28 4
oradebug peek 0x000000007625ADF0 4
oradebug peek 0x00000000762554B8 4
oradebug peek 0x0000000076252780 4
oradebug peek 0x000000007624FA48 4
oradebug peek 0x000000007624CD10 4
oradebug peek 0x00000000762473D8 4
oradebug peek 0x00000000762446A0 4
oradebug peek 0x0000000076241968 4
oradebug peek 0x00000000760E1830 4
oradebug peek 0x00000000760DEAF8 4
oradebug peek 0x00000000760DBDC0 4
oradebug peek 0x00000000760DB9C8 4
oradebug peek 0x00000000760DAD90 4
oradebug peek 0x00000000760DA158 4
oradebug peek 0x00000000760D4820 4
oradebug peek 0x00000000760CEEE8 4
oradebug peek 0x00000000760C3DB0 4
oradebug peek 0x00000000760C1078 4
62 rows selected.
--//执行如下.
spool bucket.txt
oradebug setmypid
--//拷贝粘贴以上内容
...
spool off
$ grep "^\[" bucket.txt | awk '{print $NF}' | awk '{print strtonum("0x"$0)}'
65536
128
4096
512
32768
32768
64
256
32
32768
256
256
16384
64
64
64
64
256
256
512
1
256
512
128
512
512
512
512
512
512
512
512
512
16384
16384
16384
32768
32768
32768
32768
512
256
256
256
256
512
256
256
256
512
256
256
32768
256
256
16
64
64
512
512
1024
256
--//单独取select a.*,(KSMCHSIZ-16)/24 buckets from x$ksmsp a where KSMCHCOM='row cache mutex' and mod(KSMCHSIZ-16,24)=0 ;
--//输出的最后一列,适当编辑保存q6.txt
$ diff <(grep "^\[" bucket.txt | awk '{print $NF}' | awk '{print strtonum("0x"$0)}') q6.txt
--//完全正确.
--//继续昨天的探究.
--//假设一个表scott.dept,对象类型dc_objects,oracle如何确定那些chunk上寻找row cache mutex以及row cache hash呢? 必须还
--//有chunk记录这些信息.
1.环境:
SYS@book> @ 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.分析:
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
FROM x$ksmsp a
WHERE KSMCHCOM like 'row cache %' ;
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS
---------------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------------- ---------- -------- ---------- ---------------- ----------
...
00007FD9EB702A80 99864 1 1 1 1 row cache mutex 00000000760C3958 1040 perm 0 0000000076081000 256
00007FD9EB702A18 99865 1 1 1 1 row cache mutex 00000000760C2148 6160 perm 0 0000000076081000 256
00007FD9EB7029B0 99866 1 1 1 1 row cache hash 00000000760C1138 4112 perm 0 0000000076081000 256
...
--//单独拿其中一段看看,注我的测试环境每次重启该地址不会变化的,我没有修改sga相关配置.
--//以前11下可以使用x$ksmmem视图查询,但是21c仅仅取其中1个共享内存段:
YS@book> select max(ADDR),min(addr) from x$ksmmem ;
MAX(ADDR) MIN(ADDR)
---------------- ----------------
000000006093C7F0 0000000060000000
$ pmap -x $(pgrep pmon) | egrep -i "sysv|^Address"
Address Kbytes RSS Dirty Mode Mapping
0000000060000000 10240 0 0 rw-s- SYSV00000000 (deleted)
0000000061000000 1114112 0 0 rw-s- SYSV00000000 (deleted)
00000000a5000000 8192 0 0 rw-s- SYSV00000000 (deleted)
00000000a6000000 2048 0 0 rw-s- SYSVafa94c20 (deleted)
--//仅仅查询到0000000060000000这个内存段,真正需要查询的信息在0000000061000000.
--//21c可以尝试使用dumpsga转储sga信息:
$ mdkir sga
$ export DUMPSGA_DIR=/home/oracle/sga
$ cd sga
$ dumpsga
$ cd $DUMPSGA_DIR/
$ ll
$ ll -R $DUMPSGA_DIR
/home/oracle/sga:
total 0
drwxr-x---. 2 oracle oinstall 87 2026-08-12 16:41:30 Aug_12_16:41:17_2026
'/home/oracle/sga/Aug_12_16:41:17_2026':
total 1134596
-rw-rw----. 1 oracle oinstall 10485760 2026-08-12 16:41:30 60000000
-rw-rw----. 1 oracle oinstall 1140850688 2026-08-12 16:41:17 61000000
-rw-rw----. 1 oracle oinstall 8388608 2026-08-12 16:41:30 a5000000
-rw-rw----. 1 oracle oinstall 2097152 2026-08-12 16:41:30 a6000000
-rw-rw----. 1 oracle oinstall 1752 2026-08-12 16:41:30 diagmdata
--//建立一个带时间戳的目录,里面包含如上文件,命名方式很容易看出与前面pmap -x 的输出的Address相关.通过文件大小也可以相互验
--//证.
--//将前面字段KSMCHPTR的3个地址分别加上0x10(16).
0x00000000760C3958 + 0x10 = 0x760c3968
0x00000000760C2148 + 0x10 = 0x760c2158
0x00000000760C1138 + 0x10 = 0x760c1148
--//根据地址0x760c3948,很容易确定在61000000文件中.
$ cd Aug_12_16\:41\:17_2026/
$ od -t x8 -A x -w64 61000000 | egrep -i "00000000760c3968|00000000760c2158|00000000760c1148"
150c1080 00000000760c1148 0000000000000000 0000000000000000 00000000774c9238 0000000000000000 00000000760c1130 00000000760c2158 00000000760c3968
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
150c1140 0000000016b4e6b4 00000000760c1148 00000000760c1148 00000000760c1158 00000000760c1158 00000000760c1168 00000000760c1168 00000000760c1178
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
--//注:使用下划线表示过滤查询的结果.
--//位于 0x150c1080+0x0000000061000000 = 0x760c1080,0x150c1140+0x0000000061000000 = 0x760c1140.
SYS@book> @ fchaz 0x760c1080
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 00000000760C1030 1 1 row cache 144 perm 0 0000000076081000 00000000760C1030 00000000760C10C0
SYS@book> @ fchaz 0x760c1140
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 00000000760C1138 1 1 row cache hash 4112 perm 0 0000000076081000 00000000760C1138 00000000760C2148
--//后面出现2次位于row cache hash,表示bucket=0的没有对象.
--//可以发现三个地址的信息在KSMCHSIZ=144的chunk中.KSMCHPTR_BEGIN=00000000760C1030
SYS@book> @ opeek 00000000760C1030 144 1
New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3070_0001.trc
[0760C1030, 0760C10C0) = 00000091 00B38F00 16B4E6AA 00000000 760C10D0 00000000 760C1118 00000000 760C10E8 00000000 760C1100 00000000 01900001 00000028 ...
--//查看转储文件:
Processing Oradebug command 'peek 0x00000000760c1030 144 1'
[0760C1030, 0760C10C0) = 00000091 00B38F00 16B4E6AA 00000000 760C10D0 ...
Dump of memory from 0x0760C1044 to 0x0760C10C0
0760C1040 00000000 760C1118 00000000 [.......v....]
0760C1050 760C10E8 00000000 760C1100 00000000 [...v.......v....]
0760C1060 01900001 00000028 16B4E808 00000000 [....(...........]
0760C1070 00000011 00000000 00000100 00000000 [................]
++++++++
0760C1080 760C1148 00000000 00000000 00000000 [H..v............]
~~~~~~~~~~~~~~~~
0760C1090 00000000 00000000 774C9238 00000000 [........8.Lw....]
0760C10A0 00000000 00000000 760C1130 00000000 [........0..v....]
0760C10B0 760C2158 00000000 760C3968 00000000 [X!.v....h9.v....]
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
*** 2026-08-13T15:45:32.889509+08:00 (CDB$ROOT(1))
--//加号指向的信息猜测表示BUCKETS的大小,换算十进制表示256.
--//偏移0x0760C1078-0x0760C1030 = 0x48 = 72 。
SYS@book> select count(*) from x$ksmsp where KSMCHSIZ=144 and KSMCHCOM='row cache';
COUNT(*)
----------
62
--//又是正好等于62.
--//再次改写前面写的sql语句:
$ cat row_cache.sql
column INDX format 999999
column INST_ID format 9999999
column con_id format 99999
column kSMCHIDX format 99999999
column KSMCHDUR format 99999999
column KSMCHCOM format a15
column KSMCHTYP format 99999999
column BUCKETS format 999999
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX') "KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache %' OR (KSMCHCOM = 'row cache' AND (KSMCHSIZ = 144 OR ksmchsiz = 24 or ksmchsiz=32));
SYS@book> @ row_cache
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS KSMCHPTR_BEGIN KSMCHPTR_END+1
---------------- ------- -------- ------ --------- --------- --------------- ---------------- ---------- -------- --------- ---------------- ------- ---------------- -----------------
00007F6035EE7C80 101105 1 1 1 1 row cache mutex 0000000077AD7C78 1572880 perm 0 0000000077004000 65536 0000000077AD7C78 0000000077C57C88
00007F6035EE7C18 101106 1 1 1 1 row cache hash 00000000779D7C68 1048592 perm 0 0000000077004000 65536 00000000779D7C68 0000000077AD7C78
00007F6035EE7BB0 101107 1 1 1 1 row cache 00000000779D7C50 24 perm 0 0000000077004000 00000000779D7C50 00000000779D7C68
00007F6035EE7B48 101108 1 1 1 1 row cache 00000000779D7C38 24 perm 0 0000000077004000 00000000779D7C38 00000000779D7C50
00007F6035EE7AE0 101109 1 1 1 1 row cache 00000000779D7C20 24 perm 0 0000000077004000 00000000779D7C20 00000000779D7C38
00007F6035EE7A78 101110 1 1 1 1 row cache 00000000779D7C08 24 perm 0 0000000077004000 00000000779D7C08 00000000779D7C20
00007F6035EE7A10 101111 1 1 1 1 row cache 00000000779D7BF0 24 perm 0 0000000077004000 00000000779D7BF0 00000000779D7C08
00007F6035EE79A8 101112 1 1 1 1 row cache 00000000779D7B60 144 perm 0 0000000077004000 00000000779D7B60 00000000779D7BF0
00007F6035EE7940 101113 1 1 1 1 row cache mutex 00000000779D7950 528 perm 0 0000000077004000 128 00000000779D7950 00000000779D7B60
00007F6035EE78D8 101114 1 1 1 1 row cache mutex 00000000779D6D40 3088 perm 0 0000000077004000 128 00000000779D6D40 00000000779D7950
00007F6035EE7870 101115 1 1 1 1 row cache hash 00000000779D6530 2064 perm 0 0000000077004000 128 00000000779D6530 00000000779D6D40
00007F6035EE7808 101116 1 1 1 1 row cache 00000000779D6518 24 perm 0 0000000077004000 00000000779D6518 00000000779D6530
00007F6035EE77A0 101117 1 1 1 1 row cache 00000000779D6500 24 perm 0 0000000077004000 00000000779D6500 00000000779D6518
00007F6035EE7738 101118 1 1 1 1 row cache 00000000779D64E8 24 perm 0 0000000077004000 00000000779D64E8 00000000779D6500
00007F6035EE76D0 101119 1 1 1 1 row cache 00000000779D64D0 24 perm 0 0000000077004000 00000000779D64D0 00000000779D64E8
00007F6035EE7668 101120 1 1 1 1 row cache 00000000779D64B8 24 perm 0 0000000077004000 00000000779D64B8 00000000779D64D0
00007F6035EE7600 101121 1 1 1 1 row cache 00000000779D6428 144 perm 0 0000000077004000 00000000779D6428 00000000779D64B8
....
00007F6035EE5108 101212 1 1 1 1 row cache mutex 000000007756AB60 65552 perm 0 0000000077004000 16384 000000007756AB60 000000007757AB70
00007F6035EE50A0 101213 1 1 1 1 row cache mutex 000000007750AB50 393232 perm 0 0000000077004000 16384 000000007750AB50 000000007756AB60
00007F6035EE5038 101214 1 1 1 1 row cache hash 00000000774CAB40 262160 perm 0 0000000077004000 16384 00000000774CAB40 000000007750AB50
00007F6035EE4FD0 101215 1 1 1 1 row cache 00000000774CAB28 24 perm 0 0000000077004000 00000000774CAB28 00000000774CAB40
00007F6035EE4F68 101216 1 1 1 1 row cache 00000000774CAB10 24 perm 0 0000000077004000 00000000774CAB10 00000000774CAB28
00007F6035EE4F00 101217 1 1 1 1 row cache 00000000774CAAF8 24 perm 0 0000000077004000 00000000774CAAF8 00000000774CAB10
00007F6035EE4E98 101218 1 1 1 1 row cache 00000000774CAAE0 24 perm 0 0000000077004000 00000000774CAAE0 00000000774CAAF8
00007F6035EE4E30 101219 1 1 1 1 row cache 00000000774CAAC8 24 perm 0 0000000077004000 00000000774CAAC8 00000000774CAAE0
00007F6035EE4DC8 101220 1 1 1 1 row cache 00000000774CAA38 144 perm 0 0000000077004000 00000000774CAA38 00000000774CAAC8
--//地址出现跳跃,两者的KSMCHPAR不同。使用fchaz 查询@ fchaz 0000000076081000,@ fchaz 0000000077004000,没有记录返回的。
00007F6035EC12E0 102623 1 1 1 1 row cache 0000000076A46BA8 24 perm 0 0000000076081000 0000000076A46BA8 0000000076A46BC0
00007F6035EC1278 102624 1 1 1 1 row cache 0000000076A46B88 32 perm 0 0000000076081000 0000000076A46B88 0000000076A46BA8
00007F6035EC1210 102625 1 1 1 1 row cache 0000000076A46B70 24 perm 0 0000000076081000 0000000076A46B70 0000000076A46B88
00007F6035EC11A8 102626 1 1 1 1 row cache 0000000076A46B50 32 perm 0 0000000076081000 0000000076A46B50 0000000076A46B70
00007F6035EC1140 102627 1 1 1 1 row cache 0000000076A46B30 32 perm 0 0000000076081000 0000000076A46B30 0000000076A46B50
00007F6035EC10D8 102628 1 1 1 1 row cache 0000000076A46B18 24 perm 0 0000000076081000 0000000076A46B18 0000000076A46B30
00007F6035EC1008 102630 1 1 1 1 row cache mutex 0000000076A469C8 272 perm 0 0000000076081000 64 0000000076A469C8 0000000076A46AD8 --//0000000076A46AD8 - 0000000076A46B18 有1个64字节的chunk。
00007F6035EC0FA0 102631 1 1 1 1 row cache mutex 0000000076A463B8 1552 perm 0 0000000076081000 64 0000000076A463B8 0000000076A469C8
00007F6035EC0F38 102632 1 1 1 1 row cache hash 0000000076A45FA8 1040 perm 0 0000000076081000 64 0000000076A45FA8 0000000076A463B8
00007F6035EC0ED0 102633 1 1 1 1 row cache 0000000076A45F90 24 perm 0 0000000076081000 0000000076A45F90 0000000076A45FA8
00007F6035EC0E68 102634 1 1 1 1 row cache 0000000076A45F78 24 perm 0 0000000076081000 0000000076A45F78 0000000076A45F90
00007F6035EC0E00 102635 1 1 1 1 row cache 0000000076A45F60 24 perm 0 0000000076081000 0000000076A45F60 0000000076A45F78
00007F6035EC0D98 102636 1 1 1 1 row cache 0000000076A45F48 24 perm 0 0000000076081000 0000000076A45F48 0000000076A45F60
00007F6035EC0D30 102637 1 1 1 1 row cache 0000000076A45F30 24 perm 0 0000000076081000 0000000076A45F30 0000000076A45F48
00007F6035EC0CC8 102638 1 1 1 1 row cache 0000000076A45EA0 144 perm 0 0000000076081000 0000000076A45EA0 0000000076A45F30
....
00007F6035EB6088 103062 1 1 1 1 row cache mutex 00000000760C3958 1040 perm 0 0000000076081000 256 00000000760C3958 00000000760C3D68
00007F6035EB6020 103063 1 1 1 1 row cache mutex 00000000760C2148 6160 perm 0 0000000076081000 256 00000000760C2148 00000000760C3958
00007F6035EB5FB8 103064 1 1 1 1 row cache hash 00000000760C1138 4112 perm 0 0000000076081000 256 00000000760C1138 00000000760C2148
00007F6035EB5F50 103065 1 1 1 1 row cache 00000000760C1120 24 perm 0 0000000076081000 00000000760C1120 00000000760C1138
00007F6035EB5EE8 103066 1 1 1 1 row cache 00000000760C1108 24 perm 0 0000000076081000 00000000760C1108 00000000760C1120
00007F6035EB5E80 103067 1 1 1 1 row cache 00000000760C10F0 24 perm 0 0000000076081000 00000000760C10F0 00000000760C1108
00007F6035EB5E18 103068 1 1 1 1 row cache 00000000760C10D8 24 perm 0 0000000076081000 00000000760C10D8 00000000760C10F0
00007F6035EB5DB0 103069 1 1 1 1 row cache 00000000760C10C0 24 perm 0 0000000076081000 00000000760C10C0 00000000760C10D8
00007F6035EB5D48 103070 1 1 1 1 row cache 00000000760C1030 144 perm 0 0000000076081000 00000000760C1030 00000000760C10C0
00007F6035EB5CE0 103071 1 1 1 1 row cache mutex 0000000076081020 262160 perm 0 0000000076081000 65536 0000000076081020 00000000760C1030
564 rows selected.
--//可以发现许多情况中间出现5个24大小的chunk,也有小部分中间出现32大小的chunk。大部分都是5个。
--//后记:直接执行如下:
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX') "KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache%';
--//从下往上看,chunk都是连接在一起的.
--//补充可以执行如下验证:
$ cat row_cache2.sql
/* Formatted on 2026-08-14 17:02:56 (QP5 v5.277) */
WITH x1
AS ( SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX')
"KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache%'
-- OR (KSMCHCOM = 'row cache' AND (KSMCHSIZ = 144 OR ksmchsiz = 24 OR ksmchsiz = 32 or ksmchsiz=64))
ORDER BY 15)
,x2
AS (SELECT x1.*
,"KSMCHPTR_END+1" KSMCHPTR_END
,LEAD (KSMCHPTR_BEGIN, 1) OVER (ORDER BY KSMCHPTR_BEGIN) KSMCHPTR_next
FROM x1)
SELECT *
FROM x2
WHERE KSMCHPTR_END <> KSMCHPTR_next;
SYS@book> @ row_cache2
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS KSMCHPTR_BEGIN KSMCHPTR_END+1 KSMCHPTR_END KSMCHPTR_NEXT
---------------- ------ -------- ------ --------- --------- -------------------------------- ---------------- ---------- -------- --------- ---------------- ------- ---------------- ----------------- ----------------- ----------------
00007F58360FF660 98876 1 1 1 1 row cache 0000000076A46BA8 24 perm 0 0000000076081000 0000000076A46BA8 0000000076A46BC0 0000000076A46BC0 00000000774C8628
--//出现地址跳跃的地方是两者的KSMCHPAR不同,KSMCHPAR=0000000077004000,0000000076081000
SYS@book> select * from x$ksmsp where KSMCHSIZ=144 and KSMCHCOM='row cache';
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR
---------------- ------- -------- ------ --------- --------- ---------- ---------------- ---------- -------- --------- ----------------
00007F6035F2F6D8 101085 1 1 1 1 row cache 00000000779D7B60 144 perm 0 0000000077004000
00007F6035F2F330 101094 1 1 1 1 row cache 00000000779D6428 144 perm 0 0000000077004000
00007F6035F2EF88 101103 1 1 1 1 row cache 00000000779AA2F0 144 perm 0 0000000077004000
00007F6035F2EBE0 101112 1 1 1 1 row cache 00000000779A49B8 144 perm 0 0000000077004000
00007F6035F2E838 101121 1 1 1 1 row cache 0000000077844880 144 perm 0 0000000077004000
00007F6035F2E490 101130 1 1 1 1 row cache 00000000776E4740 144 perm 0 0000000077004000
00007F6035F2E0E8 101139 1 1 1 1 row cache 00000000776E3B08 144 perm 0 0000000077004000
00007F6035F2DD40 101148 1 1 1 1 row cache 00000000776E0DD0 144 perm 0 0000000077004000
00007F6035F2D998 101157 1 1 1 1 row cache 00000000776E0718 144 perm 0 0000000077004000
00007F6035F2D5F0 101166 1 1 1 1 row cache 00000000775805E0 144 perm 0 0000000077004000
00007F6035F2D248 101175 1 1 1 1 row cache 000000007757D8A8 144 perm 0 0000000077004000
00007F6035F2CEA0 101184 1 1 1 1 row cache 000000007757AB70 144 perm 0 0000000077004000
00007F6035F2CAF8 101193 1 1 1 1 row cache 00000000774CAA38 144 perm 0 0000000077004000
00007F6035F089F8 102611 1 1 1 1 row cache 0000000076A45EA0 144 perm 0 0000000076081000
00007F6035F08650 102620 1 1 1 1 row cache 0000000076A45268 144 perm 0 0000000076081000
00007F6035F082A8 102629 1 1 1 1 row cache 0000000076A44630 144 perm 0 0000000076081000
00007F6035F07F00 102638 1 1 1 1 row cache 0000000076A439F8 144 perm 0 0000000076081000
00007F6035F07B58 102647 1 1 1 1 row cache 0000000076A40CC0 144 perm 0 0000000076081000
00007F6035F077B0 102656 1 1 1 1 row cache 0000000076A3DF88 144 perm 0 0000000076081000
00007F6035F07408 102665 1 1 1 1 row cache 0000000076A38650 144 perm 0 0000000076081000
00007F6035F07060 102674 1 1 1 1 row cache 0000000076A384E8 144 perm 0 0000000076081000
00007F6035F06CB8 102683 1 1 1 1 row cache 0000000076A357B0 144 perm 0 0000000076081000
00007F6035F06910 102692 1 1 1 1 row cache 0000000076A2FE78 144 perm 0 0000000076081000
00007F6035F06568 102701 1 1 1 1 row cache 0000000076A2E740 144 perm 0 0000000076081000
00007F6035F061C0 102710 1 1 1 1 row cache 0000000076A28E08 144 perm 0 0000000076081000
00007F6035F05E18 102719 1 1 1 1 row cache 0000000076A234D0 144 perm 0 0000000076081000
00007F6035F05A70 102728 1 1 1 1 row cache 0000000076A1DB98 144 perm 0 0000000076081000
00007F6035F056C8 102737 1 1 1 1 row cache 0000000076A18260 144 perm 0 0000000076081000
00007F6035F05320 102746 1 1 1 1 row cache 0000000076A12928 144 perm 0 0000000076081000
00007F6035F04F78 102755 1 1 1 1 row cache 0000000076A0CFF0 144 perm 0 0000000076081000
00007F6035F04BD0 102764 1 1 1 1 row cache 0000000076A076B8 144 perm 0 0000000076081000
00007F6035F04828 102773 1 1 1 1 row cache 0000000076A01D80 144 perm 0 0000000076081000
00007F6035F04480 102782 1 1 1 1 row cache 00000000769FC448 144 perm 0 0000000076081000
00007F6035F040D8 102791 1 1 1 1 row cache 000000007694C310 144 perm 0 0000000076081000
00007F6035F03D30 102800 1 1 1 1 row cache 000000007689C1D8 144 perm 0 0000000076081000
00007F6035F03988 102809 1 1 1 1 row cache 00000000767EC0A0 144 perm 0 0000000076081000
00007F6035F035E0 102818 1 1 1 1 row cache 000000007668BF68 144 perm 0 0000000076081000
00007F6035F03238 102827 1 1 1 1 row cache 000000007652BE30 144 perm 0 0000000076081000
00007F6035F02E90 102836 1 1 1 1 row cache 00000000763CBCF8 144 perm 0 0000000076081000
00007F6035F02AE8 102845 1 1 1 1 row cache 000000007626BBC0 144 perm 0 0000000076081000
00007F6035F02740 102854 1 1 1 1 row cache 0000000076266288 144 perm 0 0000000076081000
00007F6035F02398 102863 1 1 1 1 row cache 0000000076263550 144 perm 0 0000000076081000
00007F6035F01FF0 102872 1 1 1 1 row cache 0000000076260818 144 perm 0 0000000076081000
00007F6035F01C48 102881 1 1 1 1 row cache 000000007625DAE0 144 perm 0 0000000076081000
00007F6035F018A0 102890 1 1 1 1 row cache 000000007625ADA8 144 perm 0 0000000076081000
00007F6035F014F8 102899 1 1 1 1 row cache 0000000076255470 144 perm 0 0000000076081000
00007F6035F01150 102908 1 1 1 1 row cache 0000000076252738 144 perm 0 0000000076081000
00007F6035F00DA8 102917 1 1 1 1 row cache 000000007624FA00 144 perm 0 0000000076081000
00007F6035F00A00 102926 1 1 1 1 row cache 000000007624CCC8 144 perm 0 0000000076081000
00007F6035F00658 102935 1 1 1 1 row cache 0000000076247390 144 perm 0 0000000076081000
00007F6035F002B0 102944 1 1 1 1 row cache 0000000076244658 144 perm 0 0000000076081000
00007F6035EFFE18 102953 1 1 1 1 row cache 0000000076241920 144 perm 0 0000000076081000
00007F6035EFFA70 102962 1 1 1 1 row cache 00000000760E17E8 144 perm 0 0000000076081000
00007F6035EFF6C8 102971 1 1 1 1 row cache 00000000760DEAB0 144 perm 0 0000000076081000
00007F6035EFF320 102980 1 1 1 1 row cache 00000000760DBD78 144 perm 0 0000000076081000
00007F6035EFEF78 102989 1 1 1 1 row cache 00000000760DB980 144 perm 0 0000000076081000
00007F6035EFEBD0 102998 1 1 1 1 row cache 00000000760DAD48 144 perm 0 0000000076081000
00007F6035EFE828 103007 1 1 1 1 row cache 00000000760DA110 144 perm 0 0000000076081000
00007F6035EFE480 103016 1 1 1 1 row cache 00000000760D47D8 144 perm 0 0000000076081000
00007F6035EFE0D8 103025 1 1 1 1 row cache 00000000760CEEA0 144 perm 0 0000000076081000
00007F6035EFDD30 103034 1 1 1 1 row cache 00000000760C3D68 144 perm 0 0000000076081000
00007F6035EFD988 103043 1 1 1 1 row cache 00000000760C1030 144 perm 0 0000000076081000
62 rows selected.
--//前面取2条记录,结尾取2条记录,KSMCHPT+0x16. 用于查询
$ od -t x8 -A x -w64 61000000 | egrep -i "00000000760C1040|00000000760C3D78|00000000779D7B70|00000000779D6438"
164c86c0 0000000076a2e750 00000000776e4750 0000000077844890 00000000779aa300 00000000779d6438 00000000760db990 00000000760da120 00000000779d7b70
164c8740 0000000076a38660 0000000076a28e18 0000000076a0d000 0000000076a12938 0000000076a18270 0000000076a1dba8 0000000076a234e0 00000000760c3d78
164c8800 00000000760e17f8 0000000076a2fe88 00000000779aa300 0000000076a01d90 0000000076a076c8 00000000760c1040 0000000076244668 0000000076a43a08
--//文件偏移量+ 加上0x0000000061000000。
SYS@book> @ fchaz 774c86c0
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- --------- --------- -------------------------------- ---------- -------- --------- ---------------- ---------------- -----------------
VSGA 00000000774C8668 1 1 row cache 544 perm 0 0000000077004000 00000000774C8668 00000000774C8888
SYS@book> @ fchaz 774c8800
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- --------- --------- -------------------------------- ---------- -------- --------- ---------------- ---------------- -----------------
VSGA 00000000774C8668 1 1 row cache 544 perm 0 0000000077004000 00000000774C8668 00000000774C8888
--//在同一个chunk里面,说明以上chunk大小等于144的地址保存在该chunk里面,大小等于544.
--// (544-16)/8 = 66, 一共66个地址。
SYS@book> @ opeek 00000000774C8668 544 1
New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3877_0001.trc
[0774C8668, 0774C8888) = 00000221 00B38F00 16B4E6AA 00000000 776E0728 00000000 7757AB80 00000000 775805F0 00000000 774CAA48 00000000 7757D8B8 00000000 ...
*** 2026-08-13T17:03:31.561361+08:00 (CDB$ROOT(1))
Processing Oradebug command 'peek 0x00000000774c8668 544 1'
[0774C8668, 0774C8888) = 00000221 00B38F00 16B4E6AA 00000000 776E0728 ...
Dump of memory from 0x0774C867C to 0x0774C8888
0774C8670 00000000 [....]
0774C8680 7757AB80 00000000 775805F0 00000000 [..Ww......Xw....]
0774C8690 774CAA48 00000000 7757D8B8 00000000 [H.Lw......Ww....]
0774C86A0 776E0DE0 00000000 776E3B18 00000000 [..nw.....;nw....]
0774C86B0 776E4750 00000000 77844890 00000000 [PGnw.....H.w....]
~~~~~~~~~~~~~~~~~
0774C86C0 76A2E750 00000000 776E4750 00000000 [P..v....PGnw....]
0774C86D0 77844890 00000000 779AA300 00000000 [.H.w.......w....]
0774C86E0 779D6438 00000000 760DB990 00000000 [8d.w.......v....]
0774C86F0 760DA120 00000000 779D7B70 00000000 [ ..v....p{.w....]
0774C8700 779A49C8 00000000 760D47E8 00000000 [.I.w.....G.v....]
0774C8710 760CEEB0 00000000 767EC0B0 00000000 [...v......~v....]
0774C8720 7689C1E8 00000000 76A384F8 00000000 [...v.......v....]
0774C8730 769FC458 00000000 76A357C0 00000000 [X..v.....W.v....]
0774C8740 76A38660 00000000 76A28E18 00000000 [`..v.......v....]
0774C8750 76A0D000 00000000 76A12938 00000000 [...v....8).v....]
0774C8760 76A18270 00000000 76A1DBA8 00000000 [p..v.......v....]
0774C8770 76A234E0 00000000 760C3D78 00000000 [.4.v....x=.v....]
0774C8780 7624CCD8 00000000 762473A0 00000000 [..$v.....s$v....]
0774C8790 76266298 00000000 7624FA10 00000000 [.b&v......$v....]
0774C87A0 76252748 00000000 76255480 00000000 [H'%v.....T%v....]
0774C87B0 7625ADB8 00000000 76A3DF98 00000000 [..%v.......v....]
0774C87C0 76A40CD0 00000000 776E4750 00000000 [...v....PGnw....]
0774C87D0 7625DAF0 00000000 76260828 00000000 [..%v....(.&v....]
0774C87E0 76263560 00000000 76241930 00000000 [`5&v....0.$v....]
0774C87F0 760DBD88 00000000 760DEAC0 00000000 [...v.......v....]
0774C8800 760E17F8 00000000 76A2FE88 00000000 [...v.......v....]
0774C8810 779AA300 00000000 76A01D90 00000000 [...w.......v....]
0774C8820 76A076C8 00000000 760C1040 00000000 [.v.v....@..v....]
0774C8830 76244668 00000000 76A43A08 00000000 [hF$v.....:.v....]
0774C8840 76A44640 00000000 76A45278 00000000 [@F.v....xR.v....]
0774C8850 76A45EB0 00000000 760DAD58 00000000 [.^.v....X..v....]
0774C8860 7626BBD0 00000000 763CBD08 00000000 [..&v......<v....]
0774C8870 7652BE40 00000000 7694C320 00000000 [@.Rv.... ..v....]
0774C8880 7668BF78 00000000 [x.hv....]
--//(544-16)/8 = 66,也就是存在66个地址。
--//如果直接查看文件61000000。
$ od -t x8 -j $[0x774C8668-0x61000000+0x10] -N $[544-16] -A x -w8 61000000 | nl -v 0 -ba
0 164c8678 00000000776e0728
1 164c8680 000000007757ab80
2 164c8688 00000000775805f0
3 164c8690 00000000774caa48
4 164c8698 000000007757d8b8
5 164c86a0 00000000776e0de0
6 164c86a8 00000000776e3b18
7 164c86b0 00000000776e4750
8 164c86b8 0000000077844890
9 164c86c0 0000000076a2e750
10 164c86c8 00000000776e4750
11 164c86d0 0000000077844890
12 164c86d8 00000000779aa300
13 164c86e0 00000000779d6438
14 164c86e8 00000000760db990
15 164c86f0 00000000760da120
16 164c86f8 00000000779d7b70
17 164c8700 00000000779a49c8
18 164c8708 00000000760d47e8
19 164c8710 00000000760ceeb0
20 164c8718 00000000767ec0b0
21 164c8720 000000007689c1e8
22 164c8728 0000000076a384f8
23 164c8730 00000000769fc458
24 164c8738 0000000076a357c0
25 164c8740 0000000076a38660
26 164c8748 0000000076a28e18
27 164c8750 0000000076a0d000
28 164c8758 0000000076a12938
29 164c8760 0000000076a18270
30 164c8768 0000000076a1dba8
31 164c8770 0000000076a234e0
32 164c8778 00000000760c3d78
33 164c8780 000000007624ccd8
34 164c8788 00000000762473a0
35 164c8790 0000000076266298
36 164c8798 000000007624fa10
37 164c87a0 0000000076252748
38 164c87a8 0000000076255480
39 164c87b0 000000007625adb8
40 164c87b8 0000000076a3df98
41 164c87c0 0000000076a40cd0
42 164c87c8 00000000776e4750
43 164c87d0 000000007625daf0
44 164c87d8 0000000076260828
45 164c87e0 0000000076263560
46 164c87e8 0000000076241930
47 164c87f0 00000000760dbd88
48 164c87f8 00000000760deac0
49 164c8800 00000000760e17f8
50 164c8808 0000000076a2fe88
51 164c8810 00000000779aa300
52 164c8818 0000000076a01d90
53 164c8820 0000000076a076c8
54 164c8828 00000000760c1040
55 164c8830 0000000076244668
56 164c8838 0000000076a43a08
57 164c8840 0000000076a44640
58 164c8848 0000000076a45278
59 164c8850 0000000076a45eb0
60 164c8858 00000000760dad58
61 164c8860 000000007626bbd0
62 164c8868 00000000763cbd08
63 164c8870 000000007652be40
64 164c8878 000000007694c320
65 164c8880 000000007668bf78
66 164c8888
--//od 参数说明-t x8 8位一组,-j $[0x774C8668-0x61000000+0x10]表示开始位置,-N $[544-16]取长度,-A x表示文件偏移的16进
--//制显示,-w8显示宽度,相当于每行1个地址。
SYS@book> select min(CACHE#),max(cache#) from v$rowcache order by 1 ;
MIN(CACHE#) MAX(CACHE#)
----------- -----------
0 65
--//也就是这个row cache查询的起点(我猜测),比如查询dc_objects某个对象,知道cache#=8,对应的地址就是0x77844890(注意cache#从
--//0开始计数).
SYS@book> @ fchaz 77844890
LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1
---- ---------------- --------- --------- -------------------------------- ---------- -------- --------- ---------------- ---------------- -----------------
VSGA 0000000077844880 1 1 row cache 144 perm 0 0000000077004000 0000000077844880 0000000077844910
--//通过这个chunk就可以知道关联的相关地址.
SYS@book> @ opeek 0000000077844880 144 1
New tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3070_0002.trc
[077844880, 077844910) = 00000091 00B38F00 16B4E6AA 00000000 77844920 00000000 77844968 00000000 77844938 00000000 77844950 00000000 04200002 00010298 ...
*** 2026-08-13T17:16:51.628608+08:00 (CDB$ROOT(1))
Processing Oradebug command 'peek 0x0000000077844880 144 1'
[077844880, 077844910) = 00000091 00B38F00 16B4E6AA 00000000 77844920 ...
Dump of memory from 0x077844894 to 0x077844910
077844890 00000000 77844968 00000000 [....hI.w....]
0778448A0 77844938 00000000 77844950 00000000 [8I.w....PI.w....]
0778448B0 04200002 00010298 16B4E7B8 00000000 [.. .............]
0778448C0 0000000A 00000000 00008000 00000000 [................] --//0x00008000 = 32768
0778448D0 77844998 00000000 00000001 00000000 [.I.w............]
~~~~~~~~~~~~~~~~~
0778448E0 76A46B28 00000000 774C9058 00000000 [(k.v....X.Lw....]
0778448F0 00918700 00001D1B 77844980 00000000 [.........I.w....]
077844900 778C49A8 00000000 779849B8 00000000 [.I.w.....I.w....]
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
*** 2026-08-13T17:16:51.629138+08:00 (CDB$ROOT(1))
--//将上面下划线的地址减去0x10,就可以与如下KSMCHPTR
0x779849B8-0x10 = 0x00000000779849a8
0x778C49A8-0x10 = 0x00000000778c4998
0x77844998-0x10 = 0x0000000077844988
0x77844920-0x10 = 0x0000000077844910
0x77844968-0x10 = 0x0000000077844958
0x77844938-0x10 = 0x0000000077844928
0x77844950-0x10 = 0x0000000077844940
0x77844980-0x10 = 0x0000000077844970
--//单独拿cache_name='dc_objects' chunk看看,注我的测试环境每次重启该地址不会变化的,我没有修改sga相关配置:
SELECT a.*
,CASE
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) = 0 THEN (KSMCHSIZ - 16) / 24
WHEN ksmchcom = 'row cache mutex' AND MOD (KSMCHSIZ - 16, 24) <> 0 THEN (KSMCHSIZ - 16) / 4
WHEN ksmchcom = 'row cache hash' AND MOD (KSMCHSIZ - 16, 16) = 0 THEN (KSMCHSIZ - 16) / 16
END
buckets
,a.KSMCHPTR KSMCHPTR_BEGIN
,TO_CHAR (TO_NUMBER (a.KSMCHPTR, 'XXXXXXXXXXXXXXXX') + a.KSMCHSIZ, 'FM0XXXXXXXXXXXXXXX') "KSMCHPTR_END+1"
FROM x$ksmsp a
WHERE KSMCHCOM LIKE 'row cache %' OR (KSMCHCOM = 'row cache' AND (KSMCHSIZ = 144 OR ksmchsiz = 24 or ksmchsiz=32));
ADDR INDX INST_ID CON_ID KSMCHIDX KSMCHDUR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR BUCKETS KSMCHPTR_BEGIN KSMCHPTR_END+1
---------------- ------- -------- ------ --------- --------- --------------- ---------------- ---------- -------- --------- ---------------- ------- ---------------- -----------------
00007F6035EE6E48 101140 1 1 1 1 row cache mutex 00000000779849A8 131088 perm 0 0000000077004000 32768 00000000779849A8 00000000779A49B8
00007F6035EE6DE0 101141 1 1 1 1 row cache mutex 00000000778C4998 786448 perm 0 0000000077004000 32768 00000000778C4998 00000000779849A8
00007F6035EE6D78 101142 1 1 1 1 row cache hash 0000000077844988 524304 perm 0 0000000077004000 32768 0000000077844988 00000000778C4998
00007F6035EE6D10 101143 1 1 1 1 row cache 0000000077844970 24 perm 0 0000000077004000 0000000077844970 0000000077844988
00007F6035EE6CA8 101144 1 1 1 1 row cache 0000000077844958 24 perm 0 0000000077004000 0000000077844958 0000000077844970
00007F6035EE6C40 101145 1 1 1 1 row cache 0000000077844940 24 perm 0 0000000077004000 0000000077844940 0000000077844958
00007F6035EE6BD8 101146 1 1 1 1 row cache 0000000077844928 24 perm 0 0000000077004000 0000000077844928 0000000077844940
00007F6035EE6B70 101147 1 1 1 1 row cache 0000000077844910 24 perm 0 0000000077004000 0000000077844910 0000000077844928
00007F6035EE6B08 101148 1 1 1 1 row cache 0000000077844880 144 perm 0 0000000077004000 0000000077844880 0000000077844910
--//许多地址都能对上。
--//疑问:前面测试查询如下
SYS@book> select rownum cache# from dual connect by level <=65 minus select cache# from v$rowcache where type='PARENT';
CACHE#
----------
7
42
51
11
--//type='PARENT' 不存在cache#=7.42.51,11.
--//补充:
SYS@book> select distinct cache#,type,parameter from v$rowcache where cache# in (7,11,42,51);
CACHE# TYPE PARAMETER
---------- ------------------------------ ------------------------------
7 SUBORDINATE dc_users
--//存在 CACHE#=7,TYPE=SUBORDINATE,PARAMETER=dc_users。在type='PARENT',PARAMETER=dc_users,cache#=10.
SYS@book> select distinct cache#,cache_name from v$rowcache_parent where cache# in (7,11,42,51);
CACHE# CACHE_NAME
---------- --------------
11 dc_objects
--//有一部分CACHE_NAME=dc_objects,cache#=11,似乎这些对象在v$fixed_table定义。
--//另外单独写一篇blog分析.
3.验证偏移72位置表示buckets数量:
SYS@book> select 'oradebug peek 0x'||TO_CHAR (TO_NUMBER (KSMCHPTR, 'XXXXXXXXXXXXXXXX') + 72, 'FM0XXXXXXXXXXXXXXX')||' 4' c40 from x$ksmsp where KSMCHSIZ=144 and KSMCHCOM='row cache';
C40
----------------------------------------
oradebug peek 0x00000000779D7BA8 4
oradebug peek 0x00000000779D6470 4
oradebug peek 0x00000000779AA338 4
oradebug peek 0x00000000779A4A00 4
oradebug peek 0x00000000778448C8 4
oradebug peek 0x00000000776E4788 4
oradebug peek 0x00000000776E3B50 4
oradebug peek 0x00000000776E0E18 4
oradebug peek 0x00000000776E0760 4
oradebug peek 0x0000000077580628 4
oradebug peek 0x000000007757D8F0 4
oradebug peek 0x000000007757ABB8 4
oradebug peek 0x00000000774CAA80 4
oradebug peek 0x0000000076A45EE8 4
oradebug peek 0x0000000076A452B0 4
oradebug peek 0x0000000076A44678 4
oradebug peek 0x0000000076A43A40 4
oradebug peek 0x0000000076A40D08 4
oradebug peek 0x0000000076A3DFD0 4
oradebug peek 0x0000000076A38698 4
oradebug peek 0x0000000076A38530 4
oradebug peek 0x0000000076A357F8 4
oradebug peek 0x0000000076A2FEC0 4
oradebug peek 0x0000000076A2E788 4
oradebug peek 0x0000000076A28E50 4
oradebug peek 0x0000000076A23518 4
oradebug peek 0x0000000076A1DBE0 4
oradebug peek 0x0000000076A182A8 4
oradebug peek 0x0000000076A12970 4
oradebug peek 0x0000000076A0D038 4
oradebug peek 0x0000000076A07700 4
oradebug peek 0x0000000076A01DC8 4
oradebug peek 0x00000000769FC490 4
oradebug peek 0x000000007694C358 4
oradebug peek 0x000000007689C220 4
oradebug peek 0x00000000767EC0E8 4
oradebug peek 0x000000007668BFB0 4
oradebug peek 0x000000007652BE78 4
oradebug peek 0x00000000763CBD40 4
oradebug peek 0x000000007626BC08 4
oradebug peek 0x00000000762662D0 4
oradebug peek 0x0000000076263598 4
oradebug peek 0x0000000076260860 4
oradebug peek 0x000000007625DB28 4
oradebug peek 0x000000007625ADF0 4
oradebug peek 0x00000000762554B8 4
oradebug peek 0x0000000076252780 4
oradebug peek 0x000000007624FA48 4
oradebug peek 0x000000007624CD10 4
oradebug peek 0x00000000762473D8 4
oradebug peek 0x00000000762446A0 4
oradebug peek 0x0000000076241968 4
oradebug peek 0x00000000760E1830 4
oradebug peek 0x00000000760DEAF8 4
oradebug peek 0x00000000760DBDC0 4
oradebug peek 0x00000000760DB9C8 4
oradebug peek 0x00000000760DAD90 4
oradebug peek 0x00000000760DA158 4
oradebug peek 0x00000000760D4820 4
oradebug peek 0x00000000760CEEE8 4
oradebug peek 0x00000000760C3DB0 4
oradebug peek 0x00000000760C1078 4
62 rows selected.
--//执行如下.
spool bucket.txt
oradebug setmypid
--//拷贝粘贴以上内容
...
spool off
$ grep "^\[" bucket.txt | awk '{print $NF}' | awk '{print strtonum("0x"$0)}'
65536
128
4096
512
32768
32768
64
256
32
32768
256
256
16384
64
64
64
64
256
256
512
1
256
512
128
512
512
512
512
512
512
512
512
512
16384
16384
16384
32768
32768
32768
32768
512
256
256
256
256
512
256
256
256
512
256
256
32768
256
256
16
64
64
512
512
1024
256
--//单独取select a.*,(KSMCHSIZ-16)/24 buckets from x$ksmsp a where KSMCHCOM='row cache mutex' and mod(KSMCHSIZ-16,24)=0 ;
--//输出的最后一列,适当编辑保存q6.txt
$ diff <(grep "^\[" bucket.txt | awk '{print $NF}' | awk '{print strtonum("0x"$0)}') q6.txt
--//完全正确.
浙公网安备 33010602011771号