±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËInnoDBÌåϵ¼Ü¹¹¡¢CheckPoint¼¼Êõ¡¢InnoDB¹Ø¼üÌØÐÔµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×Ô¼òÊ飬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£
|
|
´ÓMysql5.5°æ±¾¿ªÊ¼£¬InnoDBÊÇĬÈÏµÄ±í´æ´¢ÒýÇæ¡£ÆäÌØµãÊÇÐÐËøÉè¼Æ¡¢Ö§³ÖMVCC¡¢Ö§³ÖÍâ¼ü¡¢ÌṩһÖÂÐÔ·ÇËø¶¨¶Á¡¢Í¬Ê±±»Éè¼ÆÓÃÀ´×îÓÐЧµÄÀûÓÃÒÔ¼°Ê¹ÓÃÄÚ´æºÍCPU¡£
±¾ÎÄÖ÷ÒªÄÚÈÝ£º
InnoDBÌåϵ¼Ü¹¹
CheckPoint¼¼Êõ
InnoDB¹Ø¼üÌØÐÔ
Ò»¡¢InnoDBÌåϵ¼Ü¹¹
ÏÂͼ¼òµ¥ÃèÊöÁËInnoDB´æ´¢ÒýÇæµÄÌåϵ½á¹¹£º

InnoDB´æ´¢ÒýÇæÓжà¸öÄÚ´æ¿é£¬ÕâЩÄÚ´æ¿é×é³ÉÁËÒ»¸ö´óµÄÄÚ´æ³Ø¡£ºǫ́Ïß³ÌÖ÷Òª¸ºÔðË¢ÐÂÄÚ´æ³ØÖеÄÊý¾Ý¡¢½«ÒÑÐ޸ĵÄÊý¾Ýˢе½´ÅÅ̵ȵȡ£½ÓÏÂÀ´ÎÒÃÇ·Ö±ð½éÉܺǫ́Ï̺߳ÍÄÚ´æ³Ø¡£
1.1 ºǫ́Ïß³Ì
InnoDBºǫ́Óжà¸ö²»Í¬µÄỊ̈߳¬ÓÃÀ´¸ºÔð²»Í¬µÄÈÎÎñ¡£Ö÷ÒªÓÐÈçÏ£º
Master Thread
ÕâÊÇ×îºËÐĵÄÒ»¸öÏß³Ì,Ö÷Òª¸ºÔ𽫻º³å³ØÖеÄÊý¾ÝÒ첽ˢе½´ÅÅÌ,±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ,°üÀ¨ÔßÒ³µÄˢС¢ºÏ²¢²åÈ뻺³å¡¢UNDO
Ò³µÄ»ØÊÕµÈ.
IO Thread
ÔÚ InnoDB ´æ´¢ÒýÇæÖдóÁ¿Ê¹ÓÃÁËÒì²½ IO À´´¦Àíд IO ÇëÇó, IO Thread µÄ¹¤×÷Ö÷ÒªÊǸºÔðÕâЩ
IO ÇëÇóµÄ»Øµ÷´¦Àí¡£
Purge Thread
ÊÂÎñ±»Ìá½»Ö®ºó, undo log ¿ÉÄܲ»ÔÙÐèÒª,Òò´ËÐèÒª Purge Thread À´»ØÊÕÒѾʹÓò¢·ÖÅäµÄ
undoÒ³. InnoDB Ö§³Ö¶à¸ö Purge Thread, ÕâÑù×ö¿ÉÒÔ¼Ó¿ì undo Ò³µÄ»ØÊÕ¡£
Page Cleaner Thread
Page Cleaner Thread ÊÇÔÚInnoDB 1.2.x°æ±¾ÐÂÒýÈëµÄ,Æä×÷ÓÃÊǽ«Ö®Ç°°æ±¾ÖÐÔàÒ³µÄˢвÙ×÷¶¼·ÅÈëµ¥¶ÀµÄÏß³ÌÖÐÀ´Íê³É,ÕâÑù¼õÇáÁË
Master Thread µÄ¹¤×÷¼°¶ÔÓÚÓû§²éѯÏ̵߳Ä×èÈû¡£
1.2 ÄÚ´æ
ÕâÒ»²¿·Ö£¬ÎÒ½«ÍøÉϵıȽϺõÄ×ÊÁϾ¡Á¦È¥×ۺϣ¬Ö±¹ÛµÄÃèÊö³öÀ´¡£
InnoDB ´æ´¢ÒýÇæÊÇ»ùÓÚ´ÅÅÌ´æ´¢µÄ,Ò²¾ÍÊÇ˵Êý¾Ý¶¼ÊÇ´æ´¢ÔÚ´ÅÅÌÉϵÄ,ÓÉÓÚ CPU ËٶȺʹÅÅÌËÙ¶ÈÖ®¼äµÄºè¹µ,
InnoDB ÒýÇæÊ¹Óûº³å³Ø¼¼ÊõÀ´Ìá¸ßÊý¾Ý¿âµÄÕûÌåÐÔÄÜ¡£»º³å³Ø¼òµ¥À´Ëµ¾ÍÊÇÒ»¿éÄÚ´æÇøÓò.ÔÚÊý¾Ý¿âÖнøÐжÁȡҳµÄ²Ù×÷,Ê×ÏȽ«´Ó´ÅÅ̶Áµ½µÄÒ³´æ·ÅÔÚ»º³å³ØÖÐ,ÏÂÒ»´Î¶ÁÈ¡ÏàͬµÄҳʱ,Ê×ÏÈÅжϸÃÒ³ÊDz»ÊÇÔÚ»º³å³ØÖÐ,ÈôÔÚ,³Æ¸ÃÒ³ÔÚ»º³å³ØÖб»ÃüÖÐ,Ö±½Ó¶ÁÈ¡¸ÃÒ³¡£·ñÔò,¶ÁÈ¡´ÅÅÌÉϵÄÒ³¡£¶ÔÓÚÊý¾Ý¿âÖÐÒ³µÄÐ޸IJÙ×÷,Ê×ÏÈÐÞ¸ÄÔÚ»º³å³ØÖÐÒ³,È»ºóÔÙÒÔÒ»¶¨µÄƵÂÊˢе½´ÅÅÌ,²¢²»ÊÇÿ´ÎÒ³·¢Éú¸Ä±ä¾ÍˢлشÅÅÌ¡£
»º³å³ØÖлº´æµÄÊý¾ÝÒ³ÀàÐÍÓÐ:Ë÷ÒýÒ³¡¢Êý¾ÝÒ³¡¢ undo Ò³¡¢²åÈ뻺³å¡¢×ÔÊÊÓ¦¹þÏ£Ë÷Òý¡¢
InnoDB µÄËøÐÅÏ¢¡¢Êý¾Ý×ÖµäÐÅÏ¢µÈ¡£Ë÷ÒýÒ³ºÍÊý¾ÝÒ³Õ¼»º³å³ØµÄºÜ´óÒ»²¿·Ö£¨ÖªµÀÓÐÕâЩҳ£¬°ÑÕâЩҳµ±×öÃû´Ê¼´¿É£¬²»Óøе½ÃԻ󣩡£ÔÚInnoDBÖУ¬»º³å³ØÖеÄÒ³´óСĬÈÏΪ16KB¡£

