zhouweifeng
ҽ
л
ҵBlog
¹鵵...
·...
Ķ...
ͳ...
վ...
Դ
===========================================================
X$BH
===========================================================

X$BHļֶεĺ壺

state:

0, FREE, no valid block image
1, XCUR, a current mode block, exclusive to this instance
2, SCUR, a current mode block, shared with other instances
3, CR, a consistent read (stale) block image
4, READ, buffer is reserved for a block being read from disk
5, MREC, a block in media recovery mode
6, IREC, a block in instance (crash) recovery mode


SQL> select

2 o.object_name,
3 decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec',
4 6,'irec',7,'write',8,'pi') state,
5 count(*) blocks
6 from x$bh b, dba_objects o
7 where b.obj = o.data_object_id
8 and o.object_name = 'WWF_TEST'
9 group by o.object_name, state
10 order by blocks desc;

OBJECT_NAME STATE BLOCKS
-------------------- ----- ----------
WWF_TEST xcur 19

FREE: not currently in use
XCUR: exclusive
SCUR: shared current
CR: CR block
READ: being read from disk
MREC: in media recovery mode
IREC: in instance recovery mode
WRITE: writing to disk
PI: past image block involved in cache fusion block transfer

lru_flag
LRU_FLAG=2ʾLRU listˣ
LRU_FLAG=8ʾLRU listȶ
LRU_FLAG=0ʾûбʶ

_db_aging_hot_criteriaʾtchô
ÿ齫ƵLRU listȶˡȱʡΪ2.
_db_percent_hot_defaultʾȶռbufferı
ȱʡΪ50%.
SQL> select i.ksppinm parameter, v.ksppstvl VAL
2 from x$ksppi i, x$ksppcv v
3 where i.indx = v.indx
4 and i. ksppinm in ('_db_percent_hot_default',
5 '_db_aging_hot_criteria');

PARAMETER VAL
---------------------------------------
_db_percent_hot_default 50
_db_aging_hot_criteria 2

ڶһŽӽʮ¼ıִȫɨ

ִ
alter session set events 'immediate trace name buffers level 4';

ѡļ
CHAIN: 1112 LOC: 0x6A66685C HEAD: [657ddef0,657ddef0]
BH (0x657DDEF0) file#: 11 rdba: 0x02c04087 (11/16519) class 1 ba: 0x65208000
set: 3 dbwrid: 0 obj: 30908 objn: 30908
hash: [6a66685c,6a66685c] lru: [657dde7c,657ddff4]
LRU flags: moved_to_tail
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]
buffer tsn: 12 rdba: 0x02c04087 (11/16519)
scn: 0x0000.000af5f5 seq: 0x02 flg: 0x04 tail: 0xf5f50602
frmt: 0x02 chkval: 0x6af6 type: 0x06=trans data
Block header dump: 0x02c04087
Object id on Block? Y
seg/obj: 0x78bc csc: 0x00.af5ee itc: 3 flg: - typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01

ԿstateΪXCURRENT
flagsΪonly_sequential_access
LRU flagsΪ: moved_to_tail
ʾݿ龭ȫɨ裬ƵLRUˣʱܱage out

ѯ죨1116519flagõ
SQL> select class, flag, state, lru_flag from x$bh
2 where dbarfil = 11 and dbablk = 16519;

CLASS FLAG STATE LRU_FLAG
---------- ---------- ---------- ----------
1 524288 1 3

flagΪ524288Ҳǵ20λΪ1Ϊִˡonly_sequential_access
flagУÿλº壺
bit bit
0 buffer_dirty 14 stale
1 notify_after_change 15 deferred_ping
2 mod_started 16 direct_access
3 block_has_been_logged 17 hash_chain_dump
4 temp_data 18 ignore_redo
5 being_written 19 only_sequential_access
6 waiting_for_write 20 prefetched_block
7 multiple_waiters 21 block_written_once
8 recovery_reading 22 logically_flushed
9 unlink_from_lock 23 resilvered_already
10 down_grade_lock 25 redo_since_read
11 clone_being_written 29 plugged_from_foreign_db
12 reading_as_CR 30 flush_after_writing
13 gotten_in_current_mode

 鿴ȫ
