ITPub博客

首页 > 数据库 > Oracle > [20260810]row cache的直方图信息.txt

[20260810]row cache的直方图信息.txt

原创 Oracle 作者:lfree 时间:2026-08-14 21:45:06 0 删除 编辑

[20260810]row cache的直方图信息.txt

--//昨天探究row cache mutex等待事件关联的对象。oracle 缺省分析方法是auto,这样会在表的一些字典上建立大量的直方图信息。
--//实际上许多字段根本不需要建立直方图,尝试建立表并且建立直方图,看看相关字段直方图占用共享内存的情况。

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 t as select * from all_objects;
Table created.

--//强制在每个字段建立直方图。
--//session 1:
SCOTT@book01p> exec dbms_stats.gather_table_stats('SCOTT', 'T', estimate_percent => NULL, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true, no_invalidate=>false)
PL/SQL procedure successfully completed.

SCOTT@book01p> select owner,object_name,object_id,data_object_id from dba_objects where owner='SCOTT' and object_name='T';
OWNER                          OBJECT_NAME                     OBJECT_ID DATA_OBJECT_ID
------------------------------ ------------------------------ ---------- --------------
SCOTT                          T                                   76760          76760

SCOTT@book01p> @ 10to16 76760
10 to 16 HEX      REVERSE16
----------------- -------------------------------------------------------------------
0000000000012bd8  0xd82b0100-00000000

--//在 v$rowcache_parent视图保存的直方图信息key按照REVERSE16的格式(注意大写)+字段号作为开头,这是猜测出来的,注意intel cpu大小头
--//问题。

--//session 2:
SYS@book> alter system flush SHARED_POOL;
System altered.

SYS@book> select * from v$rowcache_parent where cache#=16 and key like 'D82B0100%';
no rows selected

--//session 1:
SCOTT@book01p> select * from t where rownum=1;
--//输出略。

--//session 2:
sys@book> column key noprint
SYS@book> select v.*,substr(v.key,1,20) c20 from v$rowcache_parent v where cache#=16 and key like 'D82B0100%';
  INDX       HASH ADDRESS              CACHE# CACHE_NAME           EXISTENT  LOCK_MODE LOCK_REQUEST TXN              SADDR            INST_LOCK_REQUEST INST_LOCK_RELEASE IN INST_LOC INST_LOC CON_ID C20
------ ---------- ---------------- ---------- -------------------- -------- ---------- ------------ ---------------- ---------------- ----------------- ----------------- -- -------- -------- ------ --------------------
  1049        555 0000000070A966F8         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100060000000000
  1106       4365 000000006B7B1210         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100080000000000
  1112       4635 000000006953C9D0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100010000000000
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1173       9218 0000000069EE2920         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100130000000000
  1231      12986 0000000069EE1900         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100160000000000
  1300      18387 0000000070E5C4E0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000E0000000000
  1324      20028 0000000069EE0E40         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100180000000000
  1336      20603 000000006953ADE0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100030000000000
  1371      22650 000000006FDDDD10         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01001B0000000000
  1412      26403 000000006FDDE040         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01001A0000000000
  1493      31538 0000000066FCCF20         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100070000000000
  1513      33114 000000006953AAB0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100050000000000
  1527      34125 000000006F464940         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100040000000000
  1569      36366 0000000070E5CFA0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000C0000000000
  1613      38890 0000000070E5D500         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000B0000000000
  1674      43124 0000000070E5CA40         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000D0000000000
  1689      44468 000000006FDDE370         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100190000000000
  1705      45276 0000000069EE1E60         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100150000000000
  1776      49242 000000006B7F94F8         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100090000000000
  1778      49250 0000000069EE23C0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100140000000000
  1869      57055 0000000069EE13A0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100170000000000
  1875      57402 000000006953B840         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100020000000000
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1889      58438 0000000070E5B200         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100110000000000
  1920      60744 000000006B7F8368         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000A0000000000
  1961      63080 0000000070E5B750         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100100000000000
  1977      64044 0000000070E5BA80         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000F0000000000
  1983      64198 0000000069EE2E80         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100120000000000
