Èȵã¿éµÄ¶¨Òå
Êý¾Ý¿âµÄÈȵã¿é£¬´Ó¼òµ¥Á˽²£¬¾ÍÊǼ«¶ÌµÄʱ¼äÄÚ¶ÔÉÙÁ¿Êý¾Ý¿é½øÐÐÁ˹ýÓÚÆµ·±µÄ·ÃÎÊ¡£¶¨Òå¿´ÆðÀ´×ÜÊǺܼòµ¥µÄ£¬µ«Êµ¼ÊÔÚÊý¾Ý¿âÖУ¬ÎÒÃÇҪȥ¹Û²ì»òÕßÈ·¶¨Èȵã¿éµÄÎÊÌ⣬ȴ²»ÊÇÄÇô¼òµ¥ÁË¡£ÒªÉî¿ÌµØÀí½âÊý¾Ý¿âÊÇÔõôͨ¹ýһЩÊý¾ÝÌØÕ÷À´±íʾÈȵã¿éµÄ£¬ÎÒÃÇÐèÒªÁ˽âһЩÊý¾Ý¿âÔÚÕâ·½Ãæ´¦Àí»úÖÆµÄÌØÐÔ¡£
Êý¾Ý»º³åÇøµÄ½á¹¹
ÎÒÃǶ¼ÖªµÀ£¬µ±²éѯ¿ªÊ¼µÄʱºò£¬½ø³ÌÊ×ÏÈÈ¥Êý¾Ý»º³åÇøÖвéÕÒÊÇ·ñ´æÔÚ²éѯËùÐèÒªµÄÊý¾Ý¿é£¬Èç¹ûûÓУ¬¾ÍÈ¥´ÅÅÌÉϰÑÊý¾Ý¿é¶Áµ½ÄÚ´æÖÐÀ´¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬Éæ¼°µ½Êý¾Ý»º³åÇøÖÐLRUÁ´µÄ¹ÜÀí£¨8i¿ªÊ¼ÒÔ½Ó´¥µã¼ÆÊýΪ±ê×¼ºâÁ¿bufferÀäÈÈ´Ó¶ø¾ö¶¨bufferÊÇÔÚLRUµÄÀä¶Ë»¹ÊÇÈȶˣ©£¬¹ØÓÚÕⲿ·ÖÄÚÈÝ£¬´Óoracle concepts ÖоÍÄܵõ½Ï꾡µÄÎĵµ£¬ÎÒ²»×¼±¸È¥ÂÛÊöÕⲿ·ÖÄÚÈÝ£¬ÕâÒ²²»ÊDZ¾ÎĵÄÖØµã¡£ÏÖÔÚÎÒÃǵÄÖØµãÊÇ£¬µ½µ×½ø³ÌÊÇÈçºÎµØÈ¥¿ìËÙ¶¨Î»µ½×Ô¼ºËùÏëÒªµÄblockµÄ£¬»òÕßÈçºÎ¿ìËÙÈ·¶¨ÏëÒªµÄblock²»ÔÚÄÚ´æÖжøÈ¥½øÐÐÎïÀí¶ÁµÄ¡£
ÎÒÃÇ×ÐϸÏëÒ»Ïë£¬Ëæ×ÅÓ²¼þµÄ·¢Õ¹£¬ÄÚ´æÔ½À´Ô½´ó£¬cache bufferÒ²Ô½À´Ô½´ó£¬ÎÒÃÇÈçºÎ²ÅÄÜÔÚ´óÁ¿µÄÄÚ´æÖÐѸËÙ¶¨Î»µ½×Ô¼ºÏëÒªµÄblock£¿×ܲ»ÄÜÈ¥ËùÓÐbufferÖбéÀú°É£¡ÔÚ´ËÊý¾Ý¿âÒý³öÁËhashµÄ¸ÅÄoracleÖпìËÙ¶¨Î»ÐÅÏ¢×ÜÊÇͨ¹ýhashËã·¨µÄ£¬±ÈÈç¿ìËÙ¶¨Î»sqlÊÇ·ñÔÚshared pool sizeÖдæÔÚ¾ÍÊÇͨ¹ýhash valueÀ´¶¨Î»µÄ£¬Ò²¾ÍÊÇ˵shared pool sizeÖжÔÏóÒ²ÊÇͨ¹ýhash tableÀ´¹ÜÀíµÄ£©£¬Á˽âÒ»µãÊý¾Ý½á¹¹µÄ»ù±¾ÖªÊ¶¾ÍÖªµÀ£¬hash µÄÒ»´óÖØÒª¹¦ÄܾÍÊÇ¿ìËٵزéÕÒ¡£¾Ù¸ö×î¼òµ¥µÄÀý×Ó£¬¼ÙÉèÎÒÃÇÓÐÒ»¸öhash table ¾ÍÊÇÒ»¸ö¶þάÊý×éa[200][100],ÏÖÔÚÓÐ1000¸öÎÞÐòÊý×Ö£¬ÎÒÃÇÒª´ÓÕâ1000¸öÊý×ÖÀïÃæ²éÕÒij¸öÖµÊÇ·ñ´æÔÚ£¬»òÕß˵µ±ÎÒÃǽÓÊÕµ½Ä³¸öÊý×ÖµÄʱºò±ØÐëÅжÏÊÇ·ñÒѾ´æÔÚ£¬µ±È»£¬ÎÒÃÇ¿ÉÒÔ±éÀúÕâ1000¸öÊý×Ö£¬µ«ÕâÑùµÄЧÂʾͺܵ͡£µ«ÏÖÔÚÎÒÃÇ¿¼ÂÇÕâÑùÒ»ÖÖ·½·¨£¬ÄǾÍÊǰÑ1000¸öÊý×Ö³ýÒÔ200£¬¸ù¾ÝÆäÓàÊý£¬·ÅÔÚa[200][100]ÀïÃæ(¼ÙÉèÏàͬÓàÊýµÄ×î´óÊýÁ¿²»³¬¹ý100)£¬ÓàÊý¾ÍÊÇÊý×éµÄϱꡣÕâÑù£¬Æ½¾ùÀ´ËµÒ»¸öÊý×éa[i]ÀïÃæ¿ÉÄÜÓÐ5¸ö×óÓÒµÄÊý×Ö¡£µ±ÎÒÃÇҪȥÅбðÒ»¸öÊý×ÖÊÇ·ñ´æÔÚµÄʱºò£¬¶ÔÕâ¸öÊý×Ö³ýÒÔ200(Õâ¾ÍÊÇÒ»¸ö×î¼òµ¥µÄhashËã·¨)£¬¸ù¾ÝÓàÊýi×÷ΪϱêÈ¥Êý×éa[i]ÖвéÕÒ£¬´óÔ¼½øÐÐ5´Î²éÕÒ¾ÍÄÜÅбðÊÇ·ñÒѾ´æÔÚ£¬ÕâÑùͨ¹ý¿ª±ÙÄÚ´æ¿Õ¼äa[200][100]À´»»È¡ÁËʱ¼ä(µ±È»hash Ëã·¨µÄѡȡºÍhash tableµÄ´óСÊÇÒ»¸öºÜ¹Ø¼üµÄÎÊÌâ)¡£
Ã÷°×ÁË»ù±¾µÄhashÔÀíÖ®ºó£¬ÎÒÃÇÔÙÀ´¿´oracleµÄblockµÄ¹ÜÀí¡£Êý¾Ý¿âΪÕâЩblockÒ²¿ª±ÙÁËhash table£¬¼ÙÉèÊÇa,ÔòÔÚһάÉϵÄÊýÁ¿ÊÇÓɲÎÊý_db_block_hash_buckets À´¾ö¶¨µÄ£¬Ò²¾ÍÊÇ´æÔÚhash table a[_db_block_hash_buckets ],´Óoracle8i¿ªÊ¼£¬_db_block_hash_buckets =db_block_buffers*2¡£¶øÒ»¸öblock±»·Åµ½ÄĸöbucketsÀïÃæ£¬ÔòÊÇÓÉblockµÄÎļþ±àºÅ¡¢¿éºÅ(x$bh.dbarfl¡¢x$bh.dbablk¶ÔÓ¦ÁËblockµÄÎļþÊôÓÚ±í¿Õ¼äÖеÄÏà¹Ø±àºÅºÍblockÔÚÎļþÖеıàºÅ£¬x$bhÊÇËùÓÐcache bufferµÄheaderÐÅÏ¢£¬Í¨¹ý±í¸ñµÄÐÎʽ¿ÉÒÔ²éѯ)×öhash Ëã·¨¾ö¶¨·Åµ½ÄĸöbucketµÄ£¬¶øbucketÀïÃæ¾Í´æ·ÅÁËÕâЩbuffersµÄµØÖ·¡£ÕâÑùµ±ÎÒÃÇÒª·ÃÎÊÊý¾ÝµÄʱºò£¬¿ÉÒÔ»ñµÃsegmentµÄextent(¿ÉÒÔͨ¹ýdba_extents²éµ½¿´£¬ÏêϸµÄÐÅÏ¢À´Ô´ÕâÀï²»×ö̽ÌÖ)£¬×ÔȻ֪µÀÒª·ÃÎʵÄÎļþ±àºÅºÍblock±àºÅ£¬¸ù¾ÝÎļþºÍblock±àºÅ¿ÉÒÔͨ¹ýhashËã·¨¼ÆËã³öhash bucket,È»ºó¾Í¿ÉÒÔÈ¥hash bucketÀïÃæÈ¥ÕÒblock¶ÔÓ¦µÄbuffer¡£
³ý´ËÖ®Í⣬ΪÁËά»¤¶ÔÕâЩblockµÄ·ÃÎʺ͸ü¸Ä£¬oracle»¹ÌṩÁËÒ»ÖÖlatchÀ´±£»¤ÕâЩblock¡£ÒòΪҪ±ÜÃⲻͬµÄ½ø³ÌËæÒâµØ¾¶Ö±²¢·¢Ð޸ĺͷÃÎÊÕâЩblock£¬ÕâÑùºÜ¿ÉÄÜ»áÆÆ»µblockµÄ½á¹¹µÄ¡£latchÊÇÊý¾Ý¿âÄÚ²¿ÌṩµÄÒ»ÖÖά»¤ÄÚ²¿½á¹¹µÄÒ»Öֵͼ¶Ëø£¬latchµÄÉú´æÖÜÆÚ¼«¶Ì(΢ÃëÒÔϼ¶±ð)£¬½ø³Ì¼Ólatchºó¿ìËٵĽøÐÐij¸ö·ÃÎÊ»òÕßÐ޸͝×÷È»ºóÊÍ·Ålatch(¹ØÓÚlatch²»ÔÙ¹ý¶àµÄ²ûÊö£¬ÄÇ¿ÉÄÜÓÖÊÇÐèÒªÁíһƪÎÄÕ²ÅÄܲûÊöÇå³þ)¡£ÕâÖÖlatchÊýÁ¿ÊÇͨ¹ý²ÎÊý_db_block_hash_latches À´¶¨ÒåµÄ£¬Ò»¸ölatch¶ÔÓ¦µÄ±£»¤Á˶à¸öbuckets¡£´Ó8i¿ªÊ¼£¬Õâ¸ö²ÎÊýµÄdefault¹æÔòΪ:
µ±cache buffers ÉÙÓÚ2052 buffers
_db_block_hash_latches = power(2,trunc(log(2, db_block_buffers - 4) - 1))
µ±cache buffers¶àÓÚ131075 buffers
_db_block_hash_latches = power(2,trunc(log(2, db_block_buffers - 4) - 6))
µ±cache buffersλÓÚ2052Óë131075 buffersÖ®¼ä
_db_block_hash_latches = 1024
ͨ¹ýÕâ¸ö¹æÔòÎÒÃÇ¿ÉÒÔ¿´³ö£¬Ò»¸ölatch´óÔ¼¿ÉÒÔά»¤128¸ö×óÓÒµÄbuffers¡£ÓÉÓÚlatchʹµÃ¶ÔblockµÄ²Ù×÷µÄ´®Ðл¯(9iÖÐÓиĽø£¬¶ÁÓë¶Á¿ÉÒÔ²¢ÐУ¬µ«¶ÁÓëд¡¢Ð´ÓëдÒÀȻҪ´®ÐÐ)£¬ºÜÏÔÈ»ÎÒÃÇ¿ÉÒÔÏëµ½Ò»¸öµÀÀí£¬Èç¹û´óÁ¿½ø³Ì¶ÔÏàͬµÄblock½ø³Ì½øÐвÙ×÷£¬±ØÈ»ÔÚÕâЩlatchÉÏÔì³É¾ºÕù£¬Ò²¾ÍÊÇ˵±ØÈ»ÐγÉlatchµÄµÈ´ý¡£ÕâÔÚºê¹ÛÉϾͱíÏÖΪϵͳ¼¶µÄµÈ´ý¡£Ã÷°×ÁËÕâЩÔÀí£¬ÎªÎÒÃÇÏÂÃæµÄÔÚÊý¾Ý¿âÖеÄÕï¶Ïµì¶¨ÁË»ù´¡¡£
ÈçºÎÈ·¶¨Èȵã¶ÔÏó
Èç¹ûÎÒÃǾ³£¹Ø×¢statspack±¨¸æ£¬»á·¢ÏÖÓÐʱºò³öÏÖcache buffer chainsµÄµÈ´ý¡£Õâ¸öcache buffer chains¾ÍÊÇ_db_block_hash_latchesËù¶¨ÒåµÄlatchµÄ×ܳƣ¬Í¨¹ý²éѯv$latchÒ²¿ÉµÃµ½£º
select">sys@OCN>select latch#,name,gets,misses,sleeps from v$latch where name like 'cache buffer%';
LATCH# NAME GETS MISSES SLEEPS
---------- ------------------------------ ---------- ---------- ----------
93 cache buffers lru chain 54360446 21025 238
98 cache buffers chains 6760354603 1680007 27085
99 cache buffer handles 554532 6 0
ÔÚÕâ¸ö²éѯ½á¹ûÀïÎÒÃÇ¿ÉÒÔ¿´µ½¼Ç¼ÁËÊý¾Ý¿âÆô¶¯ÒÔÀ´µÄËùÓÐcahce buffer chainsµÄlatchµÄ×´¿ö£¬gets±íʾ×ܹ²ÓÐÕâô¶à´ÎÇëÇó£¬misses±íʾÇëÇóʧ°ÜµÄ´ÎÊý(¼ÓËø²»³É¹¦)£¬¶øsleeps ±íʾÇëÇóʧ°ÜÐÝÃߵĴÎÊý£¬Í¨¹ýsleepsÎÒÃÇ¿ÉÒÔ´óÌåÖªµÀÊý¾Ý¿âÖÐlatchµÄ¾ºÕùÊÇ·ñÑÏÖØ£¬ÕâÒ²¼ä½ÓµÄ±íÕ÷ÁËÈȵã¿éµÄÎÊÌâÊÇ·ñÑÏÖØ¡£ÓÉÓÚv$latchÊÇÒ»¸ö¾ÛºÏÐÅÏ¢£¬ÎÒÃDz¢²»ÄÜ»ñµÃÄÄЩ¿é¿ÉÄÜ´æÔÚÆµ·±·ÃÎÊ¡£ÄÇÎÒÃÇÒªÀ´¿´ÁíÒ»¸öviewÐÅÏ¢£¬ÄǾÍÊÇv$latch_children,v$latch_children.addr¼Ç¼µÄ¾ÍÊÇÕâ¸ölatchµÄµØÖ·¡£
select">sys@OCN>select addr,LATCH#,CHILD#,gets,misses,sleeps from v$latch_children
2 where name = 'cache buffers chains' and rownum < 21;
ADDR LATCH# CHILD# GETS MISSES SLEEPS
-------- ---------- ---------- ---------- ---------- ----------
91B23B74 98 1024 10365583 3957 33
91B23374 98 1023 5458174 964 25
91B22B74 98 1022 4855668 868 15
91B22374 98 1021 5767706 923 22
91B21B74 98 1020 5607116 934 31
91B21374 98 1019 9389325 1111 25
91B20B74 98 1018 5060207 994 31
91B20374 98 1017 18204581 1145 18
91B1FB74 98 1016 7157081 920 23
91B1F374 98 1015 4660774 922 22
91B1EB74 98 1014 6954644 976 32
91B1E374 98 1013 4881891 970 19
91B1DB74 98 1012 5371135 971 28
91B1D374 98 1011 5154497 990 26
91B1CB74 98 1010 5013796 936 18
91B1C374 98 1009 5667446 939 25
91B1BB74 98 1008 4673421 883 14
91B1B374 98 1007 4589646 986 17
91B1AB74 98 1006 10380781 1020 20
91B1A374 98 1005 5142009 1110 19
20 rows selected.
µ½´ËÎÒÃÇ¿ÉÒÔ¸ù¾Ýv$latch_child.addr¹ØÁªµ½¶ÔÓ¦µÄx$bh.hladdr(ÕâÊÇbuffer headerÖмǼµÄµ±Ç°bufferËù´¦µÄlatchµØÖ·)£¬Í¨¹ýx$bh¿ÉÒÔ»ñµÃ¿éµÄÎļþ±àºÅºÍblock±àºÅ¡£
select">sys@OCN>select dbarfil,dbablk
from x$bh
where hladdr in
(select addr
from (select addr
from v$latch_children
order by sleeps desc)
where rownum < 11);
DBARFIL DBABLK
---------- ----------
4 6498
40 14915
15 65564
28 34909
40 17987
1 24554
8 21404
39 29669
28 46173
28 48221
¡¡¡¡¡¡¡¡
ÓÉ´ËÎÒÃǾʹòͨÁËcache buffers chainsºÍ¾ßÌåblockÖ®¼äµÄ¹ØÏµ£¬ÄÇÔÙ¼ÌÐøÏÂÀ´£¬ÖªµÀÁËblock£¬ÎÒÃÇÐèÒªÖªµÀ¾¿¾¹ÊÇÄÄЩsegment¡£Õâ¸ö¿ÉÒÔͨ¹ýdba_extentsÀ´»ñµÃ¡£
select distinct a.owner,a.segment_name from
dba_extents a,
(select dbarfil,dbablk
from x$bh
where hladdr in
(select addr
from (select addr
from v$latch_children
order by sleeps desc)
where rownum < 11)) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk;
OWNER SEGMENT_NAME SEGMENT_TYPE
------------------------------ ------------------------------ ------------------
ALIBABA BIZ_SEARCHER TABLE
ALIBABA CMNTY_USER_MESSAGE TABLE
ALIBABA CMNTY_VISITOR_INFO_PK INDEX
ALIBABA COMPANY_AMID_IND INDEX
ALIBABA COMPANY_DRAFT TABLE
ALIBABA FEEDBACK_POST TABLE
ALIBABA IM_BLACKLIST_PK INDEX
ALIBABA IM_GROUP TABLE
ALIBABA IM_GROUP_LID_IND INDEX
ALIBABA MEMBER TABLE
ALIBABA MEMBER_PK INDEX
ALIBABA MLOG$_SAMPLE TABLE
¡¡¡¡¡¡¡¡
ÎÒÃÇ»¹ÓÐÁíÍâÒ»ÖÖ·½Ê½
select object_name
from dba_objects
where data_object_id in
(select obj
from x$bh
where hladdr in
(select addr
from (select addr
from v$latch_children
order by sleeps desc)
where rownum < 11)) ;
OBJECT_NAME
------------------------------------
I_CCOL2
RESOURCE_PLAN$
DUAL
FGA_LOG$
AV_TRANSACTION
COMPANY_DRAFT
MEMBER
SAMPLE
SAMPLE_GROUP
VERTICAL_COMPONENT
MEMBER_PK
SAMPLE_GROUP_PK
IM_BLACKLIST_PK
IM_CONTACT
IM_GROUP
CMNTY_USER_MESSAGE
CMNTY_VISITOR_INFO_PK
IM_OFFLINEMSG_TID_IND
OFFER
OFFER_PK
OFFER_EMAIL_IND
OFFER_DRAFT
CMNTY_USER_MESSAGE_TD_BSM_IND
CMNTY_MESSAGE_NUM_PK
BIZ_EXPRESS_MEMBER_ID_IND
¡¡¡¡¡¡¡¡
µ½ÕâÀïÎÒÃÇ»ù±¾ÄÜÕÒµ½Èȵã¿é¶Ô¶ÔÓ¦µÄ¶ÔÏó¡£µ«Êµ¼ÊÉÏ»¹ÓÐÁíÍâÒ»¸ö;¾¶À´»ñÈ¡ÕâЩÐÅÏ¢£¬ÄǾÍÊǺÍx$bh.tch Ïà¹ØµÄÒ»ÖÖ·½·¨¡£¶ÔÓÚ8i¿ªÊ¼oracleÌṩÁ˽Ӵ¥µã(touch count)À´×÷ΪblockÊÇÀäÈȵıêÖ¾£¬ÔÚÒ»¶¨Ìõ¼þÂú×ãµÄÇé¿öÏÂblock±»½ø³Ì·ÃÎÊÒ»´Îtouch count Ôö¼ÓÒ»£¬µ½Ä³¸ö±ê×¼Ö®ºó±»Òƶ¯µ½LRUÈȶË(¹ØÓÚtouch count ÔÚÕâÀï²»×öÏêϸ½éÉÜ£¬ÄÇÓÖ½«ÊÇÒ»´óƪÎÄÕÂ)¡£ÄÇÔÚ¶Ìʱ¼äÄÚ´ÓijÖÖÒâÒåÉϽ²£¬touch count ´óµÄblock¿ÉÄܰµÊ¾×ÅÔÚµ±Ç°Ä³¸öÖÜÆÚÄÚ±»·ÃÎÊ´ÎÊý±È½Ï¶à¡£
select distinct a.owner,a.segment_name,a.segment_type from
dba_extents a,
(select dbarfil,dbablk
from (select dbarfil,dbablk
from x$bh order by tch desc) where rownum < 11) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk;
OWNER SEGMENT_NAME SEGMENT_TYPE
------------------------------ ------------------------------ ------------------
ALIBABA CMNTY_USER_MESSAGE TABLE
ALIBABA MEMBER_PK INDEX
ALIBABA OFFER_DRAFT_GMDFY_IND INDEX
ͬÉÏÃæÒ»Ñù»¹ÓÐÕâ¸ö·½·¨
select object_name
from dba_objects
where data_object_id in
(select obj
from (select obj
from x$bh order by tch desc) where rownum < 11) ;
OBJECT_NAME
---------------------------------------------------
DUAL
MEMBER_PK
SAMPLE_GROUP_PK
CMNTY_USER_MESSAGE_TD_BSM_IND
OFFER_DRAFT_MID_GMDFY_IND
OFFER_MID_GPOST_IND
OFFER_DRAFT_PK
MEMBER_GLLOGIN_IND
OFFER_MID_STAT_GEXPIRE_IND
SAMPLE_MID_STAT_IND
10 rows selected.
µ½ÕâÀÎÒÃÇѰÕÒÈȵã¿éºÍÈȵã¶ÔÏóµÄ¹¤×÷ËãÊÇÍê³ÉÁË£¬µ«ÎÒÃÇ»¹²¢Ã»Óнâ¾öÎÊÌâ¡£
ÈȵãÎÊÌâµÄ½â¾ö
Èȵã¿éºÍÈȵã¶ÔÏóÎÒÃǶ¼ÕÒµ½ÁË£¬µ«ÊÇÎÒÃǸÃÔõôÀ´½â¾öÕâ¸öÎÊÌâÄØ£¿Ò»°ãÀ´Ëµ£¬Èȵã¿é»áµ¼ÖÂcache buffers chains¾ºÕùµÈ´ý£¬µ«²¢²»ÊÇ˵cache buffer chainsÒ»¶¨ÊÇÒòΪÈȵã¿é¶øÆð£¬ÔÚÌØ±ðÇé¿öÏÂÓпÉÄÜÊÇÒòΪlatchÊýÁ¿µÄÎÊÌâµ¼Öµģ¬Ò²¾ÍÊÇÒ»¸ölatch¹ÜÀíµÄbuffersÊýÁ¿Ì«¶à¶øµ¼Ö¾ºÕù¼¤ÁÒ¡£µ«ÊÇlatchÊýÁ¿ÎÒÃÇÒ»°ãÊDz»»áÇáÒ×È¥ÉèÖõģ¬ÕâÊÇoracleµÄÒþ²Ø²ÎÊý¡£
ʵ¼ÊÉÏ×îÓÐЧµÄ°ì·¨£¬ÊÇ´ÓÓÅ»¯sqlÈëÊÖ£¬²»Á¼µÄsqlÍùÍù´øÀ´´óÁ¿µÄ²»±ØÒªµÄ·ÃÎÊ£¬ÕâÊÇÔì³ÉÈȵã¿éµÄ¸ùÔ´¡£±ÈÈç±¾¸Ãͨ¹ýÈ«±íɨÃèµÄ²éѯȴ×ßÁËË÷ÒýµÄrange scan£¬ÕâÑù½«´øÀ´´óÁ¿µÄ¶Ô¿éµÄÖØ¸´·ÃÎÊ¡£´Ó¶øÐγÉÈȵãÎÊÌâ¡£ÔÙ»òÕß±ÈÈç²»µ±µØ×ßÁËnested loopsµÄ±íÁ¬½Ó£¬Ò²¿ÉÄܶԷÇÇý¶¯±íÔì³É´óÁ¿µÄÖØ¸´·ÃÎÊ¡£ÄÇôÔÚÕâ¸öʱºò£¬ÎÒÃǵÄÄ¿±ê¾ÍÊÇÕÒ³öÕâЩsqlÀ´²¢³¢ÊÔÓÅ»¯¡£ÔÚstatspack±¨¸æÖУ¬¸ù¾Ý±¨¸æÖÐsqlÁÐ±í£¬ÎÒÃÇÈç¹ûÊÇͨ¹ýdba_extentsÈ·¶¨µÄÈȵã¶ÔÏó¶ø²»ÊÇͨ¹ýdba_objectsÈ·¶¨µÄ£¬Ôò¿ÉÒÔͨ¹ý²éÕÒ³öµÄÈȵãsegmentת»»Îª¶ÔÓ¦µÄ±í£¬¶ÔÓÚ·Ç·ÖÇøµÄË÷Òý£¬index_name¾ÍÊÇsegment_name,ͨ¹ýdba_indexesºÜÈÝÒ×µÄÕÒµ½¶ÔÓ¦µÄtable_name,¶ÔÓÚ·ÖÇø±íºÍ·ÖÇøË÷ÒýÒ²ÄÜͨ¹ýºÍdba_tab_partitionºÍdba_ind_partitionsÕÒµ½segmentºÍtableµÄ¶ÔÓ¦¹ØÏµ¡£Í¨¹ýÕâЩtableµ½statspack±¨¸æÖÐÈ¥ÕÒÏà¹ØµÄsql¡£
select sql_text
from stats$sqltext a,
(select distinct a.owner,a.segment_name,a.segment_type from
dba_extents a,
(select dbarfil,dbablk
from (select dbarfil,dbablk
from x$bh order by tch desc) where rownum < 11) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk) b
where a.sql_text like '%'||b.segment_name||'%' and b.segment_type = 'TABLE'
order by a.hash_value,a.address,a.piece;
SQL_TEXT
----------------------------------------------------------------
SELECT SEQ_SMS_TRANSACTION.nextval FROM DUAL
SELECT SEQ_BIZ_EXPRESS.nextval FROM DUAL
SELECT bizgroup.seq_grp_post.NextVal FROM DUAL
SELECT SEQ_SAMPLE.nextval FROM DUAL
SELECT bizgroup.seq_grp_user.NextVal FROM DUAL
SELECT SEQ_BIZ_SEARCHER.nextval FROM DUAL
SELECT SEQ_OFFER_DRAFT.nextval FROM DUAL
select seq_Company_Draft.NextVal from DUAL
SELECT SEQ_SAMPLE_GROUP.nextval FROM DUAL
SELECT SEQ_CMNTY_USER_MESSAGE.nextval FROM DUAL
SELECT SYSDATE FROM DUAL
select seq_News_Forum.NextVal from DUAL
SELECT SEQ_SMS_USER.nextval FROM DUAL
select seq_Biz_Member.NextVal from DUAL
select seq_Pymt_Managing.NextVal from DUAL
E= '+08:00' NLS_DUAL_CURRENCY = '$' NLS_TIME_FORMAT = 'HH.MI.SSX
SELECT SEQ_COMPANY_DRAFT.nextval FROM DUAL
SELECT 1 FROM DUAL
select seq_offer_draft.NextVal from DUAL
select seq_Biz_Express_Category.NextVal from DUAL
20 rows selected.
µ±È»ÕâÀïÊÇ´ÓstatspackËѼ¯µÄstats$sqltextÖÐÈ¥ÕÒµÄ(Äã¿ÉÒÔÔÚstatspackµÄÎı¾±¨¸æÖÐÈ¥ÕÒ)£¬Êµ¼ÊÉÏ£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚµ±Ç°Êý¾Ý¿âÖеÄv$sqlarea»òÕßv$sqltextÀïÃæÈ¥ÕÒµ½ÕâЩsql£¬È»ºóÀ´³¢ÊÔÓÅ»¯¡£
select sql_text
from v$sqltext a,
(select distinct a.owner,a.segment_name,a.segment_type from
dba_extents a,
(select dbarfil,dbablk
from (select dbarfil,dbablk
from x$bh order by tch desc) where rownum < 11) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk) b
where a.sql_text like '%'||b.segment_name||'%' and b.segment_type = 'TABLE'
order by a.hash_value,a.address,a.piece;
SQL_TEXT
----------------------------------------------------------------
SELECT NULL FROM DUAL FOR UPDATE NOWAIT
SELECT SEQ_SMS_TRANSACTION.nextval FROM DUAL
SELECT SEQ_BIZ_EXPRESS.nextval FROM DUAL
SELECT SEQ_IM_GROUP.nextval FROM DUAL
SELECT SEQ_SAMPLE.nextval FROM DUAL
='DD-MON-RR HH.MI.SSXFF AM TZR' NLS_DUAL_CURRENCY='$' NLS_COMP='
SELECT SEQ_BIZ_SEARCHER.nextval FROM DUAL
SELECT SEQ_OFFER_DRAFT.nextval FROM DUAL
SELECT SEQ_SAMPLE_GROUP.nextval FROM DUAL
DD-MON-RR HH.MI.SSXFF AM TZR' NLS_DUAL_CURRENCY='$' NLS_COMP='BI
SELECT SEQ_CMNTY_USER_MESSAGE.nextval FROM DUAL
SELECT SYSDATE FROM DUAL
SELECT SEQ_SMS_USER.nextval FROM DUAL
IMESTAMP_TZ_FORMAT='DD-MON-RR HH.MI.SSXFF AM TZR' NLS_DUAL_CURRE
SELECT SEQ_COMPANY_DRAFT.nextval FROM DUAL
SELECT 1 FROM DUAL
SELECT USER FROM DUAL
SELECT DECODE('A','A','1','2') FROM DUAL
18 rows selected.
³ýÁËÓÅ»¯sqlÍ⣬µ±È»¶ÔÓÚÈȵãµÄ±í»òÕßË÷ÒýÀ´Ëµ£¬Èç¹ûСµÄ»°£¬ÎÒÃÇ¿ÉÒÔ¿¼ÂÇcacheÔÚÄÚ´æÖУ¬ÕâÑù¿ÉÄܽµµÍÎïÀí¶ÁÌá¸ßsqlÔËÐÐËÙ¶È(Õâ²¢²»»á¼õÉÙcache buffer chainsµÄ·ÃÎÊ´ÎÊý)£¬¶ÔÓÚÐòÁУ¬ÎÒÃÇ¿ÉÒÔ¶ÔÐòÁжàÉèÖÃһЩcache¡£Èç¹ûÊDz¢ÐзþÎñÆ÷»·¾³ÖеÄË÷Òý¶ÔÏ󣬲¢ÇÒÕâ¸öË÷ÒýÊÇϵÁеÝÔöÀàÐÍ£¬ÎÒÃÇ¿ÉÒÔ¿¼ÂÇ·´ÏòË÷Òý(¹ØÓÚ·´ÏòË÷ÒýÕâÀï¾Í²»¹ý¶àµØ×ö½éÉÜÁË)¡£
Èȵã¿éµÄÆäËûÏà¹ØÖ¢×´
ÔÚÊý¾Ý¿âÖл¹¿ÉÄÜ´æÔÚһЩÆäËû·½ÃæµÄÈȵã¿éÖ¢×´£¬Í¨¹ýv$waitstatµÄµÈ´ý¿ÉÒÔ¿´³öһЩ¶ËÄß,v$waitstatÊǸù¾ÝÊý¾Ý»º³åÇøÖи÷ÖÖblockµÄÀàÐÍ(x$bh.class)¶ø·ÖÀàͳ¼ÆµÄµÈ´ý×´¿ö¡£
select">sys@OCN>select * from v$waitstat;
CLASS COUNT TIME
------------------ ---------- ----------
data block 1726977 452542
sort block 0 0
save undo block 0 0
segment header 40 11
save undo header 0 0
free list 0 0
extent map 0 0
1st level bmb 611 112
2nd level bmb 42 13
3rd level bmb 0 0
bitmap block 0 0
bitmap index block 0 0
file header block 13 92
unused 0 0
system undo header 111 28
system undo block 7 0
undo header 2765 187
undo block 633 156
±ÈÈçÔÚASSM±í¿Õ¼ä³öÏÖ֮ǰ£¬ÓÉÓÚfreelistµÄ´æÔÚ£¬Èç¹û±í¾³£±»²¢·¢µÄ½ø³ÌDML£¬Ôò¿ÉÄÜ´æÔÚ´óÁ¿µÄdata blockµÄµÈ´ý£¬»òÕßÓÐfree listµÄµÈ´ý¡£ÄÇôÕâ¸öʱºòÎÒÃÇ·¢ÏÖÕâÑùµÄsegmentÖ®ºóÐèÒª¿¼ÂÇÔö¼ÓfreelistÊýÁ¿¡£ÔÙ±ÈÈç¾³£·¢Éú³¤Ê±¼äµÄDMLµÄ±í±»Æµ·±µØ·ÃÎÊ£¬ÕâÑù½«»áÔì³É¹ý¶àµÄ¶Ô»Ø¹ö¶ÎÖпéµÄ·ÃÎÊ£¬Õâʱ¿ÉÄÜundo block µÄµÈ´ý»á±È½Ï¶à¡£ÄÇôÎÒÃÇ¿ÉÄÜÐèÒª¿ØÖÆDMLµÄʱ¼ä³¤¶È»òÕßÏë°ì·¨´ÓÓ¦ÓóÌÐòÈëÊÖÀ´½â¾öÎÊÌâ¡£Èç¹ûÊÇundo headerµÄµÈ´ý±È½Ï¶à£¬Ã»Ê¹ÓÃundo tablespace ֮ǰ£¬¿ÉÄÜÐèÒª¿¼ÂÇÔö¼Ó»Ø¹ö¶ÎµÄÊýÁ¿¡£
×ܽá
±¾ÎÄ´ÓÈȵã¿éµÄÔÀíÈëÊÖ£¬ÏêϸµØÓÉoracleµÄÄÚ²¿½á¹¹ÌØÕ÷¿ªÊ¼½éÉÜÁËÈȵã¿éµÄ²úÉúºÍ±íÏÖÌØÕ÷¡£½ø¶ø²ûÊöÁËÕï¶ÏÈȵã¶ÔÏóºÍÕÒ³öÔì³ÉÈȵã¶ÔÏóµÄsqlµÄ·½·¨¡£²¢´Ó½â¾öÈȵãÎÊÌâ·½ÃæÌṩÁ˽â¾ö·½Ïò¡£