zhouwf0726 :2007.03.30 13:07 ::: ( oracleϵṹ ) ::Ķ:(512) :: (0) :: (0)
===========================================================
Oracle System Change Number (SCN) Number(ת)
===========================================================

SCNǮOracleYϸᣬDBMSԄӾSoȥ۷efһ֡ һcommitrLGWRlog bufferredo log fileͬrҲԓP׵ SCNͬ뵽redo log file(wait-until-completed)ˮcommit transactionr ڽ׳ɹӍϢ֮ǰLGWRО֮ᣬtǿύɹĻؑӍϢ

҂ԲԃĿǰϵyµSCN

select dbms_flashback.get_system_change_number from dual;

ģ@eصSCNҲĿǰredo log fileµSCNo䛡 commitĽײŕSCNһcommiť͕redo log fileС

CHECKPOINT SCN PB

checkpointlĿľҪуbufferȵύ׌disktһlcrashҪ Mrecoveryrͱ횻ܶĕrgredo log fileSCN_ʼMrecovery@ ̘IǺMrg͛]Чʵġ

c춮commitһוřֻredo bufferredo log fileȣǁKRό ԓupdateblock(dirty block)ͬdisk datafileУ@Ǟ˜p^disk IOĿԒȡbatchķʽ롣

When a checkpoint occurs, Oracle must update the headers of all datafiles to record the details of the checkpoint. This is done by the CKPT process. The CKPT process does not write blocks to disk; DBWn always performs that work.

shutdown normal or shutdown immediate£Ҳ^clean shutdowncheckpointҲԄ|lKҰSCNo䛌ء lcheckpointrSCNĂطȥطcontrol fileȣһdatafile header

Control fileط

1.System checkpoint SCN ===========> (SYSTEM CHECKPOINT SCN in control file)

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
--------------------
292767

2.Datafile checkpoint SCN ===============> (DATAFILE CHECKPOINT SCN in control file)

SQL> select name,checkpoint_change#
from v$datafile where name like '%users01%';

NAME CHECKPOINT_CHANGE#
----------------------------------- --------------------
/u02/oradata/OMFD1/users01.dbf 292767

3.Stop SCN ======================> (STOP SCN in control file)

SQL> select name,last_change#
from v$datafile where name like '%users01%';

NAME LAST_CHANGE#
----------------------------------- ------------
/u02/oradata/OMFD1/users01.dbf

datafileread-write mode£Last_change#һNULL

һطdatafile header

4.Start SCN ================================> (DATAFILE HEADER)

SQL> select name,checkpoint_change#
from v$datafile_header where name like '%users01%';

NAME CHECKPOINT_CHANGE#
----------------------------------- --------------------
/u02/oradata/OMFD1/users01.dbf 292767

ʲNCONTROL FILEҪ֞ɂط(SYSTEM CHECKPOINT SCN,DATAFILE CHECKPOINT SCN ?) һtbsOread-onlyrSCNYֹͣ˕rDATAFILE CHECKPOINT SCNDzf׃ģ wSYSTEM CHECKPOINT SCNsȻfǰM
ԣ@ǞʲNҪքeڃɂطSCN

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

shutdown databaseᣬSCNlʲN׃

҂԰Yώ_mount mode

select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
--------------------
293184

select name,checkpoint_change#,last_change# from v$datafile where name like '%user%';

NAME CHECKPOINT_CHANGE# LAST_CHANGE#
----------------------------------- -------------------- --------------
/u02/oradata/OMFD1/users01.dbf 293184 293184

Կcontrol fileеSCNλöͬע˕rstop scnNULLǵstart scn

҂Ҳԃdatafile header SCN:

select name,checkpoint_change# from v$datafile_header where name like '%users01%';

NAME CHECKPOINT_CHANGE#
----------------------------------- --------------------
/u02/oradata/OMFD1/users01.dbf 293184

clean shutdown rcheckpointMУKҴ˕rdatafilestop scnstart scnͬ ȵT_YώrOraclezdatafile headerеstart scnʹcontrol fileеdatafilescnǷͬ ͬzstart scnstop scnǷͬȻͬYώ͕_tҪrecovery... ȵYώ_ᣬcontrol fileеstop scn͕֏͞NULLֵ˕rʾdatafileopenģʽˡ

SHUTDOWN (shutdown abort)tmountYώᣬlFstop scnKǵλõscn ǵNULL@ʾOracleshutdownr]Mcheckpoint´_CMcrash recovery

crash recovery

Mroll forward(redo log fileЏĿǰstart SCN_ʼύ֮)
ُroll back segment rollbackδ(dead transaction)

zcontrolfileеSCNdatafile headerSCN

select 'controlfile' "SCN location",name,checkpoint_change#
from v$datafile where name like '%users01%'
union
select 'file header',name,checkpoint_change#
from v$datafile_header where name like '%users01%';

SCN location NAME CHECKPOINT_CHANGE#
-------------- ----------------------------------- --------------------
controlfile /u02/oradata/OMFD1/users01.dbf 293188
file header /u02/oradata/OMFD1/users01.dbf 293188

crash recovery vs media recovery

YώrlFSTOP SCN = NULLʾҪMcrash recoveryYώrlFdatafile headerSTART SCN 춃CONTROLFILEDATAFILE SCNʾҪMMedia recovery

STOP SCN equal NULL ==> NEED CRASH RECOVERY
DATAFILE HEADER START SCN not equal CONTROLFILE SCN ==> NEED MEDIA RECOVERY

RECOVERY DATABASE ɷNҊ}

1) RECOVER DATABASE UNTIL CANCEL ==> OPEN DATABASE RESETLOG

==> DATAFILE HEADER SCNһСCONTROLFILEDATAFILE SCN

MRESTORE DATAFILEtԓRESTOREDATAFILE HEADER SCNһСĿǰCONTROLFILEDATAFILE SCN˕ro
_Yώ죬Mmedia recovery~~archive logֱԓdatafile headerSCN=current scn

restore datafileᣬmount databaseȻȥzcontrolfile and datafile headerSCN

select 'controlfile' "SCN location",name,checkpoint_change#
from v$datafile where name like '%users01%'
union
select 'file header',name,checkpoint_change#
from v$datafile_header where name like '%users01%';

SCN location NAME CHECKPOINT_CHANGE#
-------------- ----------------------------------- --------------------
controlfile /u02/oradata/OMFD1/users01.dbf 313551
file header /u02/oradata/OMFD1/users01.dbf 313401

2) RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE; ===> OPEN DATABASE RESETLOG

==> DATAFILE HEADER SCNһCONTROLFILEDATAFILE SCN

ֻijTABLEDROP]ƉYώwYϽY߀INCOMPLETE RECOVERYQ ijTABLESPACE OR DATAFILEDROPnYѽƉģĿǰCONTROL FILEѽ] ԓDATAFILEYӍֻRESTORE DATAFILEȻMINCOMPLETE RECOVERYҲoȻرDROPDATA FILE

ֻRESOTRE ֮ǰݵCONTROL FILE(e^DROP DATAFILE Metadata˕r߀)^RESTOREC CONTROL FILE ˕rOraclelFCONTROL FILEȵSYSTEM SCNСĿǰDATAFILE HEADER SCNҲĿǰLOG FILEȵSCN ˕rͱʹRECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILEDROP DATAFILE OR DROP TABLESPACE֮ǰSCN


һNrǣfһҵCONTROL FILEzʧˣҲ@NʽȻأՈMULTIPLEXING

 鿴ȫ