27 rows selected.
--//表T一共27个字段。

--//字段号2,3,4,5应OBJECT_NAME,SUBOBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID,直方图bucket=254.
--//看看相关字段OBJECT_NAME的直方图占用共享内存的情况。

SYS@book> @ fchaz 000000006953B840
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 000000006953B810          1          1 KQR PO                                  816 recr            584 00               000000006953B810 000000006953BB40
--//占用816字节。

--//再通过地址parent='000000006953B840'查询v$rowcache_subordinate。
SYS@book> select * from v$rowcache_subordinate where parent='000000006953B840';
  INDX       HASH ADDRESS              CACHE#  SUBCACHE# SUBCACHE_NAME                EXISTENT PARENT                         CON_ID
------ ---------- ---------------- ---------- ---------- ---------------------------- -------- ------------------------------ ------
  2322      57402 000000006F435CF0         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2323      57402 000000006F436420         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2324      57402 0000000066BD4A60         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2325      57402 0000000066BD5190         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2326      57402 0000000066BD58C0         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2327      57402 0000000066BD5FF0         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2328      57402 0000000066BD6720         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2329      57402 000000006F407CD0         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2330      57402 000000006F408400         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2331      57402 000000006F408B30         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2332      57402 000000006F409260         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2333      57402 000000006F409990         16          1 dc_histogram_data_values     Y        000000006953B840                    3
  2334      57402 000000006953B110         16          1 dc_histogram_data_values     Y        000000006953B840                    3
13 rows selected.
--//SUBCACHE_NAME=dc_histogram_data_values

SYS@book> @ fchaz 000000006F435CF0
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 000000006F435CC0          1          1 KQR SO                                 1840 recr            608 00               000000006F435CC0 000000006F4363F0

SYS@book> @ fchaz 000000006F436420
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 000000006F4363F0          1          1 KQR SO                                 1840 recr            608 00               000000006F4363F0 000000006F436B20

SYS@book> @ fchaz 000000006953B110
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 000000006953B0E0          1          1 KQR SO                                 1840 recr            608 00               000000006953B0E0 000000006953B810
--//每个占用1840字节,1840*13 = 23920。

--//再来看看owner字段,直方图bucket=25.
SYS@book> @ fchaz 000000006953C9D0
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 000000006953C9A0          1          1 KQR PO                                  816 recr            584 00               000000006953C9A0 000000006953CCD0

SYS@book> select * from v$rowcache_subordinate where parent='000000006953C9D0';
  INDX       HASH ADDRESS              CACHE#  SUBCACHE# SUBCACHE_NAME                                                    EXISTENT PARENT                         CON_ID
------ ---------- ---------------- ---------- ---------- ---------------------------------------------------------------- -------- ------------------------------ ------
   142       4635 000000006953BB70         16          1 dc_histogram_data_values                                         Y        000000006953C9D0                    3
   143       4635 000000006953C2A0         16          1 dc_histogram_data_values                                         Y        000000006953C9D0                    3
--//仅仅2条记录。

SYS@book> @ fchaz 000000006953BB70
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 000000006953BB40          1          1 KQR SO                                 1840 recr            608 00               000000006953BB40 000000006953C270

SYS@book> @ fchaz 000000006953C2A0
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 000000006953C270          1          1 KQR SO                                 1840 recr            608 00               000000006953C270 000000006953C9A0
--//仅仅占用 2*1840 = 3680.

--//可以想象如果数据库的表建立大量直方图,数据字典占用大量的共享内存,而许多字段的直方图实际上没有必要的。oracle 9i分析
--//表缺省repeat,10g以后修改为auto,前者容易遗漏在相应字段建立直方图,后者容易在许多不需要字段建立直方图。
--//当然现在服务器内存都很大,这些直方图信息不会消耗许多共享内存。

