·¢²©ÎÄ
»¶Ó­ÄãµÄµ½À´£¬×£Ä㹤×÷˳Àû£¬ÉíÌ彡¿µ£¡£¡£¡

amlu.blog.chinaunix.net

love yizhi   
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º119941
  • ²©ÎÄÊýÁ¿£º111
  • ²©¿Í»ý·Ö£º4210
  • ²©¿ÍµÈ¼¶£ºÉÏУ
  • ×¢²áʱ¼ä£º2007-04-21 15:22:33
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
ÉîÈëѧϰBuffer Cache (2008-04-23 14:38)

 

Buffer CacheÄÚ²¿

Buffer cacheÊÇΪÁËʵÏÖÏû³ýƵ·±µÄÊý¾Ý¿éÎïÀíI/O£¬´Ó¶øÌá¸ß²¢·¢·ÃÎʺÍOLTPÓ¦ÓóÌÐòµÄÐÔÄÜ¡£Oracle buffer cacheÄܹ»£º
Êý¾ÝÔÚÄÚ´æÖпÉÓ㺼õÉÙÎïÀíI/O
Ò»Ö¶Á£ºÊý¾ÝÔÚÄÚ´æÏàͬµÄ¿é¿ÉÓµÓжà¸ö°æ±¾
²¢·¢¿ØÖÆ£ºÍ¨¹ýÀûÓø÷ÖÖÀàÐ͵ÄËøÀ´¿ØÖƲ¢·¢·ÃÎÊͬһ×ÊÔ´
ÊõÓï
data buffer header listµÄ½á¹¹ÊÇÓùþϣͰHash buketsÀ´¹¹½¨µÄ£¬Ëü°´ÕÕ<rdba,class>·Ö×é¡£×¢Ò⣬block classºÍblock type²»Í¬¡£

Hash chain£¬ÔòÊÇÔÚÿһ¸öHash buketÄÚ²¿£¬Î¬»¤¶à¸ödata buffer headerµÄÊý¾Ý½á¹¹¡£

LRUÔòÊÇÒ»ÖÖÓÃÓÚѰÕÒfree bufferµÄ»úÖÆ¡£

(Rdba = relative data block address)

LRUºÍbuckets/chains²»Í¬£º
      ÓÃÓÚѰÕÒijһָ¶¨µÄhash buckets/chains
      LRUÌṩѰÕÒ¿ÕÏÐbufferµÄ·½·¨£¬´Ólistβ²¿¿ªÊ¼ÕÒ¡£
Buffer headerÄÚÈÝ¿ÉÒÔͨ¹ý·ÃÎÊX$BH±íÀ´·ÃÎÊ¡£
Hash Buckets and Chains

ĬÈϵÄhash bucketsÊýÁ¿ = DB_BLCOK_BUFFERS ¡Á 2

Õâ¸ö²ÎÊýÊÇÖ¸¶¨buffer cacheÀïÃæµÄ¿éÊý£¬Ëü¡Áblock size¾ÍÊÇbuffer cacheµÄ´óС¡£µ«ÊÇÔÚOracle10gÀïÃæ£¬ÄÚ´æÄ¬ÈÏÊÇ×Ô¶¯¹ÜÀíµÄ£¬ËùÒÔÕâ¸ö²ÎÊýÒ»°ãÊÇ0£¬¶øÃ»Óвο¼¼ÛÖµ¡£

Ëü¿ÉÒÔͨ¹ýÄÚ²¿²ÎÊý_db_block_hash_bucketsÀ´ÖØÐ´£¬ÔÚÎҵIJâÊÔϵͳÖУ¬¸Ä²ÎÊýΪ£º
_db_block_hash_buckets   131072 = 1G
ÿ¸öHash bucketsÀïÃæ°üº¬Ò»¸ödata buffer header chain£¬°´Ò»×éÒ»×é<rdba,class>ÅÅÁС£
ÿ¸öHash bucketsÓµÓÐÒ»¸öcache buffer chain latch£¬ÓÃÓÚ¿ØÖƲ¢·¢·ÃÎÊ¡£
ÈçºÎ¶Ôhash chainµÄ·ÃÎʶ¼±ØÐë±»cache buffer chain latchËù±£»¤¡£Hash chain±¾Éí¸üÐÂÊÇͨ¹ýÆÕͨµÄÁ´±í»úÖÆ¡£¾¡¹Üÿ´Î·ÃÎʶ¼±ØÐë¼Ólatch£¬µ«ÊÇlatchºÍbuckets²¢²»ÊÇ1 to 1¶ÔÓ¦¹ØÏµ£¬Ä¬ÈϵÄֵΪInitial = buffers / 128£¬Èç¹ûËüÌ«µÍ£¬¿ÉÒÔµ÷Õû¡£
ת´¢»º³åÇøÍ·£º
Alter system set events ¡®immediate trace name buffers level 1¡¯;