zhouwf0726 :2007.03.25 09:58 ::: ( oracleϵṹ ) ::Ķ:(815) :: (0) :: (0)
===========================================================
selectredo---oracleӳٿ
===========================================================

ʱִselectʱҲܻredoһԭoracle

 鿴ȫ
zhouwf0726 :2007.03.19 14:56 ::: ( oracleϵṹ ) ::Ķ:(731) :: (3) :: (0)
===========================================================
Oracleȫļ(ת)
===========================================================
OracleһֱȫļоOracle9i Rlease2֮ʱOracleݿȫļѾdzOracle TextʹOracle9i߱ǿıܻıOracle TextOracle9iõƣOracle8/8iOracle interMedia TextʹOracle TextԷЧñ׼SQLıµĿ߻ӦóչӦó򿪷ԱκʹıOracleݿӦóгOracle TextӦ÷ΧӦóпעֶΣҲʵ漰ĵʽ͸׼ĴĵϵͳOracle Text֧Oracleݿֵ֧ĴԵĻȫܡ
Ȼݿⶼ֧ȫļOracleⷽɫġOracleָʽĵWord,Execl,PowerPoint,Html,PDFȵȡʹҲźĵطOracle TextʹúֹINSO_FILTERNULL_FILTERִʷBASIC_LEXER, CHINESE_VGRAM_LEXERCHINESE_LEXERܼݵıĵTXT,RTF
 鿴ȫ
zhouwf0726 :2007.03.05 10:38 ::: ( oracleϵṹ ) ::Ķ:(538) :: (0) :: (0)
===========================================================
ORACLE DSI(ת)
===========================================================

ʲôDSI?.
ͰΪһĿ.

DSIData Server Internalsд,Oracle˾ڲѵOracleۺ󹤳ʦʹõĽ̲.
ĵͨӡ:Oracle Confidential:For internal Use Only.

ԴĵͨΪOracleֹ,ΪһЩԭ,ЩĵҲ.
Դ
GoogleҵһЩϢ.ǹκDSI̲ĵĽ,ȡ൱е.

ܶΪĵ֮,ҲDzʵ.
ڳѧ,ЩĵDz˵,Ϊ↑ʼԼ,Щ̲ҪĶ߾൱ļ;ѧӦôӻѧ,û֮,Ҳѧһ,ͿĶЩĵ.

DSIԳƵOracleռѵ̳.
ͳͳΪ:Oracle Confidential.

,ЩDSI̷̳׷,ƼһЩӸ:

DSI301-308 + DSI401
DSI401~DSI403
DSI401e + DSI404
DSI405 Performance Tuning
DSI408 Real Application Clusters Internals

DSIȻǺý̲,ݼ,ûĻDzʺĶ,dzѧ,Щ̲ķûж洦.

ԵЩʱ,ȤĿղ,ϾʱԷ,мɸ¥ӵ,ѧϰһҪλ.

ʵOracleĹٷĵѧϰõĿʼͻ̳.TahitiվӦþѧϰĵط.


zhouwf0726 :2007.01.22 17:58 ::: ( oracleϵṹ ) ::Ķ:(697) :: (0) :: (0)
===========================================================
LMTDMT´洢ͬ(ת)
===========================================================
赱ǰݿDB_BLOCK_SIZEΪDKDDL趨INITIALΪT,MINEXTENTSΪS,PCTINCREASEΪP,NEXTΪN
ĵDB_BLOCK_SIZE=8K

MIN_EXTENTǴ0
PCT_INCREASE
INITIAL:ʱ趨INITIAL趨ֵ2*DʵINITIAL=CEIL(T/D)*Dʱ趨INITIAL趨ֵСڵ2*DʵINITIALֵΪ2*D
磺EXP-1
create table test1
(
a number
)
tablespace system--ֵռ
storage
(
initial 1k
next 1k
minextents 4
pctincrease 20
);

УʵINITIALΪ16K