3.继续:
--//session 1:
SCOTT@book01p> exec dbms_stats.gather_table_stats('SCOTT', 'T', estimate_percent => NULL, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 1', cascade=>true, no_invalidate=>false)
PL/SQL procedure successfully completed.

--//session 2:
SYS@book> column key noprint
SYS@book> select v.*,substr(v.key,1,20) c20 from v$rowcache_parent v where cache#=16 and key like 'D82B0100%';
no rows selected

SYS@book> alter system flush SHARED_POOL;
System altered.

--//session 1:
SCOTT@book01p> select * from t where rownum=1;
--//输出略。

SYS@book> select v.*,substr(v.key,1,20) c20 from v$rowcache_parent v where cache#=16 and key like 'D82B0100%';
  INDX       HASH ADDRESS              CACHE# CACHE_NAME           EXISTENT  LOCK_MODE LOCK_REQUEST TXN              SADDR            INST_LOCK_REQUEST INST_LOCK_RELEASE IN INST_LOC INST_LOC CON_ID C20
------ ---------- ---------------- ---------- -------------------- -------- ---------- ------------ ---------------- ---------------- ----------------- ----------------- -- -------- -------- ------ --------------------
  1202        555 0000000066978F70         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100060000000000
  1280       4365 00000000687D6650         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100080000000000
  1287       4635 0000000066979F60         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100010000000000
  1364       9218 00000000687D4350         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100130000000000
  1441      12986 000000006250D510         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100160000000000
  1531      18387 00000000687D5330         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000E0000000000
  1564      20028 000000006250CEB0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100180000000000
  1580      20603 0000000066979900         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100030000000000
  1623      22650 000000006250C520         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01001B0000000000
  1681      26403 000000006250C850         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01001A0000000000
  1778      31538 0000000066978C40         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100070000000000
  1808      33114 00000000669792A0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100050000000000
  1827      34125 00000000669795D0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100040000000000
  1876      36366 00000000687D5990         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000C0000000000
  1929      38890 00000000687D5CC0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000B0000000000
  2001      43124 00000000687D5660         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000D0000000000
  2022      44468 000000006250CB80         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100190000000000
  2040      45276 000000006250D840         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100150000000000
  2126      49242 00000000687D6320         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100090000000000
  2128      49250 000000006250DB70         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100140000000000
  2254      57055 000000006250D1E0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100170000000000
  2259      57402 0000000066979C30         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100020000000000
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2276      58438 00000000687D49A0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100110000000000
  2314      60744 00000000687D5FF0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000A0000000000
  2366      63080 00000000687D4CD0         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100100000000000
  2387      64044 00000000687D5000         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B01000F0000000000
  2392      64198 00000000687D4670         16 dc_histogram_defs    Y                 0            0 00               00                               0                 0    00       00            3 D82B0100120000000000
27 rows selected.

SYS@book> @ fchaz 0000000066979F60
LOC  KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM                           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR         KSMCHPTR_BEGIN   KSMCHPTR_END+1
---- ---------------- ---------- ---------- -------------------------------- ---------- -------- ---------- ---------------- ---------------- -----------------
VSGA 0000000066979F30          1          1 KQR PO                                  816 recr            584 00               0000000066979F30 000000006697A260

--//再通过地址parent='0000000066979C30'查询v$rowcache_subordinate。
SYS@book> select * from v$rowcache_subordinate where parent='0000000066979F60';
no rows selected

SYS@book> select * from v$rowcache_subordinate where parent='00000000687D4670';
no rows selected
--//这样就没有直方图信息在数据字典里面。

4.小结:
--//可以看出仅仅在需要的字段建立直方图,可以少量节省共享池内存消耗,同时以后的分析表也可以节省时间。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3179843/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969308