ÎÒÃÇÒѾ֪µÀÕâ¸öBuffer PoolÆäʵÊÇһƬÁ¬ÐøµÄÄÚ´æ¿Õ¼ä£¬ÄÇÏÖÔÚ¾ÍÃæÁÙÕâ¸öÎÊÌâÁË£ºÔõô½«´ÅÅÌÉϵÄÒ³»º´æµ½ÄÚ´æÖеÄBuffer
PoolÖÐÄØ£¿Ö±½Ó°ÑÐèÒª»º´æµÄÒ³ÏòBuffer PoolÀïÒ»¸öÒ»¸öÍùÀïí¡Ã´£¿²»²»²»£¬ÎªÁ˸üºÃµÄ¹ÜÀíÕâЩ±»»º´æµÄÒ³£¬InnoDBΪÿһ¸ö»º´æÒ³¶¼´´½¨ÁËһЩËùνµÄ¿ØÖÆÐÅÏ¢£¬ÕâЩ¿ØÖÆÐÅÏ¢°üÀ¨¸ÃÒ³ËùÊôµÄ±í¿Õ¼ä±àºÅ¡¢Ò³ºÅ¡¢Ò³ÔÚBuffer
PoolÖеĵØÖ·£¬Ò»Ð©ËøÐÅÏ¢ÒÔ¼°LSNÐÅÏ¢£¨ËøºÍLSNÕâÀï¿ÉÒÔÏȺöÂÔ£©£¬µ±È»»¹ÓÐһЩ±ðµÄ¿ØÖÆÐÅÏ¢¡£
ÿ¸ö»º´æÒ³¶ÔÓ¦µÄ¿ØÖÆÐÅÏ¢Õ¼ÓõÄÄÚ´æ´óСÊÇÏàͬµÄ£¬ÎÒÃǾͰÑÿ¸öÒ³¶ÔÓ¦µÄ¿ØÖÆÐÅÏ¢Õ¼ÓõÄÒ»¿éÄÚ´æ³ÆÎªÒ»¸ö¿ØÖÆ¿é°É£¬¿ØÖÆ¿éºÍ»º´æÒ³ÊÇÒ»Ò»¶ÔÓ¦µÄ£¬ËüÃǶ¼±»´æ·Åµ½
Buffer Pool ÖУ¬ÆäÖпØÖƿ鱻´æ·Åµ½ Buffer Pool µÄǰ±ß£¬»º´æÒ³±»´æ·Åµ½ Buffer
Pool ºó±ß£¬ËùÒÔÕû¸öBuffer Pool¶ÔÓ¦µÄÄÚ´æ¿Õ¼ä¿´ÆðÀ´¾ÍÊÇÕâÑùµÄ£º

¿ØÖÆ¿éºÍ»º´æÒ³Ö®¼äµÄÄǸöË鯬ÊǸöÊ²Ã´ÄØ£¿ÄãÏëÏë°¡£¬Ã¿Ò»¸ö¿ØÖƿ鶼¶ÔÓ¦Ò»¸ö»º´æÒ³£¬ÄÇÔÚ·ÖÅä×ã¹»¶àµÄ¿ØÖÆ¿éºÍ»º´æÒ³ºó£¬¿ÉÄÜÊ£ÓàµÄÄǵã¶ù¿Õ¼ä²»¹»Ò»¶Ô¿ØÖÆ¿éºÍ»º´æÒ³µÄ´óС£¬×ÔÈ»¾ÍÓò»µ½à¶£¬Õâ¸öÓò»µ½µÄÄǵã¶ùÄÚ´æ¿Õ¼ä¾Í±»³ÆÎªË鯬ÁË¡£µ±È»£¬Èç¹ûÄã°ÑBuffer
PoolµÄ´óСÉèÖõĸոպõϰ£¬Ò²¿ÉÄܲ»»á²úÉúË鯬¡«
Ç°ÃæÎÒÃÇÖªµÀÁË»º³å³ØµÄ½á¹¹¡£½ÓÏÂÀ´ËµInnoDB´æ´¢ÒýÇæÊÇÔõô¶Ô»º³å³Ø½øÐйÜÀíµÄ¡£½²ÏÂÎÒµ±Ê±µÄÀ§»ó°É£¬£¨Õⲿ·Ö¿ÉÒÔ²»¿´£¬ÒòΪÓÐЩÃû´Ê»¹Ã»Éæ¼°µ½£©¿´¡¶Mysql¼¼ÊõÄÚÄ»¡·Õâ±¾Ê飬½²LRU
List±È½Ï¶à£¬Free ListÖ»ÊÇ˳´øÒ»¹ý£¬Ã»Óн«free list³õʼʱÊÇÔõô·ÖÅäµÄ»òÕßÊÇʲôÑùµÄ½á¹¹£¬µ¼ÖÂÎÒ¶Ô»º³å³ØµÄ¹ÜÀí×ÜÊÇÏëÏó²»³öÀ´£¬ºóÀ´¾¹ýÔÚÍøÉÏѰÕÒ×ÊÁÏ£¬ËãÊÇŪÃ÷°×ÁË¡£À´¿´Ò»Ï°ɣº
µ±ÎÒÃÇ×î³õÆô¶¯MySQL·þÎñÆ÷µÄʱºò£¬ÐèÒªÍê³É¶ÔBuffer PoolµÄ³õʼ»¯¹ý³Ì£¬¾ÍÊÇ·ÖÅäBuffer
PoolµÄÄÚ´æ¿Õ¼ä£¬°ÑËü»®·Ö³ÉÈô¸É¶Ô¿ØÖÆ¿éºÍ»º´æÒ³¡£µ«ÊÇ´Ëʱ²¢Ã»ÓÐÕæÊµµÄ´ÅÅÌÒ³±»»º´æµ½Buffer
PoolÖУ¨ÒòΪ»¹Ã»ÓÐÓõ½£©£¬Ö®ºóËæ×ųÌÐòµÄÔËÐУ¬»á²»¶ÏµÄÓдÅÅÌÉϵÄÒ³±»»º´æµ½Buffer PoolÖУ¬ÄÇôÎÊÌâÀ´ÁË£¬´Ó´ÅÅÌÉ϶Áȡһ¸öÒ³µ½Buffer
PoolÖеÄʱºò¸Ã·Åµ½Äĸö»º´æÒ³µÄλÖÃÄØ£¿»òÕß˵ÔõÃ´Çø·ÖBuffer PoolÖÐÄÄЩ»º´æÒ³ÊÇ¿ÕÏеģ¬ÄÄЩÒѾ±»Ê¹ÓÃÁËÄØ£¿ÎÒÃÇ×îºÃÔÚij¸öµØ·½¼Ç¼һÏÂÄÄЩҳÊÇ¿ÉÓõģ¬ÎÒÃÇ¿ÉÒÔ°ÑËùÓпÕÏеÄÒ³°ü×°³ÉÒ»¸ö½Úµã×é³ÉÒ»¸öÁ´±í£¬Õâ¸öÁ´±íÒ²¿ÉÒÔ±»³Æ×÷FreeÁ´±í£¨»òÕß˵¿ÕÏÐÁ´±í£©¡£ÒòΪ¸Õ¸ÕÍê³É³õʼ»¯µÄBuffer
PoolÖÐËùÓеĻº´æÒ³¶¼ÊÇ¿ÕÏеģ¬ËùÒÔÿһ¸ö»º´æÒ³¶¼»á±»¼ÓÈëµ½FreeÁ´±íÖУ¬¼ÙÉè¸ÃBuffer PoolÖпÉÈÝÄɵĻº´æÒ³ÊýÁ¿Îªn£¬ÄÇÔö¼ÓÁËFreeÁ´±íµÄЧ¹ûͼ¾ÍÊÇÕâÑùµÄ£º