EXP-2
create table test2
(
a number
)
tablespace system--ֵռ
storage
(
initial 100k
next 100k
minextents 4
pctincrease 20
);
УʵʵINITIAL=CEIL(100/8)*8=104

NEXT
S=1,ʵʵNEXT=CEIL(INITIAL*(1+P/100)/N)*N,INITIALΪʵֵ趨ֵ
S>1NEXTʵֵΪS=1µĵS+1extentֵ
EXP-3
create table test1
(
a number
)
tablespace system--ֵռ
storage
(
initial 100k
next 100k
minextents 1
pctincrease 20
);

ڱУʵʵNEXT=CEIL(104*1.2/8)*8=128
EXP-4
create table test1
(
a number
)
tablespace system--ֵռ
storage
(
initial 100k
next 100k
minextents 4
pctincrease 20
);

ڱУʵʵNEXT=192
ڶEXTENT=INITIAL=104

SQL> select ceil(104*1.2/8)*8 from dual;3EXTENT

CEIL(124.8/8)*8
---------------
128


SQL> select ceil(128*1.2/8)*8 from dual;4EXTENT

CEIL(128*1.2/8)*8
-----------------
160

SQL> c/128/160
1* select ceil(160*1.2/8)*8 from dual;5EXTENT
SQL> /

CEIL(160*1.2/8)*8
-----------------
192

ڱУNEXT=192K


ڴռʹʱstorageбstorageȼڱռIJʱûָstorageoracle̳бӦıռĴ洢

INITIAL
LMT£oracleڱռһ趨NEXT, PCTINCREASE, MINEXTENTS, MAXEXTENTSڶһ趨⼸ڽʱ򣩡ڶһ趨⼸⼸εINITIALֵʱεINITIALֵ趨ֵͨõ
LMTռ䲻UNIFORM
EXP-5
create table test
(
a number
)
storage
(
initial 100k
next 100k
minextents 4
pctincrease 100
);

ñڱռΪعģʵʵINITIALΪ832K
LMT£extent64KΪλģʼextentһΪ64KڱУMINEXTENTSΪ4ǰĸextentʵʴСֱΪ
104K-104K-208K-416K(PCTINCREASE 100οDICTINITIALļ㷽)
ԣINITIAL=104+104+208+416=832KLMTµEXTENTСλ64K832պ64ıoracle13extentsINITIALõINITIAL64Koracleᰴһ·㲢䣺
CEIL(INITIAL/64)*64

LMTUNIFORM(UNIT SIZE=16K)
EXP-6
create table test
(
a number
)
tablespace t_uniform
storage
(
initial 100k
next 100k
minextents 4
);

INITIAL=104+104+104+104=416ʱoracle26extenttest

LMT£PCTINCREASE, NEXTڣ޸ģ

http://space6212.itpub.net/post/12157/230765


zhouwf0726 :2006.12.28 11:46 ::: ( oracleϵṹ ) ::Ķ:(581) :: (3) :: (0)
===========================================================
Oracle9iԶֶοռƷֶδ洢(ת)
===========================================================

Ϊ˱ǿݿĵλOracleļ汾һֱڴµĻԱĴ洢м򻯺ͷֿ顣Oracle8iʼOracleʼtablespaceڲԶһǿĵطԭعtablespace߼дLMTLMTOracletablespaceϢֵıռƳȥֱӽ䱣浽tablespaceOracle9iѾΪһʵı׼Ϊֵĸ

ռĵڶҪǿԶֶοռASSM״γOracle9iASSMбfreelistλͼȡһƵ飬ܹѸЧع洢չʣ飨free blockܹƷֶδ洢ʡ

ռַ

ǴӱȽֿռʼ

عtablespaceLMTLMTͨEXTENT MANAGEMENT LOCALӾӵtablespaceĶ䷨ʵֵġԭֵtablespaceDMTͬLMTὫչԶOracle DBAᱻָչСNEXT洢ԭΨһNEXTMINEXTENTSһڱ񴴽ʱ

