11июн
Заголовки буферов (buffer header).X$BH.
Буферный кэш содержит только буфера, но не управляющие структуры. Для каждого буфера есть соответствующий буферный заголовок в переменной области SGA. Аналогично, working set headers, the hash chain headers и их защелки также находятся в переменной области SGA.
Каждый буферный заголовок (buffer header) описывает содержимое одного буфера. Буферные заголовки составляют массив в постоянной части shared pool. Все буфера доступны через буферные заголовки. Сессии манипулируют буферными заголовками (а таким образом и буферами) посредством динамически размещаемых структур называемых буферными указателями. Буферный заголовок содержит ссылку на сам буфер и на защелку "Cache Buffers Chains latch".
Попробую дать немного информации, чтобы стало ясно, что такое заголовок буфера.
Выполним команду:
alter session set events 'immediate trace name buffers level 1'
Результат получим в папке, на которую установлен параметр инициализации user_dump_dest. Дамп содержит заголовки буферов. Например,
BH (0x827F5D8C) file#: 1 rdba: 0x0040c68e (1/50830) class 1 ba: 0x8261A000
set: 9 dbwrid: 0 obj: 82 objn: 82
hash: [a4c92344,a4c92344] lru: [827f60c4,827f5ae4]
ckptq: [NULL] fileq: [NULL]
st: XCURRENT md: NULL rsop: 0x00000000 tch: 0
flags: only_sequential_access
LRBA: [0x0.0.0] HSCN: [0xffff.ffffffff] HSUB: [255] RRBA: [0x0.0.0]
А теперь выберем информацию по этому буферу в таблице X$BH:
ADDR INDX INST_ID HLADDR BLSIZ NXT_HASH PRV_HASH NXT_REPL PRV_REPL FLAG LRU_FLAG TS# FILE# DBARFIL DBABLK CLASS STATE MODE_HELD CHANGES CSTATE X_TO_NULL FORCED_READS FORCED_WRITES LE_ADDR DIRTY_QUEUE SET_DS OBJ BA CR_SCN_BAS CR_SCN_WRP CR_XID_USN CR_XID_SLT CR_XID_SQN CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ CR_UBA_REC CR_SFL LRBA_SEQ LRBA_BNO HSCN_BAS HSCN_WRP HSUB_SCN RRBA_SEQ RRBA_BNO US_NXT US_PRV WA_NXT WA_PRV TCH TIM
---------- -------------------------------------- -------------------------------------- ---------- -------------------------------------- ---------- ---------- ---------- ---------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- ---------- -------------------------------------- ---------- -------------------------------------- ---------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- -------------------------------------- ---------- ---------- ---------- ---------- -------------------------------------- --------------------------------------
06559210 63060 1 A437C724 8192 A4C92344 A4C92344 827F60C4 827F5AE4 524288 0 0 1 1 50830 1 1 0 0 0 0 0 0 00 0 A437EEF4 82 8261A000 0 0 0 0 0 0 0 0 0 0 0 0 4294967295 65535 255 0 0 827F5DC0 827F5DC0 827F5DC8 827F5DC8 0 0
Вот так можно получить исчерпывающую информацию о заголовке буфера.
Приведу некоторые пояснения к изложенному выше.
Dump of buffer cache at level 1:
- Buffer status (st) : xcurrent, CR, reading.
- Lock mode (md) : exclusive (excl), shared (shr) , and null (null)
- In cache data block summary : dba, inc & seq, version and block type
- Buffer holder and waiters list
- Reference to the buffer’s location on the hash chain, a pointer location of the buffer header on either the LRU or LRUW list and the pointer to the actual buffer block (ba). Note, buffers blocks can be on either the LRU or LRUW lists, but not both.
- Flags (flags) indicating operation to be perform or performed on the buffer block and recovery information.
hash: [ ] местонахождение в cache buffer chains
lru: [] – местонахождение в lru списке
X$bh:
set_ds maps to addr on x$kcbwds.
flag is a bit array.
Bit if set
0 Block is dirty
4 temporary block
9 or 10 ping
14 stale
16 direct
524288 (=0x80000) Block was read in a full table scan See this link
Block classes
KCBCSVSH (Save Undo Segment Headers (block class 5))
KCBCSVUN (Save Undo Blocks (block class 3))
KCBCSORT (Sort Blocks (block class 2))
KCBCDATA (Data Blocks (block class 1))
KCBCSEGH (Segment Headers (block class 4))
KCBCFRLS (Free List Blocks (block class 6))
KCBCUSH (Undo Segment Header (block class 7 + (n*2)))
KCBCUSB (Undo Segment Block (block class 7 + (n*2) + 1))
Note: For undo (rollback) segments, 'n' is the undo segment number.
Block Class ‘0’ is reserved for error detection in KCB.
x$bh.state
decode(state, 0, 'FREE', /* not currently is use */
1, 'XCUR', /* held exclusive by this instance */
2, 'SCUR', /* held shared by this instance */
3, 'CR', /* only valid for consistent read */
4, 'READ', /* is being read from disk */
5, 'MREC', /* in media recovery mode */
6, 'IREC') /* in instance(crash) recovery mode */