´ÓͼÖпÉÒÔ¿´³ö£¬ÎÒÃÇΪÁ˹ÜÀíºÃÕâ¸öFreeÁ´±í£¬ÌØÒâΪÕâ¸öÁ´±í¶¨ÒåÁËÒ»¸ö¿ØÖÆÐÅÏ¢£¬Àï±ß¶ù°üº¬×ÅÁ´±íµÄÍ·½ÚµãµØÖ·£¬Î²½ÚµãµØÖ·£¬ÒÔ¼°µ±Ç°Á´±íÖнڵãµÄÊýÁ¿µÈÐÅÏ¢¡£ÎÒÃÇÔÚÿ¸öFreeÁ´±íµÄ½ÚµãÖж¼¼Ç¼ÁËij¸ö»º´æÒ³¿ØÖÆ¿éµÄµØÖ·£¬¶øÃ¿¸ö»º´æÒ³¿ØÖƿ鶼¼Ç¼×ŶÔÓ¦µÄ»º´æÒ³µØÖ·£¬ËùÒÔÏ൱ÓÚÿ¸öFreeÁ´±í½Úµã¶¼¶ÔÓ¦Ò»¸ö¿ÕÏеĻº´æÒ³¡£
ÓÐÁËÕâ¸öFreeÁ´±íʶù¾ÍºÃ°ìÁË£¬Ã¿µ±ÐèÒª´Ó´ÅÅÌÖмÓÔØÒ»¸öÒ³µ½Buffer PoolÖÐʱ£¬¾Í´ÓFreeÁ´±íÖÐȡһ¸ö¿ÕÏеĻº´æÒ³£¬²¢ÇҰѸûº´æÒ³¶ÔÓ¦µÄ¿ØÖÆ¿éµÄÐÅÏ¢ÌîÉÏ£¬È»ºó°Ñ¸Ã»º´æÒ³¶ÔÓ¦µÄFreeÁ´±í½Úµã´ÓÁ´±íÖÐÒÆ³ý£¬±íʾ¸Ã»º´æÒ³ÒѾ±»Ê¹ÓÃÁË¡«
ÎÒ¾õµÃÔ×÷ÕßÕⲿ·Ö½²µÄ·Ç³£ºÃ£¬Í¼Ò²ºÜÓÃÐÄ£¬Ö±½Ó½â¾öÁËÎÒµÄÒÉÎÊ¡£
²»ÒªÒòΪ×ßµÄ̫Զ¶øÍü¼ÇΪʲô³ö·¢¡£
¼òµ¥»Ø¹Ëһϣ¬ÎªÊ²Ã´½²free list£¿ÊÇΪÁ˽²Ôõô¹ÜÀíbuffer pool¶Ô°É¡£ÄÇfree list¾ÍÏ൱ÓÚÊÇÊý¾Ý¿â·þÎñ¸Õ¸ÕÆô¶¯Ã»ÓÐÊý¾Ýҳʱ£¬Î¬»¤buffer
poolµÄ¿ÕÏлº´æÒ³µÄÊý¾Ý½á¹¹¡£
ÏÂÃæÔÙÀ´¼òµ¥µØ»Ø¹ËBuffer PoolµÄ¹¤×÷»úÖÆ¡£Buffer PoolÁ½¸ö×îÖ÷ÒªµÄ¹¦ÄÜ£ºÒ»¸öÊǼÓËÙ¶Á£¬Ò»¸öÊǼÓËÙд¡£¼ÓËÙ¶ÁÄØ£¿
¾ÍÊǵ±ÐèÒª·ÃÎÊÒ»¸öÊý¾ÝÒ³ÃæµÄʱºò£¬Èç¹ûÕâ¸öÒ³ÃæÒѾÔÚ»º´æ³ØÖУ¬ÄÇô¾Í²»ÔÙÐèÒª·ÃÎÊ´ÅÅÌ£¬Ö±½Ó´Ó»º³å³ØÖоÍÄÜ»ñÈ¡Õâ¸öÒ³ÃæµÄÄÚÈÝ¡£¼ÓËÙÐ´ÄØ£¿¾ÍÊǵ±ÐèÒªÐÞ¸ÄÒ»¸öÒ³ÃæµÄʱºò£¬ÏȽ«Õâ¸öÒ³ÃæÔÚ»º³å³ØÖнøÐÐÐ޸쬼ÇÏÂÏà¹ØµÄÖØ×öÈÕÖ¾£¬Õâ¸öÒ³ÃæµÄÐ޸ľÍËãÒѾÍê³ÉÁË¡£ÖÁÓÚÕâ¸ö±»Ð޸ĵÄÒ³ÃæÊ²Ã´Ê±ºòÕæÕýˢе½´ÅÅÌ£¬Õâ¸öÊǺǫ́ˢÐÂÏß³ÌÀ´Íê³ÉµÄ¡£
ÔÚʵÏÖÉÏÃæÁ½¸ö¹¦ÄܵÄͬʱ£¬ÐèÒª¿¼Âǿ͹ÛÌõ¼þµÄÏÞÖÆ£¬ÒòΪ»úÆ÷µÄÄÚ´æ´óСÊÇÓÐÏ޵ģ¬ËùÒÔMySQLµÄInnoDB
Buffer PoolµÄ´óСͬÑùÊÇÓÐÏ޵ģ¬Èç¹ûÐèÒª»º´æµÄÒ³Õ¼ÓõÄÄÚ´æ´óС³¬¹ýÁËBuffer Pool´óС£¬Ò²¾ÍÊÇFreeÁ´±íÖÐÒѾûÓжàÓàµÄ¿ÕÏлº´æÒ³µÄʱºòÆñ²»ÊǺÜÞÏÞΣ¬·¢ÉúÁËÕâÑùµÄʶù¸ÃÕ¦°ì£¿µ±È»ÊǰÑijЩ¾ÉµÄ»º´æÒ³´ÓBuffer
PoolÖÐÒÆ³ý£¬È»ºóÔÙ°ÑеÄÒ³·Å½øÀ´à¶¡« ÄÇôÎÊÌâÀ´ÁË£¬ÒƳýÄÄЩ»º´æÒ³ÄØ£¿
ΪÁ˻شðÕâ¸öÎÊÌ⣬ÎÒÃÇ»¹ÐèÒª»Øµ½ÎÒÃÇÉèÁ¢Buffer PoolµÄ³õÖÔ£¬ÎÒÃǾÍÊÇÏë¼õÉٺʹÅÅ̵ÄI/O½»»¥£¬×îºÃÿ´ÎÔÚ·ÃÎÊij¸öÒ³µÄʱºòËü¶¼ÒѾ±»»º´æµ½Buffer
PoolÖÐÁË¡£¼ÙÉèÎÒÃÇÒ»¹²·ÃÎÊÁËn´ÎÒ³£¬ÄÇô±»·ÃÎʵÄÒ³ÒѾÔÚ»º´æÖеĴÎÊý³ýÒÔn¾ÍÊÇËùνµÄ»º´æÃüÖÐÂÊ£¬ÎÒÃÇµÄÆÚÍû¾ÍÊÇÈûº´æÃüÖÐÂÊÔ½¸ßÔ½ºÃ¡«
ÔõôÌá¸ß»º´æÃüÖÐÂÊÄØ£¿InnoDB Buffer Pool²ÉÓþµäµÄLRUËã·¨À´½øÐÐÒ³ÃæÌÔÌ£¬ÒÔÌá¸ß»º´æÃüÖÐÂÊ¡£µ±Buffer
PoolÖв»ÔÙÓпÕÏеĻº´æÒ³Ê±£¬¾ÍÐèÒªÌÔ̵ô²¿·Ö×î½üºÜÉÙʹÓõĻº´æÒ³¡£²»¹ý£¬ÎÒÃÇÔõô֪µÀÄÄЩ»º´æÒ³×î½üƵ·±Ê¹Óã¬ÄÄЩ×î½üºÜÉÙʹÓÃÄØ£¿ºÇºÇ£¬ÉñÆæµÄÁ´±íÔÙÒ»´ÎÅÉÉÏÁËÓ󡣬ÎÒÃÇ¿ÉÒÔÔÙ´´½¨Ò»¸öÁ´±í£¬ÓÉÓÚÕâ¸öÁ´±íÊÇΪÁ˰´ÕÕ×î½ü×îÉÙʹÓõÄÔÔòÈ¥ÌÔÌ»º´æÒ³µÄ£¬ËùÒÔÕâ¸öÁ´±í¿ÉÒÔ±»³ÆÎªLRUÁ´±í£¨Least
Recently Used£©¡£µ±ÎÒÃÇÐèÒª·ÃÎÊij¸öҳʱ£¬¿ÉÒÔÕâÑù´¦ÀíLRUÁ´±í£º
Èç¹û¸ÃÒ³²»ÔÚBuffer PoolÖУ¬ÔڰѸÃÒ³´Ó´ÅÅ̼ÓÔØµ½Buffer PoolÖеĻº´æÒ³Ê±£¬¾Í°Ñ¸Ã»º´æÒ³°ü×°³É½ÚµãÈûµ½Á´±íµÄÍ·²¿¡£
Èç¹û¸ÃÒ³ÔÚBuffer Po+olÖУ¬ÔòÖ±½Ó°Ñ¸ÃÒ³¶ÔÓ¦µÄLRUÁ´±í½ÚµãÒÆ¶¯µ½Á´±íµÄÍ·²¿¡£
µ«ÊÇÕâÑù×ö»áÓÐһЩÐÔÄÜÉϵÄÎÊÌ⣬±ÈÈçÄãµÄÒ»´ÎÈ«±íɨÃè»òÒ»´ÎÂß¼±¸·Ý¾Í°ÑÈÈÊý¾Ý¸ø³åÍêÁË£¬¾Í»áµ¼Öµ¼Ö»º³å³ØÎÛȾÎÊÌ⣡Buffer
PoolÖеÄËùÓÐÊý¾ÝÒ³¶¼±»»»ÁËÒ»´ÎѪ£¬ÆäËû²éѯÓï¾äÔÚÖ´ÐÐʱÓÖµÃÖ´ÐÐÒ»´Î´Ó´ÅÅ̼ÓÔØµ½Buffer PoolµÄ²Ù×÷£¬¶øÕâÖÖÈ«±íɨÃèµÄÓï¾äÖ´ÐÐµÄÆµÂÊÒ²²»¸ß£¬Ã¿´ÎÖ´Ðж¼Òª°ÑBuffer
PoolÖеĻº´æÒ³»»Ò»´ÎѪ£¬ÕâÑÏÖØµÄÓ°Ïìµ½ÆäËû²éѯ¶Ô Buffer Pool µÄʹÓã¬ÑÏÖØµÄ½µµÍÁË»º´æÃüÖÐÂÊ
£¡
ËùÒÔInnoDB´æ´¢ÒýÇæ¶Ô´«Í³µÄLRUËã·¨×öÁËһЩÓÅ»¯£¬ÔÚInnoDBÖмÓÈëÁËmidpoint¡£Ð¶Áµ½µÄÒ³£¬ËäÈ»ÊÇ×îзÃÎʵÄÒ³£¬µ«²¢²»ÊÇÖ±½Ó²åÈëµ½LRUÁбíµÄÊײ¿£¬¶øÊDzåÈëLRUÁбíµÄmidpointλÖá£Õâ¸öËã·¨³ÆÖ®Îªmidpoint
insertion stategy¡£Ä¬ÈÏÅäÖòåÈëµ½ÁÐ±í³¤¶ÈµÄ5/8´¦¡£midpointÓɲÎÊýinnodb_old_blocks_pct¿ØÖÆ¡£
midpoint֮ǰµÄÁÐ±í³ÆÖ®ÎªnewÁÐ±í£¬Ö®ºóµÄÁÐ±í³ÆÖ®ÎªoldÁÐ±í¡£¿ÉÒÔ¼òµ¥µÄ½«newÁбíÖеÄÒ³Àí½âΪ×îΪ»îÔ¾µÄÈȵãÊý¾Ý¡£
ͬʱInnoDB´æ´¢ÒýÇæ»¹ÒýÈëÁËinnodb_old_blocks_timeÀ´±íʾҳ¶ÁÈ¡µ½midλÖÃÖ®ºóÐèÒªµÈ´ý¶à¾Ã²Å»á±»¼ÓÈëµ½LRUÁбíµÄÈȶˡ£¿ÉÒÔͨ¹ýÉèÖøòÎÊý±£Ö¤ÈȵãÊý¾Ý²»ÇáÒ×±»Ë¢³ö¡£
ºÃÁË£¬»ù±¾ÄÃÏÂÁËLRU listºó£¬ÎÒÃǼÌÐø¡£Ç°ÃæÎÒÃǽ²µ½Ò³Ãæ¸üÐÂÊÇÔÚ»º´æ³ØÖÐÏȽøÐеģ¬ÄÇËü¾ÍºÍ´ÅÅÌÉϵÄÒ³²»Ò»ÖÂÁË£¬ÕâÑùµÄ»º´æÒ³Ò²±»³ÆÎªÔàÒ³£¨Ó¢ÎÄÃû£ºdirty
page£©¡£ËùÒÔÐèÒª¿¼ÂÇÕâЩ±»Ð޸ĵÄÒ³ÃæÊ²Ã´Ê±ºòˢе½´ÅÅÌ£¿ÒÔʲôÑùµÄ˳Ðòˢе½´ÅÅÌ£¿µ±È»£¬×î¼òµ¥µÄ×ö·¨¾ÍÊÇÿ·¢ÉúÒ»´ÎÐ޸ľÍÁ¢¼´Í¬²½µ½´ÅÅÌÉ϶ÔÓ¦µÄÒ³ÉÏ£¬µ«ÊÇÆµ·±µÄÍù´ÅÅÌÖÐдÊý¾Ý»áÑÏÖØµÄÓ°Ïì³ÌÐòµÄÐÔÄÜ£¨±Ï¾¹´ÅÅÌÂýµÄÏñÎÚ¹êÒ»Ñù£©¡£ËùÒÔÿ´ÎÐ޸Ļº´æÒ³ºó£¬ÎÒÃDz¢²»×ż±Á¢¼´°ÑÐÞ¸Äͬ²½µ½´ÅÅÌÉÏ£¬¶øÊÇÔÚδÀ´µÄij¸öʱ¼äµã½øÐÐͬ²½£¬Óɺǫ́ˢÐÂÏß³ÌÒÀ´Îˢе½´ÅÅÌ£¬ÊµÏÖÐÞ¸ÄÂ䵨µ½´ÅÅÌ¡£
µ«ÊÇÈç¹û²»Á¢¼´Í¬²½µ½´ÅÅ̵ϰ£¬ÄÇÖ®ºóÔÙͬ²½µÄʱºòÎÒÃÇÔõô֪µÀBuffer PoolÖÐÄÄЩҳÊÇÔàÒ³£¬ÄÄЩҳ´ÓÀ´Ã»±»Ð޸ĹýÄØ£¿×ܲ»ÄܰÑËùÓеĻº´æÒ³¶¼Í¬²½µ½´ÅÅÌÉϰɣ¬¼ÙÈçBuffer
Pool±»ÉèÖõĺܴ󣬱ȷ½Ëµ300G£¬ÄÇÒ»´ÎÐÔͬ²½Õâô¶àÊý¾ÝÆñ²»ÊÇÒªÂýËÀ£¡ËùÒÔ£¬ÎÒÃDz»µÃ²»ÔÙ´´½¨Ò»¸ö´æ´¢ÔàÒ³µÄÁ´±í£¬·²ÊÇÔÚLRUÁ´±íÖб»Ð޸ĹýµÄÒ³¶¼ÐèÒª¼ÓÈëÕâ¸öÁ´±íÖУ¬ÒòΪÕâ¸öÁ´±íÖеÄÒ³¶¼ÊÇÐèÒª±»Ë¢Ðµ½´ÅÅÌÉϵģ¬ËùÒÔÒ²½ÐFLUSHÁ´±í£¬ÓÐʱºòÒ²»á±»¼òдΪFLUÁ´±í¡£Á´±íµÄ¹¹ÔìºÍFreeÁ´±í²î²»¶à£¬Õâ¾Í²»×¸ÊöÁË¡£ÕâÀïµÄÔàÒ³ÐÞ¸ÄÖ¸µÄ´ËÒ³±»¼ÓÔØ½øBuffer
PoolºóµÚÒ»´Î±»Ð޸ģ¬Ö»ÓеÚÒ»´Î±»ÐÞ¸Äʱ²ÅÐèÒª¼ÓÈëFLUSHÁ´±í£¨´úÂëÖÐÊǸù¾ÝPageÍ·²¿µÄoldest_modification
== 0À´ÅжÏÊÇ·ñÊǵÚÒ»´ÎÐ޸ģ©£¬Èç¹ûÕâ¸öÒ³±»ÔÙ´ÎÐ޸ľͲ»»áÔٷŵ½FLUSHÁ´±íÁË£¬ÒòΪÒѾ´æÔÚ¡£ÐèҪעÒâµÄÊÇ£¬ÔàÒ³Êý¾Ýʵ¼Ê»¹ÔÚLRUÁ´±íÖУ¬¶øFLUSHÁ´±íÖеÄÔàÒ³¼Ç¼ֻÊÇͨ¹ýÖ¸ÕëÖ¸ÏòLRUÁ´±íÖеÄÔàÒ³¡£²¢ÇÒÔÚFLUSHÁ´±íÖеÄÔàÒ³ÊǸù¾Ýoldest_lsn£¨Õâ¸öÖµ±íʾÕâ¸öÒ³µÚÒ»´Î±»¸ü¸ÄʱµÄlsnºÅ£¬¶ÔÓ¦Öµoldest_modification£¬Ã¿¸öҳͷ²¿¼Ç¼£©½øÐÐÅÅÐòˢе½´ÅÅ̵ģ¬ÖµÔ½Ð¡±íʾҪ×îÏȱ»Ë¢Ð£¬±ÜÃâÊý¾Ý²»Ò»Ö¡£
×¢Ò⣺ÔàÒ³¼È´æÔÚÓÚLRUÁбíÖУ¬Ò²´æÔÚÓëFlushÁбíÖС£LRUÁбíÓÃÀ´¹ÜÀí»º³å³ØÖÐÒ³µÄ¿ÉÓÃÐÔ£¬FlushÁбíÓÃÀ´¹ÜÀí½«Ò³Ë¢Ð»شÅÅÌ£¬¶þÕß»¥²»Ó°Ïì¡£
ÕâÈý¸öÖØÒªÁÐ±í£¨LRU list£¬ free list£¬flush
list£©µÄ¹ØÏµ¿ÉÒÔÓÃÏÂͼ±íʾ£º