ԶοռASSMASSMtablespaceͨSEGMENT SPACE MANAGEMENT AUTOӾӵtablespaceĶ䷨ʵֵġͨʹλͼfreelistȡͳбfreelistASSMtablespaceὫfreelistĹԶȡΪıָPCTUSEDFREELISTSFREELIST GROUPS洢

OracleֵĵطǣռķǿѡԣOracleֿԻʹøϸķֻҪԸĻҪע⣬λͼιOracle9iǿѡģֻtablespaceһʵ֣һʮҪġԭеϵͳܹʹôͳfreelist

λͼfreelistսͳĿռ

λͼfreelistʹͳĿռ֮ǰǿλͼfreelistʵֵġһʹοռԶtablespaceʼ


create tablespace
 asm_lmt_ts
datafile
 'c:oracleoradatadiogenesasm_lmt.dbf'
size
 5m
EXTENT MANAGEMENT LOCAL -- Turn on LMT
SEGMENT SPACE MANAGEMENT AUTO -- Turn on ASSM
;

һ㶨tablespaceôܹʹøַ׵رƶµtablespaceҽдĴ룺


 
create table
 new_cust
tablespace
 assm_lmt_ts
as
 select * from customer;
 
alter index cust_name_idx rebuild tablespace assm_lmt_ts;

Ҫע⣬䵽tablespaceԺڶPCTUSEDֵᱻԣOracle9iʹλͼԶعtablespacefreelistLMTtablespaceڲıԣNEXTչӾǹʱģΪɱعtablespaceǡǣINITIALȻҪģΪOracleǰ֪ʼصĴСASSMԣINITIALСֵ顣

һܵķOracle˵ǷõķһЩۡڴݿĶûܺʹ洢ϵľ޴ͬ

PCTFREE

PCTFREEָݿʣռСģһռΪеչPCTFREEõòõSQLĸͿܵ´ƬͶ

ڸձʱ򻹺Сںչ£PCTFREEþԵҪˡϵͳͨPCTFREEóɵ95͸OracleҪΪнչ95οռ䡣

PCTUSED

PCTUSEDȷã̫СˣᵼSQLܵļ½ʣռ䲻Ǻܶ࣬ôSQLĹоͻI/OΪʹõOracleᱻѸٵӼ˵ĽǶûȷPCTUSEDᵼʣռҪȱеƽС£OracleγԴfreelistȡ顣γԺOracleˮλΪڳµݿ顣

Oracle9iASSMPCTUSEDͲٿƱݿֵˣOracleжȷʲôʱ㹻ʣռõfreelist

˱عtablespaceASSM֮Oracle9iPCTUSEDFREELISTSFREELIST GROUPSȲǵڱʱOracleDzϢ


SQL> create table
2 test_table
3 (c1 number)
4 tablespace
5 asm_test
6 pctfree 20 pctused 30
7 storage
8 ( freelists 23 next 5m ) ;
Table created.

㲻ǵôASSMıعtablespaceԵκΪPCTUSEDNEXTFREELISTSֵָĻ⽫һʮص⡣.

ʹASSMһ޴ǣλͼfreelist϶ܹỺæȴbuffer busy waitĸOracle9iǰİ汾һص⡣ϸԡ

æȴ

ûжfreelistʱÿOracleڱͷһݿ飬ʹõʣ飬ΪκSQLṩݿ顣ݻڵݿڱһDML޷ʹõʱ򣬻æȴͻᷢҪ뵽ͬһʱЩͱǿƵȴͬʱOracleͬʱʣ飬һһ

ASSM֮OracleDMLܣΪͬһλͼIJֿͬԱͬʱʹãѰʣռĴлOracleIJԽʹλͼfreelistзֶͷԴᣬܻóIJ

ASSMľ

ASSMʾ˼ԲܹOracle DBAĹOracle9iλͼֶιһЩԵģ