ÎÒµ¼³öÁËÒ»¸ö28MµÄtraceÎļþ£¬Êµ¼Ê¾ÍÊÇÒ»¸öÒ»¸öµÄBH£¬ÄÚÈݽÚÑ¡ÈçÏ£º
BH (0x75bf6e40) file#: 5 rdba: 0x015ad936 (5/1759542) class: 1 ba: 0x75b36000
ÎļþºÅ5 ¿éµØÖ·0x015ad936 ÀàÐÍ 1
set: 3 blksize: 8192 bsi: 0 set-flg: 0 pwbcnt: 0
dbwrid: 0 obj: 52661 objn: 52661 tsn: 6 afn: 5
hash: [7f1e4bd8,7f1e4bd8] lru: [70ff2ce0,79404190]
lru-flags: hot_buffer
ckptq: [NULL] fileq: [NULL] objq: [70ff2d48,6d3e46b8]
st: XCURRENT md: NULL tch: 0
flags: gotten_in_current_mode block_written_once redo_since_read
LRBA: [0x0.0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
BH (0x767ed150) file#: 2 rdba: 0x00803c80 (2/15488) class: 38 ba: 0x765f2000
set: 3 blksize: 8192 bsi: 0 set-flg: 0 pwbcnt: 0
dbwrid: 0 obj: -1 objn: 0 tsn: 1 afn: 2
hash: [7f1e4c08,7f1e4c08] lru: [6d3e0c30,6a7f9a58]
ckptq: [6a7f9a08,6cbfa3b8] fileq: [6a7f9a18,6d3e0bf0] objq: [6d3e0c98,6a7f9ac0]
st: XCURRENT md: NULL tch: 1
flags: buffer_dirty gotten_in_current_mode redo_since_read
LRBA: [0x5a1.9138.0] HSCN: [0x0.17e0c7d] HSUB: [4]
¡£¡£¡£
BH¾ÍÊÇbuffer header£¬ÎļþÖй²ÓÐ48723¸öBH£¬ËµÃ÷ÎÒµÄbuffer header list¹²Î¬»¤48723¸öbuffer¿éµÄÐÅÏ¢¡£ÀïÃæ±êÖ¾¿ÉÒԲο¼DSIÀ´Á˽⡣
Overview of the Buffer Cache

buffer header°üº¬ÈçÏÂÐÅÏ¢£º
      BufferÔÚÄÚ´æÖеĻù±¾µØÖ·
      hash chainµÄÐÅÏ¢
      others.ËüÔÚÁ´±íÖеÄλÖã¬ÖîÈçLRU,LRUW,CKPTQºÍÆäËü¡£
      µ±Ç°Óû§ºÍµÈ´ýÕßÐÅÏ¢
      ¸÷ÖÖ¶¯×÷ºÍ״̬µÄ±êÖ¾
      ¸÷ÖÖCRÇøÓò£¬ÖîÈçredo rba£¬ÎªÊµÏÖ¶àÖÖ²Ù×÷
Buffer descriptor´æÔÚÓÚPGA£¬Ëüʵ¼ÊÊôÓÚclient¡£Ëü´æ´¢µÄÏûÏ¢ÊÇclientÌṩµÄ¡£
Buffer Header

      ÃèÊö»º³åÇøµÄbuffer
      ÔÚTSN, RDBA ×öhashËã·¨£¬Îªhash buckets»ñȡһ¸ö¹Ì¶¨µÄÊý×Ö
      ±»Éϲã×é¼þ×öΪһÖÖÌáʾʹÓÃ
BuffersµÄ״̬°üÀ¨£º
      FREE: ¿É±»ÖØÓÃ
      READING: ÕýÔÚ´Ó´ÅÅ̶ÁÈ¡µ½»º³åÇø
      EXLCUR: µ±Ç°buffer
      SHRCUR: µ±Ç°buffer
      IRECOVERY: BufferÔÚ½øÐÐʵÀý¼¶»Ö¸´
      MRECOVERY: BufferÔÚ½øÐнéÖʻָ´
BuffersÄܹ»±»ÇëÇóΪNULL, NEW, CR, CRX, SHR, ºÍ EXL ģʽ¡£
Multiple Buffer Pools

Buffer pool ÓÐÈýÖÖÀàÐÍ£º

Default£ºÄ¬ÈϵijØ

Recycle£º´ó¶ÔÏ󳨣¬µ±Êý¾Ý¿â¶Áȡijһ´ó¶ÔÏóʱºò£¬¿ÉÄܵ¼ÖÂÆäËü¶ÔÏóµÄbufferÀÏ»¯£¬ËùÒÔ¿ÉÒÔ°Ñ´ó¶ÔÏóµÄ¶Áȡָ¶¨µ½recycle³ØÖУ¬±ÜÃâÓ°ÏìÆäËü¶ÔÏó¡£Õâ¸ö³ØÀïĬÈÏΪCR¿é¡£

Keep£ººÍrecycleÏà·´£¬°Ñ³£ÓöÔÏóµÄbuffer³¤¾ÃkeepÔÚ³ØÖС£ ͨ¹ýDB_KEEP_CACHE_SIZE£¨BUFFER_POOL_KEEP£©²ÎÊý¿ÉÒÔÖ¸¶¨´óС¡£

SQL> create table test (n number) storage (buffer_pool keep);

SQL> alter table test storage (buffer_pool recycle);

¹«Ê½£º

Buffers in default pool = Total number of buffers ¨C (Buffers in recycle pool + Buffers in keep pool)

¿ÉÒÔͨ¹ýV$SEGSTAT_NAME, V$SEGSTAT, ºÍ V$SEGMENT_STATISTICSÕâ¸öÈý¸öÊÓͼ½øÐжμ¶±ðµÄ¼à¿Ø¡£
LRU

Lru°üº¬Á½¸ölist£º
LRUW£ºLRU Write list£¬Ò²¾ÍÊÇdirty list£¬Î¬»¤×ŵ±Ç°µÄÔà¿é¡£
LUR£º×î½ü×îÉÙʹÓÃ
Ò»¸öbufferÖ»Äܱ»ÆäÖÐÒ»¸ölist cache¡£
Multiple LRU lists

LRU list ÓÉÄÚ²¿²ÎÊý_db_block_lru_latches¿ØÖÆ£¬ÎҵĻ·¾³ÏÂΪ 8¡£ÒÔǰ£¬Ö»ÓÐÒ»¸ölistÔÚcacheÀï¡£´ÓOracle8¿ªÊ¼£¬CKPTQ(checkpoint queues) ºÍFQ (file queues)±»ÒýÈë¡£Ëæ×ÅÒì²½DBWnÒýÈ룬listµÄ¹ÜÀíÒ²ËæÖ®±ä»¯¡£ÏÖÔÚÕýÈ·³Æºô£¬Ó¦¸ÃÊÇ¡°working sets,¡±£¬°üº¬¼¸¸ö²»Í¬µÄLRU lists¡£Ã¿¸öLRUÊÇÊÜcache buffers lru chain latch,±£»¤µÄ¡£

LRU Lists

ÿһ¶ÔLRU/LRUW³ÆÎªÒ»¸öworking set£¬bufferͨ¹ýÑ­»·Ê¹Óõķ½Ê½·ÖÅäµ½ÕâЩworking setÖС£Ôڸ߸ºÔصĶÁÈ¡ºÍ¹ý¶àµÄLRUɨÃèÏ£¬LRU latch¿ÉÄܳÉΪһ¸öÆ¿¾±¡£´ËÍ⣬LRU latchÔÚ¶à·²¢·¢ÏµÍ³ÖÐÒ²²»ºÃºâÁ¿¡£Ó¦Îª¶à¸öCPU¿ÉÄܶ¼»áÇëÇóµ¥¶ÀµÄLRU latch¡£Í¨¹ýÉèÖÃÄÚ²¿²ÎÊý_DB_BLOCK_LRU_LATCHES£¬¿ÉÒÔ¸ÄÉÆLRUµÄ¾ºÕùÇé¿ö¡£Ã¿¸öLRU latch¶¼ÊÇÒ»¸öworking set¡£Ã¿¸öworking setÓµÓÐ×Ô¼ºµÄÁ´±í£¬¹ÜÀíÊôÓÚËüµÄbuffer¡£Èç¹ûÒ»¸ölatch²»ÄÜ·ÃÎÊ£¬ÄÇô¾Í»áתÏòÏÂÒ»¸ö£¬Ö±µ½»ñµÃÒ»¸ö³É¹¦µÄlatch¡£ÔÚʼþ¹ÜÀíÖУ¬Èç¹ûÇëÇólatchʧ°Ü£¬ÄÇômiss¾Í»áÔö¼Ó¡£LRU latchµÄÇëÇó×î³õÊÇNOWAITģʽ£¬Èç¹ûÔÚËüÇëÇóÍêËùÓÐlatch¶¼ÈÔȻûÓгɹ¦ºó£¬¾Í»á±äΪWAITģʽ¡£

½ø³Ì·ÃÎÊËùÓеÄlatchÖ±µ½Ëü»ñµÃÒ»¸öLRU latch¡£ÔÚ¶à¸öDBWRµÄ»·¾³Ï£¬Ã¿¸öDBWR¶¼ÓÐ×Ô¼ºµÄLRU/LRUW£¬Í¨¹ýÉèÖÃdb_writer_processes¿ÉÒÔ¸ü¸ÄDBWRµÄÊýÄ¿¡£

Working Sets
Working Sets = DBWRs x Maximum number of buffer pools (8).

Ëü°üº¬ÈçÏÂlist£º
LRU£º
LRU-W£º¼Ç¼dirty buffer
LRU-P£ºPing list£¨RAC£©
LRU-XO:£º¶ÔÏóÖØÓÃlist£¬Õë¶ÔdropºÍtruncate
LUR-XR£º¿éÖØÓÃlist
Thread CKPT queue£ºÏß³ÌCKPT buffer
File CKPT queue£ºÎļþCKPT buffer queue
Recovery CKPT queue£ºÖ´Ðлָ´µÄ¿é
Buffer Get

ÇëÇóÒ»¸öbuffer£¬Ê×ÏÈ»áÌî³äÒ»¸öbuffer descriptor£¬²½ÖèÈçÏ£º

      Ìî³äÒ»¸öbuffer descriptor
      Ö¸¶¨bufferµÄÕ¼ÓÐģʽ
      »º´æÊý¾Ý¿é
µäÐ͵Äbuffer descriptor±£»¤ÈçÏÂÐÅÏ¢£º
      Full RDBA
      Class
      Object#
      Ö¸Ïòbuffer headerµÄÌáʾ
      Pin (buffer state object with which to associate it)
      Examination function (if CR or CRX)
      If multiblock read, then the number of buffers to be read
Getting Current Buffers

ѰÕÒcurrent buffers:
1.         Scan the hash chain to which the RDBA maps. ɨÃèhash chain£¬»ñÈ¡RDBA maps
2.         Ϊÿ¸öbufferµÄchain£º
-           ºöÂÔRDBA²»Æ¥ÅäµÄbuffer
-           µÈ´ýREADING buffer È»ºó·µ»ØËüÃÇ
-           Ìø¹ýCR (consistent read) buffers
-           Èç¹ûCUR (current) buffer ´¦ÓÚcompatibleģʽ£¬Ôò¿ÉʹÓÃ
-           ·ñÔò£¬Èç¹ûÊÇCR״̬¶ÔÏó
                      ¨C¸´ÖÆÒ»¸öCR È»ºó ´´½¨Ò»¸öеÄEXLCUR ¸±±¾
                      ¨C »òÕߵȴýµ±Ç°µÄbufferÊÍ·Å
-                               Èç¹ûûÓÐÕÒµ½buffer£¬Ôò´ÓÓ²Å̶ÁÈ¡
2.         ¹ØÁªstate objectµ½buffer header
3.         ·µ»ØÖ¸ÏòÊý¾ÝÇøÓò
Buffer Management

      Buffers³õʼ»¯hashµ½ LRU-AUX list.

¨C                           BuffersµÈ´ý±»Ê¹ÓÃ

¨C                           λÓÚLRUβ²¿µÄBuffers ±»DBWRɨÃ裬¼ìÑéÄÜ·ñÇå³ý

      Ò»°ãÊ×ÏÈɨÃèLRU-AUX.

      ·ÖÅä¿ÕÏпռäºó£¬Òƶ¯µ½MAIN listµÄÖв¿.

      DBWR ɨÃè LRU-MAIN È»ºóÒÆ¶¯Ôà¿éµ½LRUW-MAIN.



write-outÒ»¸öÀÏ»¯µÄbufferµÄÁ÷³ÌÈçÏ£º
1.   Buffer×î³õÊÇÔÚLRU-AUX.
2.   ÒÆ¶¯µ½LRU-MAIN.
3.   ±»Ð޸ĺó(ÊÍ·ÅãÅ),ÒÆ³öLRUW-MAIN. DBWRÉÔºó°ÑËüÒÆ¶¯µ½LRUW-AUX.
4.   ³öÁе½I/O ²Û ͨ¹ý kcbbxsv£¨OracleÄÚ²¿³ÌÐòÄ£¿éÃû³Æ£©.
5.   Queue writes from I/O slots ͨ¹ý kcfqueuewr.
6.   дÈëdisk ͨ¹ýkcfdowr.
7.   Íê³É


Touch µÄÊýÁ¿

ÔÙ¿´Ö®Ç°µÄdump buffer header£¬Ä³Ò»¸öbhÆäÖеÄtchΪ50

BH (0x743edb00) file#: 6 rdba: 0x0182fcf1 (6/195825) class: 1 ba: 0x74206000

set: 3 blksize: 8192 bsi: 0 set-flg: 0 pwbcnt: 0

dbwrid: 0 obj: 52726 objn: 52726 tsn: 7 afn: 6

hash: [7f217f60,6d7e7070] lru: [723ea068,6afe2d20]

ckptq: [69ffa798,72ff67a8] fileq: [747e5498,6ebec9d0] objq: [733de6d0,677f7308]

st: XCURRENT md: NULL tch: 50

flags: buffer_dirty gotten_in_current_mode block_written_once

      redo_since_read

LRBA: [0x5a1.9bc8.0] HSCN: [0x0.17e16b4] HSUB: [2]

Ò²¿ÉÒÔͨ¹ýÈçÏÂsql²éѯij¸öbufferµÄtouchÊý

SELECT TCH FROM SYS.X$BH WHERE FILE#=5 AND DBABLK=195825;

µ±Ò»¸öbuffer±»touchµ½»º´æÖУ¬touchÊýÁ¿¾Í»áÔö¼Ó1¡£
Buffer Cache Fixed Tables

      X$KCBBF:     Buffer descriptor ״̬¶ÔÏóºÍ±êÖ¾
      X$KCBWH:   ÃèÊöwhere/why buffer getsµÄͳ¼Æ
      X$KCBSW:   why/where buffer getsµÄͳ¼Æ. Only WHY0 is used.
      X$KCBBMC:   Map count per buffer when _DB_BLOCK_CACHE_MAP is TRUE
      X$KCBBHS:   DBWR histogram statistics, enabled if _DB_WRITER_HISTOGRAM_STATISTICS is TRUE
      X$KCBBES:   DBWR event statistics.
      X$KCBWDS: Working set descriptor.
      V$WAITSTAT on X$KCBWAIT
      V$BUFFER_POOL on X$KCBWBPD
Buffer Cache Latches

Cache buffers chains

Ç°ÃæÒѾ­½éÉܹý£¬¿é±»hashΪһ¸öÁ´£¬»ùÓÚÒ»¶Ô<DBA,class>¡£Ã¿Ò»¸öchain±»Ò»¸ö×Ócache buffers chains±£»¤£¬·ÀÖ¹ÔÚɨÃè¹ý³Ì±»¸Ä±ä¡£
Cache buffers LRU chain

±£»¤LRUÁ´¡£½ø³ÌÐèÒª»ñµÃlatch£¬µ±ËûÃÇÐèÒªÒÆ¶¯bufferµ½Ä³¸öLUR setµÄʱºò¡£ÔÚOracle serverÀïÃæ£¬ËüÊÇ×ælatchÖ®Ò»¡£ÎªÁ˼õÉÙ¾ºÕù£¬¿ÉÒÔÉèÖöà¸ö_DB_BLOCK_LRU_LATCHES
Checkpoint queue latch

ÔÚ½ø³Ì°Ñbuffer·ÅÔÚcheckpoint queue֮ǰ£¬Ëü±ØÐëÈ·±£queueûÓÐÕýÔÚ±»Ê¹Óá£ÕâÓеãºÍLRUlist ÀàËÆ¡£


Buffer Cacheµ÷ÓÅ

µ÷Õûbuffer cache °üº¬ I/OºÍDBWRµ÷ÓÅ

      ½ÏºÃµÄ»º´æÃüÖÐÂÊ(Ò»°ã> 90%).

      Ïû³ýʹÓûº³åÇø¸ßËÙ»º´æÖ»ÒªÓпÉÄÜ.

      ʹÓÃÖ±½ÓI/O (direct loader, direct insert).

¨C     SORT_MULTIBLOCK_READ_COUNT

ͨ¹ýÒÔÏÂSQL¿ÉÒÔ»ñµÃ¶Ôbuffer cache sizeµÄ½¨Òé

SELECT size_for_estimate,buffers_for_estimate,estd_physical_read_factor,estd_physical_reads
FROM v$db_cache_advice t
WHERE NAME=
'DEFAULT' AND advice_status='ON' AND block_size=(SELECT Value FROM v$parameter WHERE NAME='db_block_size');

      ÓÐÁ½¸öÖ÷ÒªµÄʼþµ¼Ö´óÁ¿µÄwait timeºÍÐÔÄÜÆ¿¾±£º

¨C   Buffer busy waits

¨C   Free buffer waits

      Ò»°ãÊ×Ïȵ÷Õû×î¸ßµÄµÈ´ýʼþ.

select *
from   v$system_event
order by time_waited DESC


Buffer Busy Waits

¨C   ¶à¸ö»á»°¶ÁÈ¡ÏàͬµÄ¿é

¨C   ¶à¸ö»á»°µÈ´ý¸Ä±äÏàͬµÄ¿é

P3 ×Ö¶ÎÔÚV$SESSION_WAIT ÊÇÔ­Òòcode.

V$WAITSTAT ÏÔʾÿÖÖÀàÐ͵ĿéµÄwait.

X$KCBFWAIT ÏÔʾÿ¸öÎļþµÄwait



½¨ÒéµÄ·½·¨:

      ²éѯV$WAITSTAT ¹Û²ìwaits µÄ×ßÊÆ.

      ²éѯ X$KCBFWAIT ·¢ÏÖ×îæµÄÎļþ.

      ÁªºÏ½á¹û·¢ÏÖÊÇÄĸö¶ÔÏóæµ.

SELECT count, file#, name
  FROM x$kcbfwait, v$datafile
  WHERE indx +
1 = file#
  ORDER BY count

×îÓпÉÄÜ·¢ÉúµÈ´ýµÄ¿éÀàÐÍ:

¶Î Header

    Problem: ûÓÐ×ã¹»µÄfree lists ºÍ´óÁ¿µÄinserts£¨10g ASSMÓÐËù¸Ä½ø£©
    Solution: Ôö¼Ó¸ü¶àµÄfree lists ºÍ free lists ×é
    Problem: HWM ¾­³£±ä»¯
    Solution: Ôö´ó _BUMP_HIGHWATER_MARK_COUNT
    Problem: Extent size
̫С, ±íÔö¼ÓÌ«¿ì

    Solution:
Ôö¼Ó extent sizes

Data Blocks  

    Problem: ÿ¸öblockÐÐÌ«¶à

    Solution 1: ¼õÉÙrows£¬Í¨¹ý¸Ä±äpctfree/pctused

    Solution 2: ¼õС DB_BLOCK_SIZE

    Problem: Right-hand indexes µ¼Ö ²åÈëÏàͬµÄblock
    Solution:
ʹÓ÷´Ïòkey indexes »òÕßÖØ½¨ index

Free Buffer Waits

      ʲôʱºò·¢Éú:

µ±Òƶ¯Ôàbuffer¹ýÈ¥µÄʱºò£¬LRUW list ÂúÁË

DBWR ²»ÄÜÇå³ýLRUW ×ã¹»¿ì

      ½â¾ö·½·¨:

Ôö¼ÓÅúÁ¿Ð´µÄ´óС

Ìõ´ø»¯´ÅÅÌ, ʹµÃDBWR ¸ü¿ì

ʹÓÃÒì²½ I/O

¼õÉÙLRU listsÊýÁ¿£¨×öΪ×îºó°ì·¨£¬¿ÉÄܵ¼ÖÂlatch¾ºÕù£¬ÒòΪûÓÐ×ã¹»µÄlatch£©

³õʼ»¯²ÎÊý

ÏÂÃæÊÇÓ°Ïìbuffer cacheµÄÄÚ²¿²ÎÊý¡£

      _DB_BLOCK_HASH_BUCKETS: block hash bucketsµÄÊýÁ¿ (ĬÈÏÊÇDB_CACHE_SIZE/4)

      _DB_BLOCK_MAX_SCAN_CNT: ѰÕÒ¿ÕÏÐbufferµÄ×î´ó³¢ÊÔ´ÎÊý

      _DB_WRITER_SCAN_DEPTH: DBWRѰÕÒÔà¿éµÄµÄɨÃèÉî¶È

      _DB_BLOCK_CACHE_CLONE: È¡µÄʱºò£¬¸´ÖÆÒ»¸ö¸±±¾ (µ÷ÊÔÓÃ)

      _DB_BLOCK_CACHE_MAP: Map/unmap and track reference counts on blocks (for debugging purposes only)

      _DB_BLOCK_MAX_CR_DBA: Maximum allowed number of CR buffers per dba

      _DB_WRITER_HISTOGRAM_STATISTICS: Maintain DBWR histogram statistics in X$KCBBHS

      _DB_BLOCK_MED_PRIORITY_BATCH_SIZE: Percentage of write batch used for medium priority checkpoints

      _DB_BLOCK_HI_PRIORITY_BATCH_SIZE: Percentage of write batch used for high priority checkpoints

      _DB_PERCENT_HOT_DEFAULT: Percent of default buffer pool considered hot

      _DB_PERCENT_HOT_KEEP: Percent of keep buffer pool considered hot

      _DB_PERCENT_HOT_RECYCLE: Percent of recycle buffer pool considered hot

      _DB_AGING_HOT_CRITERIA: Touch count which sends a buffer to head of replacement list

      _DB_AGING_COOL_COUNT: Touch count set when buffer cooled

      _DB_AGING_TOUCH_TIME: Touch count which sends a buffer to head of replacement list

      _DB_AGING_FREEZE_CR: Make CR buffers always be too cold to keep in cache

      _DB_AGING_STAY_COUNT: µ±bufferÒÆ¶¯µ½LURheaderµÄTouch count

      _DB_BLOCK_CACHE_PROTECT: ±£»¤ database blocks (µ÷ÊÔÓÃ)

      _DB_BLOCK_HASH_LATCHES: database block hash latchesµÄÊýÄ¿

      _DB_HANDLES: ͬʱÄÜ·¢ÉúµÄbuffer²Ù×÷£¬ÏµÍ³¼¶

      _DB_HANDLES_CACHED: ÿ¸ö½ø³Ì»º´æµÄBuffer ¾ä±ú

      _DB_LARGE_DIRTY_QUEUE: Ôà¿é¶ÓÁÐÇ¿ÖÆÐ´Èë´ÅÅ̵ÄÃÅÏÞ

      _DB_WRITER_MAX_WRITES: ×î´óµÄDB Writer I/Os

      _DB_WRITER_CHUNK_WRITES: DBWR ³¢ÊÔдµÈ´ý´ÎÊý

      _DBWR_ASYNC_IO: ¼¤»î DBWR Ò첽д

      _DBWR_TRACING: ¼¤»î DBWR ×·×Ù

      _DBWR_SCAN_INTERVAL: DBWR scan interval

      _TRACE_BUFFER_FLUSHES: ×·×Ùbuffer flushes Èç¹ûotrace cacheIOʼþ±»ÉèÖÃ

      _TRACE_MULTI_BLOCK_READS: ×·×Ù multi-block ¶Á£¬Èç¹ûotrace cacheIOʼþ±»ÉèÖÃ

      _TRACE_CR_BUFFER_CREATES: ×·×Ù CR buffer ´´½¨£¬Èç¹û otrace cacheIO ʼþ±»ÉèÖÃ

ÆäËü¼¼ÇÉ

      ʹÓöà¸öLRU latchµÄʱºò£¬Ê¹Óöà¸öDBWR½ø³Ì¡£

      ¾¡Á¿Ê¹LRU latch¶ªÊ§ÂÊСÓÚ1£¥

      ʹÓÃasynchronous I/O »òÕß DBWR I/O Slaves.

      ¼õÉÙ buffer cache load ͨ¹ýʹÓÃdirect I/O.

ǰһƪ£ºÈȵã¿éµÄ¶¨Òå
Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