FreeÁ´±í¸úLRUÁ´±íµÄ¹ØÏµÊÇÏ໥Á÷ͨµÄ£¬Ò³ÔÚÕâÁ½¸öÁ´±í¼äÀ´»ØÖû»¡£¶øFLUSHÁ´±í¼Ç¼ÁËÔàÒ³Êý¾Ý£¬Ò²ÊÇͨ¹ýÖ¸ÕëÖ¸ÏòÁËLRUÁ´±í£¬ËùÒÔͼÖÐFLUSHÁ´±í±»LRUÁ´±í°ü¹ü¡£
¶þ¡¢CheckPoint¼¼Êõ
˵Í껺³å³Ø£¬ÏÂÃæËµCheckPoint¼¼Êõ¡£
CheckPoint¼¼ÊõÊÇÓÃÀ´½â¾öÈçϼ¸¸öÎÊÌ⣺
Ëõ¶ÌÊý¾Ý¿â»Ö¸´Ê±¼ä
»º³å³Ø²»¹»ÓÃʱ£¬½«Ôàҳˢе½´ÅÅÌ
ÖØ×öÈÕÖ¾²»¿ÉÓÃʱ£¬Ë¢ÐÂÔàÒ³
Ëõ¶ÌÊý¾Ý¿â»Ö¸´Ê±¼ä£¬ÖØ×öÈÕÖ¾ÖмǼÁ˵ÄcheckpointµÄλÖã¬Õâ¸öµã֮ǰµÄÒ³ÒѾˢлشÅÅÌ£¬Ö»ÐèÒª¶ÔcheckpointÖ®ºóµÄÖØ×öÈÕÖ¾½øÐлָ´¡£ÕâÑù¾Í´ó´óËõ¶ÌÁ˻ָ´Ê±¼ä¡£
»º³å³Ø²»¹»ÓÃʱ£¬¸ù¾ÝLRUËã·¨£¬Òç³ö×î½ü×îÉÙʹÓõÄÒ³£¬Èç¹ûҳΪÔàÒ³£¬Ç¿ÖÆÖ´ÐÐcheckpoint£¬½«ÔàҳˢлشÅÅÌ¡£
ÖØ×öÈÕÖ¾²»¿ÉÓã¬ÊÇÖ¸ÖØ×öÈÕÖ¾µÄÕⲿ·Ö²»¿ÉÒÔ±»¸²¸Ç£¬ÎªÊ²Ã´£¿ÒòΪ£ºÓÉÓÚÖØ×öÈÕÖ¾µÄÉè¼ÆÊÇÑ»·Ê¹Óõġ£Õⲿ·Ö¶ÔÓ¦µÄÊý¾Ý»¹Î´Ë¢Ðµ½´ÅÅÌÉÏ¡£Êý¾Ý¿â»Ö¸´Ê±£¬Èç¹û²»ÐèÒªÕⲿ·ÖÈÕÖ¾£¬¼´¿É±»¸²¸Ç£»Èç¹ûÐèÒª£¬±ØÐëÇ¿ÖÆÖ´ÐÐcheckpoint£¬½«»º³å³ØÖеÄÒ³ÖÁÉÙˢе½µ±Ç°ÖØ×öÈÕÖ¾µÄλÖá£
checkpointÿ´ÎˢжàÉÙÒ³µ½´ÅÅÌ£¿Ã¿´Î´ÓÄÄÀïÈ¡ÔàÒ³£¿Ê²Ã´Ê±¼ä´¥·¢checkpoint£¿
InnoDB´æ´¢ÒýÇæÄÚ²¿£¬Á½ÖÖcheckpoint£¬·Ö±ðΪ:
Sharp Checkpoint
Fuzzy Checkpoint
Sharp Checkpoint·¢ÉúÔÚÊý¾Ý¿â¹Ø±Õʱ£¬½«ËùÓеÄÔàÒ³¶¼Ë¢Ð»شÅÅÌ£¬ÕâÊÇĬÈϵŤ×÷·½Ê½£¬¼´²ÎÊý£ºinnodb_fast_shutdown=1¡£
²»ÊÊÓÃÓÚÊý¾Ý¿âÔËÐÐʱµÄˢС£
ÔÚÊý¾Ý¿âÔËÐÐʱ£¬InnoDB´æ´¢ÒýÇæÄÚ²¿²ÉÓÃFuzzy Checkpoint£¬Ö»Ë¢ÐÂÒ»²¿·ÖÔàÒ³¡£
¼¸ÖÖ·¢ÉúFuzzy CheckpointµÄÇé¿ö£º
¢ÙMasterThread Checkpoint
Ò첽ˢУ¬Ã¿Ãë»òÿ10Ãë´Ó»º³å³ØÔàÒ³ÁбíË¢ÐÂÒ»¶¨±ÈÀýµÄÒ³»Ø´ÅÅÌ¡£Ò첽ˢУ¬¼´´ËʱInnoDB´æ´¢ÒýÇæ¿ÉÒÔ½øÐÐÆäËû²Ù×÷£¬Óû§²éѯÏ̲߳»»áÊÜ×è¡£
¢ÚFLUSH_LRU_LIST Checkpoint
InnoDB´æ´¢ÒýÇæÐèÒª±£Ö¤LRUÁбíÖв¶àÓÐ100¸ö¿ÕÏÐÒ³¿É¹©Ê¹Óá£ÔÚInnoDB 1.1.x°æ±¾Ö®Ç°£¬Óû§²éѯÏ̻߳á¼ì²éLRUÁбíÊÇ·ñÓÐ×ã¹»µÄ¿Õ¼ä²Ù×÷¡£Èç¹ûûÓУ¬¸ù¾ÝLRUËã·¨£¬Òç³öLRUÁбíβ¶ËµÄÒ³£¬Èç¹ûÕâЩҳÓÐÔàÒ³£¬ÐèÒª½øÐÐcheckpoint¡£Òò´Ë½Ð£ºflush_lru_list
checkpoint¡£
InnoDB 1.2.x¿ªÊ¼£¬Õâ¸ö¼ì²é·ÅÔÚÁ˵¥¶ÀµÄ½ø³Ì£¨Page Cleaner£©ÖнøÐС£ºÃ´¦£º1.¼õÉÙmaster
ThreadµÄѹÁ¦ 2.¼õÇáÓû§Ïß³Ì×èÈû¡£
ÉèÖòÎÊý£ºinnodb_lru_scan_dept£º¿ØÖÆLRUÁбíÖпÉÓÃÒ³µÄÊýÁ¿£¬¸ÃֵĬÈÏ1024
¢ÛAsync/Sync Flush Checkpoint
Ö¸ÖØ×öÈÕÖ¾²»¿ÉÓõÄÇé¿ö£¬ÐèÒªÇ¿ÖÆË¢ÐÂÒ³»Ø´ÅÅÌ£¬´ËʱµÄҳʱÔàÒ³ÁбíѡȡµÄ¡£
ÕâÖÖÇé¿öÊDZ£Ö¤ÖØ×öÈÕÖ¾µÄ¿ÉÓÃÐÔ£¬Ëµ°×Á˾ÍÊÇ£¬ÖØ×öÈÕÖ¾ÖпÉÒÔÑ»·¸²¸ÇµÄ²¿·Ö¿Õ¼äÌ«ÉÙÁË£¬»»ÖÖ˵·¨£¬¾ÍÊǼ«¶Ìʱ¼äÄÚ²úÉúÁË´óÁ¿µÄredo
log¡£
½ÓÏÂÀ´»áÓм¸¸ö±äÁ¿£¬Í¼½âÒ²²»ÄÑ£¬×Ðϸ¿´¿´¡£
InnoDB´æ´¢ÒýÇæ£¬Í¨¹ýLSN£¨Log Sequence Number£©À´±ê¼Ç°æ±¾£¬LSNÊÇ8×Ö½ÚµÄÊý×Ö¡£Ã¿¸öÒ³ÓÐLSN£¬ÖØ×öÈÕÖ¾ÓÐLSN£¬checkpointÓÐLSN¡£
дÈëÈÕÖ¾µÄLSN:redo_lsn
ˢлشÅÅ̵Ä×îÐÂÒ³LSN:checkpoint_lsn
ÓÐÈç϶¨Òå:
checkpoint_age = redo_lsn - checkpoint_lsn
async_water_mark = 75% * total_redo_file_size
sync_water_mark = 90% * total_redo_file_size
ˢйý³ÌÈçÏÂͼËùʾ£º