һDBA֮޷tablespaceڲĶĴ洢Ϊ

ͶܹʹASSMұΪLOB͵ı񴴽tablespace

㲻ܹʹASSMʱtablespaceʱʱֶεĶġ

ֻбعtablespaceܹʹλͼֶι

ʹóDMLINSERTUPDATEDELETEȣʱܻϵ⡣


zhouwf0726 :2006.12.27 17:26 ::: ( oracleϵṹ ) ::Ķ:(463) :: (0) :: (0)
===========================================================
Latch freeȴ¼(ת)
===========================================================

n ÿеļ¼ҪdumpһЩݿÿеļ¼DumpĸļУnrowǿеļ¼ȻexptruncateڱвҪÿбļ¼Ȼʹalter table table_name minimize records_per_blocktruncateimpݼɡ

n ԿǼٿĴСoracle9iʼݿֲ֧ͬĿС統ǰСΪ16kԽƶСΪ8kıռСҲȫɨɸӰ졣ңСҲʹùӡ

oracle9iR2ʼҲͨ_spin_countֵȵ鵼µcache buffers chains latcháҲͨ_db_block_hash_bucketshash bucketoracle8iʼһ㲻ְ취ʵҪã뱣֤_db_block_hash_bucketsֵΪһoracleҲԶôṩֵСֵ

Cache buffers chains latchԭ DD hash chain

ݿܷ䵽ͬһhash bucketϡЩһ(hash chain)һϵͳУһhash bucketпϰٸݿ顣һhash chainij飬Ҫcache buffers chains latchеĽС̫ʹlatchʱӦӣܵcache buffers chains latchʧܡ

oracle8.0֮ǰhash latchhash buckethash chain֮1:1:1Ĺϵ׼һhash chainijȣһlatchҪݿͨIJѯ֪һhash chainϵݿһԣһhash chainϳ10ݿΪ̫ˡ

Select hladdr, count(*)
from x$bh
group by hladdr
order by 2;

oracle8ihash latchhash bucket֮Ĺϵ1:mͺѼijhash chainijˡֻܼһhash latchҪٸݿ顣һhash latchͬʱhash chainǸѯĽÿhash latchҪݿжһhash latchݿǷ֮ǰҪȵõhash latchhash bucketıֵУÿhash latch125hash chainҪÿhash chainϲ10ݿ飬ÿhash latchݿ鲻ܳ1250ͨ_db_block_hash_bucketshash bucketĿԼÿhash chainϵݿΪhash buckethash chain֮1:1Ĺϵoracle8iʼһ㲻ô

_db_block_hash_buckets = 128021
_db_block_hash_latches = 1024
ratio = 128021 / 1024 = 125

Cache buffers lru chain latch

hash chainͷͬһббָбlrulruwckpt-qLrulruwбʲô¶ݻLruб˲ͬ״̬Ļ飬lruw׳Ƶġֻݿ顣LrulruwбǻģǺϳһ(a working set)ÿһcache buffers lru chain latch仰˵ݻйĸcache buffers lru chain latchĸġͨڲͼx$kcbwds (kernel cache buffer working sets descriptors)֪ĸע⵽x$kcbwds set_latcֵv$latch_childrenaddrС

lru + lruw = a working set

Select set_id, set_latch 
from x$kcbwds
order by set_id;

set_id set_latc
---------- --------
1 247e299c
2 247e2e68
3 247e3334
4 247e3800
5 247e3ccc
6 247e4198
7 247e4664
8 247e4b30

select addr
from v$latch_children
where name = cache buffers lru chain
order by addr;

addr
--------
247e299c
247e2e68
247e3334
247e3800
247e3ccc
247e4198
247e4664
247e4b30

һҪҿõĻռʱҪlruб̨DBWnlruwбеĸɾƵlruбУҲὫlruеƵlruwбСһнϵκβҪȻcache buffers lru chain latch

ݻУͬСĻkeepغrecycle