¢ÜDirty Page too much Checkpoint
¼´Ôàҳ̫¶à£¬Ç¿ÖÆcheckpoint.±£Ö¤»º³å³ØÓÐ×ã¹»¿ÉÓõÄÒ³¡£
²ÎÊýÉèÖãºinnodb_max_dirty_pages_pct = 75 ±íʾ£ºµ±»º³å³ØÖÐÔàÒ³µÄÊýÁ¿Õ¼75%ʱ£¬Ç¿ÖÆcheckpoint¡£1.0.xÖ®ºóĬÈÏ75
Èý¡¢InnoDB¹Ø¼üÌØÐÔ
3.1²åÈ뻺³å
Insert BufferÊÇInnoDB´æ´¢ÒýÇæ¹Ø¼üÌØÐÔÖÐ×îÁîÈ˼¤¶¯ÓëÐ˷ܵÄÒ»¸ö¹¦ÄÜ¡£²»¹ýÕâ¸öÃû×Ö¿ÉÄÜ»áÈÃÈËÈÏΪ²åÈ뻺³åÊÇ»º³å³ØÖеÄÒ»¸ö×é³É²¿·Ö¡£Æäʵ²»È»£¬InnoDB»º³å³ØÖÐÓÐInsert
BufferÐÅÏ¢¹ÌÈ»²»´í£¬µ«ÊÇInsert BufferºÍÊý¾ÝÒ³Ò»Ñù£¬Ò²ÊÇÎïÀíÒ³µÄÒ»¸ö×é³É²¿·Ö¡£
Ò»°ãÇé¿öÏ£¬Ö÷¼üÊÇÐÐΨһµÄ±êʶ·û¡£Í¨³£Ó¦ÓóÌÐòÖÐÐмǼµÄ²åÈë˳ÐòÊǰ´ÕÕÖ÷¼üµÝÔöµÄ˳Ðò½øÐвåÈëµÄ¡£Òò´Ë£¬²åÈë¾Û¼¯Ë÷ÒýÒ»°ãÊÇ˳ÐòµÄ£¬²»ÐèÒª´ÅÅ̵ÄËæ»ú¶ÁÈ¡¡£ÒòΪ£¬¶ÔÓÚ´ËÀàÇé¿öϵIJåÈ룬ËÙ¶È»¹ÊǷdz£¿ìµÄ¡££¨Èç¹ûÖ÷¼üÀàÊÇUUIDÕâÑùµÄÀ࣬ÄÇô²åÈëºÍ¸¨ÖúË÷ÒýÒ»Ñù£¬Ò²ÊÇËæ»úµÄ¡££©
Èç¹ûË÷ÒýÊǷǾۼ¯µÄÇÒ²»Î¨Ò»¡£ÔÚ½øÐвåÈë²Ù×÷ʱ£¬Êý¾ÝµÄ´æ·Å¶ÔÓڷǾۼ¯Ë÷ÒýÒ¶×Ó½ÚµãµÄ²åÈë²»ÊÇ˳ÐòµÄ£¬ÕâʱÐèÒªÀëÉ¢µØ·ÃÎʷǾۼ¯Ë÷ÒýÒ³£¬ÓÉÓÚËæ»ú¶ÁÈ¡µÄ´æÔÚ¶øµ¼ÖÂÁ˲åÈë²Ù×÷ÐÔÄÜϽµ¡£ÕâÊÇÒòΪB+Ê÷µÄÌØÐÔ¾ö¶¨Á˷Ǿۼ¯Ë÷Òý²åÈëµÄÀëÉ¢ÐÔ¡£
Insert BufferµÄÉè¼Æ£¬¶ÔÓڷǾۼ¯Ë÷ÒýµÄ²åÈëºÍ¸üвÙ×÷£¬²»ÊÇÿһ´ÎÖ±½Ó²åÈëµ½Ë÷ÒýÒ³ÖУ¬¶øÊÇÏÈÅжϲåÈë·Ç¾Û¼¯Ë÷ÒýÒ³ÊÇ·ñÔÚ»º³å³ØÖУ¬Èô´æÔÚ£¬ÔòÖ±½Ó²åÈ룬²»´æÔÚ£¬ÔòÏÈ·ÅÈëÒ»¸öInsert
Buffer¶ÔÏóÖС£Êý¾Ý¿âÕâ¸ö·Ç¾Û¼¯µÄË÷ÒýÒѾ²åµ½Ò¶×ӽڵ㣬¶øÊµ¼Ê²¢Ã»ÓУ¬Ö»ÊÇ´æ·ÅÔÚÁíÒ»¸öλÖá£È»ºóÔÙÒÔÒ»¶¨µÄƵÂʺÍÇé¿ö½øÐÐInsert
BufferºÍ¸¨ÖúË÷ÒýÒ³×Ó½ÚµãµÄmerge£¨ºÏ²¢£©²Ù×÷£¬Õâʱͨ³£Äܽ«¶à¸ö²åÈëºÏ²¢µ½Ò»¸ö²Ù×÷ÖУ¨ÒòΪÔÚÒ»¸öË÷ÒýÒ³ÖУ©£¬Õâ¾Í´ó´óÌá¸ßÁ˶ÔÓڷǾۼ¯Ë÷Òý²åÈëµÄÐÔÄÜ¡£
ÐèÒªÂú×ãµÄÁ½¸öÌõ¼þ£º
Ë÷ÒýÊǸ¨ÖúË÷Òý£»
Ë÷Òý²»ÊÇΨһµÄ¡£
¸¨ÖúË÷Òý²»ÄÜÊÇΨһµÄ£¬ÒòΪÔÚ²åÈ뻺³åʱ£¬Êý¾Ý¿â²¢²»È¥²éÕÒË÷ÒýÒ³À´ÅжϲåÈëµÄ¼Ç¼µÄΨһÐÔ¡£Èç¹ûÈ¥²éÕҿ϶¨ÓÖ»áÓÐÀëÉ¢¶ÁÈ¡µÄÇé¿ö·¢Éú£¬´Ó¶øµ¼ÖÂInsert
BufferʧȥÁËÒâÒå¡£
3.2Á½´Îд
Èç¹û˵²åÈ뻺³åÊÇΪÁËÌá¸ßдÐÔÄܵϰ£¬ÄÇôÁ½´ÎдÊÇΪÁËÌá¸ß¿É¿¿ÐÔ¡£
½éÉÜÁ½´Îд֮ǰ£¬ËµÒ»Ï²¿·ÖдʧЧ£º
ÏëÏóÕâôһ¸ö³¡¾°£¬µ±Êý¾Ý¿âÕýÔÚ´ÓÄÚ´æÏò´ÅÅÌдһ¸öÊý¾Ýҳʱ£¬Êý¾Ý¿âå´»ú£¬´Ó¶øµ¼ÖÂÕâ¸öҳֻдÁ˲¿·ÖÊý¾Ý£¬Õâ¾ÍÊDz¿·ÖдʧЧ£¬Ëü»áµ¼ÖÂÊý¾Ý¶ªÊ§¡£ÕâʱÊÇÎÞ·¨Í¨¹ýÖØ×öÈÕÖ¾»Ö¸´µÄ£¬ÒòÎªÖØ×öÈÕÖ¾¼Ç¼µÄÊǶÔÒ³µÄÎïÀíÐ޸ģ¬Èç¹ûÒ³±¾ÉíÒѾË𻵣¬ÖØ×öÈÕÖ¾Ò²ÎÞÄÜΪÁ¦¡£
´ÓÉÏÃæ·ÖÎöÎÒÃÇÖªµÀ£¬ÔÚ²¿·ÖдʧЧµÄÇé¿öÏ£¬ÎÒÃÇÔÚÓ¦ÓÃÖØ×öÈÕ־֮ǰ£¬ÐèÒªÔʼҳµÄÒ»¸ö¸±±¾£¬Á½´Îд¾ÍÊÇΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÏÂÃæÊÇËüµÄÔÀíͼ£ºimage.png
Á½´ÎдÐèÒª¶îÍâÌí¼ÓÁ½¸ö²¿·Ö£º

1£©ÄÚ´æÖеÄÁ½´Îд»º³å£¨doublewrite buffer£©£¬´óСΪ2MB
2£©´ÅÅÌÉϹ²Ïí±í¿Õ¼äÖÐÁ¬ÐøµÄ128Ò³£¬´óСҲΪ2MB
ÆäÔÀíÊÇÕâÑùµÄ£º
1£©µ±Ë¢Ð»º³å³ØÔàҳʱ£¬²¢²»Ö±½Óдµ½Êý¾ÝÎļþÖУ¬¶øÊÇÏÈ¿½±´ÖÁÄÚ´æÖеÄÁ½´Îд»º³åÇø¡£
2£©½Ó×Å´ÓÁ½´Îд»º³åÇø·ÖÁ½´ÎдÈë´ÅÅ̹²Ïí±í¿Õ¼äÖУ¬Ã¿´ÎдÈë1MB
3£©´ýµÚ2²½Íê³Éºó£¬ÔÙ½«Á½´Îд»º³åÇøÐ´ÈëÊý¾ÝÎļþ
ÕâÑù¾Í¿ÉÒÔ½â¾öÉÏÎÄÌáµ½µÄ²¿·ÖдʧЧµÄÎÊÌ⣬ÒòΪÔÚ´ÅÅ̹²Ïí±í¿Õ¼äÖÐÒÑÓÐÊý¾ÝÒ³¸±±¾¿½±´£¬Èç¹ûÊý¾Ý¿âÔÚҳдÈëÊý¾ÝÎļþµÄ¹ý³ÌÖÐå´»ú£¬ÔÚʵÀý»Ö¸´Ê±£¬¿ÉÒÔ´Ó¹²Ïí±í¿Õ¼äÖÐÕÒµ½¸ÃÒ³¸±±¾£¬½«Æä¿½±´¸²¸ÇÔÓеÄÊý¾ÝÒ³£¬ÔÙÓ¦ÓÃÖØ×öÈÕÖ¾¼´¿É¡£
ÆäÖеÚ2²½ÊǶîÍâµÄÐÔÄÜ¿ªÏú£¬µ«ÓÉÓÚ´ÅÅ̹²Ïí±í¿Õ¼äÊÇÁ¬ÐøµÄ£¬Òò´Ë¿ªÏú²»ÊǺܴ󡣿ÉÒÔͨ¹ý²ÎÊýskip_innodb_doublewrite½ûÓÃÁ½´Îд¹¦ÄÜ£¬Ä¬ÈÏÊÇ¿ªÆôµÄ£¬Ç¿ÁÒ½¨Ò鿪Æô¸Ã¹¦ÄÜ¡£
MySQL InnoDBÌØÐÔ£ºÁ½´Îд£¨DoubleWrite£©
InnoDBÌØÐÔÖ®-Á½´Îд
3.3×ÔÊÊÓ¦¹þÏ£Ë÷Òý
¹þÏ£ÊÇÒ»Öַdz£¿ìµÄ²éÕÒ·½·¨£¬ÔÚÒ»°ãÇé¿öʱ¼ä¸´ÔÓ¶ÈΪO(1)¡£¶øB+Ê÷µÄ²éÕÒ´ÎÊý£¬È¡¾öÓÚB+Ê÷µÄ¸ß¶È£¬ÔÚÉú³É»·¾³ÖУ¬B+Ê÷µÄ¸ß¶ÈÒ»°ãΪ3-4²ã£¬²»ÐèÒª²éѯ3-4´Î¡£
InnoDB´æ´¢ÒýÇæ»á¼à¿Ø¶Ô±íÉϸ÷Ë÷ÒýÒ³µÄ²éѯ¡£Èç¹û¹Û²ìµ½½¨Á¢¹þÏ£Ë÷Òý¿ÉÒÔÌáÉýËÙ¶È£¬Õâ¼òÀú¹þÏ£Ë÷Òý£¬³ÆÖ®Îª×ÔÊÊÓ¦¹þÏ£Ë÷Òý(Adaptive
Hash Index, AHI)¡£AHIÊÇͨ¹ý»º³å³ØµÄB+Ê÷Ò³¹¹Ôì¶øÀ´µÄ¡£Òò´Ë½¨Á¢µÄËٶȷdz£¿ì£¬ÇÒ²»Òª¶ÔÕûÕÅ±í¹¹½¨¹þÏ£Ë÷Òý¡£InnoDB´æ´¢ÒýÇæ»á×Ô¶¯¸ù¾Ý·ÃÎÊµÄÆµÂʺÍģʽÀ´×Ô¶¯µÄΪijЩÈȵãÒ³½¨Á¢¹þÏ£Ë÷Òý¡£
AHIÓÐÒ»¸öÒªÇ󣬶ÔÕâ¸öÒ³µÄÁ¬Ðø·ÃÎÊģʽ(²éѯÌõ¼þ)±ØÐëÒ»ÑùµÄ¡£ÀýÈçÁªºÏË÷Òý(a,b)Æä·ÃÎÊģʽ¿ÉÒÔÓÐÒÔÏÂÇé¿ö:
WHERE a=XXX;
WHERE a=xxx AND b=xxx¡£
Èô½»Ìæ½øÐÐÉÏÊöÁ½ÕŲéѯ£¬InnoDB´æ´¢ÒýÇæ²»»á¶Ô¸ÃÒ³¹¹ÔìAHI¡£´ËÍâAHI»¹ÓÐÈçÏÂÒªÇó£º
ÒÔ¸Ãģʽ·ÃÎÊÁË100´Î£»
ҳͨ¹ý¸Ãģʽ·ÃÎÊÁËN´Î£¬ÆäÖÐN=Ò³ÖмǼ/16¡£
¸ù¾Ý¹Ù·½ÎĵµÏÔʾ£¬ÆôÓÃAHIºó£¬¶ÁÈ¡ºÍдÈëµÄËÙ¶È¿ÉÒÔÌá¸ß2±¶£¬¸ºÔðË÷ÒýµÄÁ´½Ó²Ù×÷ÐÔÄÜ¿ÉÒÔÌá¸ß5±¶¡£ÆäÉè¼ÆË¼ÏëÊÇÊý¾Ý¿â×ÔÓÉ»¯µÄ£¬ÎÞÐèDBA¶ÔÊý¾Ý¿â½øÐÐÈËΪµ÷Õû¡£
3.4Òì²½IO(AIO)
ΪÁËÌá¸ß´ÅÅ̲Ù×÷ÐÔÄÜ£¬µ±Ç°µÄÊý¾Ý¿âϵͳ¶¼²ÉÓÃÒì²½IOµÄ·½Ê½À´´¦Àí´ÅÅ̲Ù×÷¡£InnoDBÒ²ÊÇÈç´Ë¡£
ÓëAIO¶ÔÓ¦µÄÊÇSync IO£¬¼´Ã¿½øÐÐÒ»´ÎIO²Ù×÷£¬ÐèÒªµÈ´ý´Ë´Î²Ù×÷½áÊø²ÅÄܼÌÐø½ÓÏÂÀ´µÄ²Ù×÷¡£µ«ÊÇÈç¹ûÓû§·¢³öµÄÊÇÒ»ÌõË÷ÒýɨÃèµÄ²éѯ£¬ÄÇôÕâÌõSQLÓï¾ä¿ÉÄÜÐèҪɨÃè¶à¸öË÷ÒýÒ³£¬Ò²¾ÍÊÇÐèÒª½øÐжà´ÎIO²Ù×÷¡£ÔÚÿɨÃèÒ»¸öÒ³²¢µÈ´ýÆäÍê³ÉÔÙ½øÐÐÏÂÒ»´ÎɨÃ裬ÕâÊÇûÓбØÒªµÄ¡£Óû§¿ÉÒÔÔÚ·¢³öÒ»¸öIOÇëÇóºóÁ¢¼´ÔÙ·¢³öÁíÍâÒ»¸öIOÇëÇ󣬵±È«²¿IOÇëÇó·¢ËÍÍê±Ïºó£¬µÈ´ýËùÓÐIO²Ù×÷Íê³É£¬Õâ¾ÍÊÇAIO¡£
AIOµÄÁíÍâÒ»¸öÓÅÊÆÊǽøÐÐIO Merge²Ù×÷£¬Ò²¾ÍÊǽ«¶à¸öIOºÏ²¢ÎªÒ»¸öIO²Ù×÷£¬ÕâÑù¿ÉÒÔÌá¸ßIOPSµÄÐÔÄÜ¡£
ÔÚInnoDB 1.1.x֮ǰ£¬AIOµÄʵÏÖÊÇͨ¹ýInnoDB´æ´¢ÒýÇæÖеĴúÂëÀ´Ä£ÄâµÄ¡£µ«ÊÇ´ÓÕâÖ®ºó£¬ÌṩÁËÄں˼¶±ðµÄAIOµÄÖ§³Ö£¬³ÆÎªNative
AIO¡£Native AIOÐèÒª²Ù×÷ϵͳÌṩ֧³Ö¡£WindowsºÍLinux¶¼Ö§³Ö£¬¶øMacÔòδÌṩ¡£ÔÚÑ¡ÔñMySQLÊý¾Ý¿â·þÎñÆ÷µÄ²Ù×÷ϵͳʱ£¬ÐèÒª¿¼ÂÇÕâ·½ÃæµÄÒòËØ¡£
MySQL¿ÉÒÔͨ¹ý²ÎÊýinnodb_use_native_aioÀ´¾ö¶¨ÊÇ·ñÆôÓÃNative AIO¡£ÔÚInnoDB´æ´¢ÒýÇæÖУ¬read
ahead·½Ê½µÄ¶ÁÈ¡¶¼ÊÇͨ¹ýAIOÍê³É£¬ÔàÒ³µÄˢУ¬Ò²ÊÇͨ¹ýAIOÍê³É¡£
3.5Ë¢ÐÂÁÚ½ÓÒ³
InnoDB´æ´¢ÒýÇæÔÚË¢ÐÂÒ»¸öÔàҳʱ£¬»á¼ì²â¸ÃÒ³ËùÔÚÇø(extent)µÄËùÓÐÒ³£¬Èç¹ûÊÇÔàÒ³£¬ÄÇôһÆðˢС£ÕâÑù×öµÄºÃ´¦ÊÇͨ¹ýAIO¿ÉÒÔ½«¶à¸öIOд²Ù×÷ºÏ²¢ÎªÒ»¸öIO²Ù×÷¡£¸Ã¹¤×÷»úÖÆÔÚ´«Í³»úе´ÅÅÌÏÂÓÐÏÔÖøÓÅÊÆ¡£µ«ÊÇÐèÒª¿¼ÂÇϰÉÁ½¸öÎÊÌâ:
ÊDz»Êǽ«²»ÔõôÔàµÄÒ³½øÐÐдÈ룬¶ø¸ÃÒ³Ö®ºóÓÖ»áºÜ¿ì±ä³ÉÔàÒ³£¿
¹Ì̬ӲÅÌÓкܸßIOPS£¬ÊÇ·ñ»¹ÐèÒªÕâ¸öÌØÐÔ£¿
Ϊ´ËInnoDB´æ´¢ÒýÇæ1.2.x°æ±¾¿ªÊ¼Ìṩ²ÎÊýinnodb_flush_neighborsÀ´¾ö¶¨ÊÇ·ñÆôÓ᣶ÔÓÚ´«Í³»úеӲÅ̽¨ÒéʹÓ㬶ø¶ÔÓÚ¹Ì̬ӲÅÌ¿ÉÒԹرա£
|