±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁËMySQL
InnoDBÄÚ´æºÍ»º³å³Ø·½ÃæµÄ֪ʶ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£ |
|
ÎÒÃǶ¼ÖªµÀ£¬InnoDBÒýÇæÊÇ»ùÓÚ´ÅÅÌ´æ´¢µÄ£¬µ«ÓÉÓÚÎïÀíÓ²ÅÌ·ÃÎÊËÙ¶ÈÓëÄÚ´æ·ÃÎÊËÙ¶È´æÔÚמ޴óµÄºè¹µ£¬InnoDB³£Óûº³å³Ø¼¼ÊõÀ´Ìá¸ßÊý¾Ý¿âµÄÐÔÄÜ¡£
Óë³£ÓõĻº´æË¼ÏëÀàËÆ£¬ÔÚÊý¾Ý¿âÖжÁȡҳµÄ²Ù×÷£¬Ê×ÏȽ«´ÅÅ̶Áµ½µÄÒ³·ÅÔÚ»º³å³Øµ±ÖУ¬ÏÂÒ»´ÎÔÙ¶ÁÏàͬҳʱ£¬Ïȼì²é¸ÃÒ³ÊÇ·ñÔÚ»º³å³Øµ±ÖС£ÈôÔÚ»º³å³ØÖУ¬Ôò¸ÃÒ³ÔÚ»º³å³ØÖб»ÃüÖУ¬Ö±½Ó¶ÁÈ¡¸ÃÒ³£¬·ñÔò¶ÁÈ¡´ÅÅÌÖеÄÒ³¡£¿É¼û£¬»º³å³ØµÄ´óС·Ç³£Ó°ÏìMySQLµÄÐÔÄÜ¡£»º³å³ØÔÚMySQLÓÃinnodb_buffer_pool_size±äÁ¿±íʾ£¬¿ÉÒÔÔÚmy.cnfÎļþÖÐÉèÖ㬲鿴·½Ê½ÈçÏÂͼ£¬¿É¼û£¬»º³å³ØµÄ´óСÊÇ134217728/1024/1024=128M(µ±È»ÔÚÉú²ú»·¾³ÏÂ128M̫С)¡£
show variables
like 'innodb_buffer_pool_size'\G; |
ÔÚÊý¾Ý¿âÖÐÐÞ¸ÄÒ³µÄ²Ù×÷£¬Ê×ÏÈÐ޸Ļº³å³ØÖÐÒ³µÄÊý¾Ý£¬È»ºóÒÔÒ»¶¨ÆµÂÊÒì²½µØ½«»º³å³ØÒ³Ë¢Ðµ½´ÅÅÌÉÏ£¬ÕâÖÖ¼¼Êõ½ÐCheckpoint»úÖÆ£¬ÕâÑùµÄÄ¿µÄÒ²ÊÇΪÁËÌá¸ßMySQLÕûÌåÐÔÄÜ¡£
»º³å³ØÊÇÒ»¿éºÜ´óµÄÄÚ´æÇøÓò£¬ÆäÖдæ·Å¸÷ÖÖÀàÐ͵ÄÒ³£¬Ä¬ÈÏÿҳµÄ´óСÊÇ16K£¬ÈÃÎÒÃÇÀ´¿´Ò»Ï»º³å³ØÖÐÊý¾ÝÒ³µÄÀàÐÍ£ºË÷ÒýÒ³£¬Êý¾ÝÒ³£¬redoÒ³£¬²åÈ뻺³å£¬×ÔÊÊÓ¦¹þÏ£Ë÷Òý£¬ËøÐÅÏ¢£¬Êý¾Ý×ÖµäµÈ£¬ÄÇôInnoDBÊÇÈçºÎ¹ÜÀíÄÚ´æµÄÄØ£¿

Ò»¡¢Ò³µÄ¹ÜÀí
1¡¢LRU List
LRU£¬Latest Recent Used£¬×î½ü×îÉÙʹÓÃËã·¨¡£»º´æ³Ø¿ÉÒÔ±»ÈÏΪһÌõ³¤LRUÁ´±í£¬¸ÃÁ´±íÓÖ·ÖΪ2¸ö×ÓÁ´±í£¬Ò»¸ö×ÓÁ´±í´æ·Åold
pages(ÀïÃæ´æ·ÅµÄÊdz¤Ê±¼äδ±»·ÃÎʵÄÊý¾ÝÒ³)£¬ÁíÒ»¸ö×ÓÁ´½Ó´æ·Ånew pages£¨ÀïÃæ´æ·ÅµÄÊÇ×î½ü±»·ÃÎʵÄÊý¾ÝÒ³Ãæ£©¡£

Ó봫ͳµÄLRUËã·¨²»Í¬£¬innoDB¶ÔLRUËã·¨½øÐÐÓÅ»¯£¬²åÈëµÄÊý¾Ý²»ÔÚLRU ListµÄÊײ¿£¬ÔÚinnoDBÖÐÒýÈëÁËÒ»¸ömidpointµÄ¸ÅÄ½«ÐµÄÊý¾Ý²åÈëµ½LRU
ListµÄmidpointλÖô¦¡£ÎÒÃÇ¿ÉÒÔͨ¹ýÃüÁî²é¿´midpointµÄÖµ
show variables
like 'innodb_old_blocks_pct'\G; |

¿ÉÒÔ¿´µ½midpointĬÈÏÖµÊÇ37£¬midpoint֮ǰÊÇnewPageÕ¼37%£¬midpointÖ®ºóÊÇoldPage£¬¿ÉÒÔͨ¹ýÃüÁîµ÷Õûmidpoint'µÄÖµ
set global innodb_old_blocks_pct=38 |

˼¿¼£ºinnodbΪʲôҪÉèÖÃmidpoint¶ø²»Óô«Í³µÄLRUËã·¨ÄØ£¿
´ð£ºÕâÊÇÒòΪÈôÖ±½Ó½«¶ÁÈ¡µÄÒ³·ÅÔÚLRUÁбíµÄÊײ¿£¬ÄÇôijЩSQL²Ù×÷¿ÉÄÜ»áʹ»º³å³ØÖеÄÒ³±»Ë¢Ð³ö£¬´Ó¶øÓ°Ï컺³åµÄÃüÖÐÂÊ¡£³£¼ûµÄ²Ù×÷ÈçÐèÒª·ÃÎʱíÖеĺܶàÒ³£¬Ò²ÐíÕâЩҳ²¢²»ÊÇÈȵãÊý¾Ý£¬Èç¹û·ÅÔÚLRUÁбíÊײ¿£¬µ«ÕâЩҳÓпÉÄܻὫÈȵãÊý¾ÝË¢³ö»º³å³Ø¡£ÒýÈëmidpoint£¬½«Ð²éµÄÊý¾Ý´æ´¢ÔÚmidpontλÖÃÖУ¬midpoint֮ǰµÄÈÔΪ×îÈÈÊý¾Ý¡£
2¡¢Free List
µ±MySQL¸ÕÆô¶¯Ê±£¬LRU ListÊǿյģ¬ÕâʱµÄÒ³¶¼´æ·ÅÔÚFree
ListÖС£µ±ÐèÒª´Ó»º³å³ØÖзÖҳʱ£¬Ê×ÏÈ´ÓFree ListÖвéÕÒÊÇ·ñÓпÕÏÐÒ³£¬Èç¹ûÓÐÔò´ÓFreeListÖÐÒÆ³ý£¬·ÅÔÚLRU
ListÖС£ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÒÔÏÂÃüÁî²é¿´LRU ListºÍFree ListµÄÊý¾Ý
show engine
innodb status\G; |

ÆäÖÐÓм¸¸öÖØÒªµÄ²ÎÊý£¬ÎÒÒѾ±êºì£¬ÔÚÏÂÃæÒ»Ò»½âÊÍ£º
Buffer pool size£º»º³å³ØÖÐÒ³µÄ¸öÊý£¬Ã¿Ò³Ä¬ÈÏ´óС16k£¬Ôò»º³å³ØµÄ´óСÊÇ8192*16/1024=128M¡£
Free buffers£ºFree ListÒ³µÄ¸öÊý
Database pages£ºLRU ListÒ³µÄ¸öÊý
Modified db pages£ºÔàÒ³µÄ¸öÊý£¬ÓÉÓÚÔÚ½øÐÐupdate²Ù×÷ʱÊ×ÏÈ»áÐ޸Ļº³å³ØÖеÄÊý¾Ý£¬ÔÚ¶¨Ê±Òì²½µÄ½«»º³å³ØµÄÊý¾Ýˢе½´ÅÅÌÖУ¨checkpoint¼¼Êõ£©£¬ËùÒÔ»º³å³ØµÄÊý¾ÝÓë´ÅÅ̵ÄÊý¾Ý»á²úÉú²»Ò»Ö£¬³ÆÎªÔàÒ³¡£
LRU len£ºLRU ListµÄ³¤¶È¡£
3¡¢Flush List
ÔÚLRUÖеÄÒ³±»Ð޸ĺ󣬸ÃÒ³³ÆÎªÔàÒ³£¬¼´»º³å³ØÖеÄÒ³ºÍ´ÅÅÌÉϵÄÒ³²úÉúÁ˲»Ò»Ö£¬¶øFlush
ListÖеÄÒ³¼´ÎªÔàÒ³ÁÐ±í¡£×¢Ò⣺ÔàÒ³¼È´æÔÚÓÚLRU ListÖУ¬Ò²´æÔÚFlush ListÖУ¬LRU
ListÓÃÀ´¹ÜÀí»º³å³ØÖпÉÓõÄÒ³£¬Flush ListÓÃÀ´¹ÜÀí½«Ôàҳˢе½´ÅÅÌÉÏ£¬¶þÕß»¥²»Ó°Ïì¡£ÏÂÃæÎÒÓÃÒ»¸öÀý×ÓÀ´¸ø´ó¼ÒÑéÖ¤Flush
ListºÍModified db pages;
ÓÐÒ»ÕÅuser±í´æÓÐÈçÏÂÊý¾Ý£º

ÕâʱÎÒÃDz鿴Modified db pagesµÄֵΪ0£º

µ±ÎÒÃÇupdateµÄʱºò£¬ÎÒÖ´ÐÐÈçÏÂÃüÁÐÞ¸ÄÊý¾Ý²¢²é¿´ÔàÒ³µÄÖµ£¬Ö®ËùÒÔÁ½ÌõÃüÁîÒ»ÆðÖ´ÐУ¬ÊÇΪÁË¿ÉÒÔ¿´µ½ÔàÒ³µÄÖµµÄ±ä»¯£¬Èç¹û·Ö³ÉÁ½´ÎÖ´ÐУ¬ÓпÉÄÜcheckpoint»úÖÆÒѽ«Ð޸ĵÄÊý¾Ýˢе½´ÅÅÌÖжø¹Û²â²»µ½ÔàÒ³µÄÖµ¡£
update user
set id=5 where id=4;show engine innodb status\G; |

ÎÒÃÇ¿ÉÒÔ¿´µ½Modified db pagesµÄֵȷʵ±ä»¯ÁË£¬±íÃ÷ÓÖÔàÒ³²úÉú¡£
¶þ¡¢²åÈ뻺³å£¨Insert Buffer£©
Ìýµ½Õâ¸öÃû×Ö£¬¿ÉÄÜ»áÈÃÈËÈÏΪinsert? bufferÊÇ»º³å³ØÖеÄÒ»²¿·Ö£¬Æäʵ²»ÊÇ£¬insert
bufferºÍÊý¾ÝÒ³Ò»Ñù£¬Ò²ÊÇÎïÀíÒ³ÖеÄÒ»¸ö×é³É²¿·Ö¡£
ÔÚInnoDBÖУ¬Ö÷¼üÊÇÐеÄΨһ±êʶ£¬Èç¹ûÎÒÃǵÄÖ÷¼üÊÇauto_incrementµÄ»°£¬²åÈë˳ÐòÊÇÓÐÐòµÄ£¬Ò»°ãÇé¿öϲ»ÐèÒª¶ÁÈ¡ÁíÒ»Ò³µÄÊý¾Ý£¬ËùÒÔ²åÈëËٶȷdz£¿ì£¬ÈçÏÂ±í£º

µ«²»¿ÉÄÜÿÕÅ±í¶¼Ö»ÓÐÒ»¸ö¾Û¼¯Ë÷Òý£¬´ó¶àÇé¿öÏ£¬Ã¿Õűí»áÓзǾۼ¯Ë÷Òý¡£±ÈÈçÓû§°´ÕÕb×ֶβéѯ£¬¶øÇÒb×ֶβ»ÊÇΨһµÄ£¬ÔÚinsertʱ£¬Ö÷¼üa»¹Êǰ´ÕÕÓÐÐò´æ·Å£¬µ«·Ç¾Û¼¯Ë÷ÒýbµÄÒ¶×Ó½Úµã²åÈëµÄ²»Ò»¶¨ÊÇÓÐÐòÁË¡£ÈçÏÂ±í£º

InnoDBÉè¼ÆµÄInsert Buffer£¬¶Ô·Ç¾Û¼¯Ë÷ÒýµÄ²åÈëºÍ¸üвÙ×÷£¬²»ÊÇÿ´ÎÒ»¶¼Ö±½Ó²åÈëË÷ÒýÒ³£¨index
page£©ÖУ¬¶øÊÇÏÈÅжϲåÈëµÄ·Ç¾Û¼¯Ë÷ÒýÒ³ÊÇ·ñÔÚ»º³å³ØÖдæÔÚ£¬ÈôÔÚÔòÖ±½Ó²åÈ룬Èô²»ÔÚ£¬ÔòÏÈ·ÅÈëµ½Ò»¸öInsert
Buffer¶ÔÏóÖС£È»ºóÔÙÒÔÒ»¶¨ÆµÂÊÖ´ÐÐInsert BufferºÍindex pageµÄºÏ²¢²Ù×÷£¬ÕâʱºòÄܽ«¶à¸öinsertºÏ²¢µ½Ò»¸ö²Ù×÷ÖУ¬´ó´óÌá¸ßÁ˷Ǿۼ¯Ë÷Òý²åÈëµÄÐÔÄÜ¡£ÎÒÀí½âµÄInsert
BufferµÄ²Ù×÷ÈçÏÂͼËùʾ£º¶ÔÓÚinsert²Ù×÷£¬Ê×ÏȽøÈëinsert bufferÖУ¬È»ºóÒÔÒ»¶¨ÆµÂʽ«Ë÷Òýmergeµ½index
pageÖУ¬checkpoint¶¨Ê±½«Êý¾Ýˢе½´ÅÅÌÖС£

È»¶ø£¬InnoDBʹÓÃInsert BufferÐèҪͬʱÂú×ãÒ»ÏÂÁ½¸öÌõ¼þ£º
Ë÷ÒýÊǷǾۼ¯Ë÷Òý
Ë÷Òý²»ÊÇΨһµÄ
Èç¹ûË÷ÒýÊÇΨһµÄ£¬ÔÚÿ´Î²åÈëµÄʱºòÏÈ»áÅжÏË÷ÒýÖµÊÇ·ñÒѾ´æÔÚ£¬ÕâÑù»áËæ»ú¶ÁÈ¡index page£¬´Ó¶øµ¼ÖÂInsert
BufferʧȥÁËÒâÒå¡£
ͨ¹ýÃüÁî¿ÉÒԲ鿴µ½insert bufferµÄÐÅÏ¢£º
show engine
innodb status\G; |

size:ÒѾºÍindex pageºÏ²¢²¢¼Ç¼ҳµÄÊýÁ¿£»
free list:¿ÕÏÐÁбíµÄ³¤¶È£»
seg size:µ±Ç°insert bufferµÄ´óС£¬2*16k=32k¡£
¶Ôinsert bufferµÄÐÎÏóÀí½â(Õª×ÔÍøÂç)£º
ÎÒÃÇȥͼÊé¹Ý»¹Ê飬¶ÔӦͼÊé¹ÝÀ´Ëµ£¬ËûÊÇ×öÁËinsert(Ôö¼Ó)²Ù×÷£¬¹ÜÀíÔ±ÔÚ1СʱÄÚ½ÓÊÜÁË100±¾Ê飬ÕâʱºòËûÓÐ2ÖÖ×ö·¨°Ñ»¹»ØÀ´µÄÊé¹éλµ½Êé¼ÜÉÏ
1£©Ã¿»¹»ØÀ´Ò»±¾Ê飬¸ù¾ÝÕâ±¾ÊéµÄ±àÂ루Êé¹ñÇø-ÅÅ-ºÅ£©°ÑÊéËͻؼÜÉÏ
2£©ÔÝʱ²»×ö¹éλ²Ù×÷£¬Ïȷŵ½¹ñÃæÉÏ£¬µÈ²»Ã¦µÄʱºò£¬ÔÙ°ÑÕâЩÊé°´ÕÕÊé¹ñÇø-ÅÅ-ºÅÏÈÅźã¬È»ºóÒ»´ÎÐÔ¹éλ
Ó÷½·¨1£¬¹ÜÀíÔ±ÐèÒª½ø³ö£¨IO£©²ØÊéÇø100´Î£¬²»Í£µÄµÇ¸ßÅÀµÍÍê³ÉͼÊé¹éλ²Ù×÷£¬ÀÛËÀÀۻЧÂʺܲ
Ó÷½·¨2£¬¹ÜÀíÔ±Ö»ÐèÒª½ø³ö£¨IO£©²ØÊéÇø1´Î£¬¶Ôͬһ¸öλÖõÄÊ飬²»¹Ü¶àÉÙ£¬¶¼Ö»ÒªÅÀÒ»´ÎÂ¥ÌÝ£¬´ó´ó¼õÇáÁ˹ÜÀíÔ±µÄ¹¤×÷Á¿¡£
Ϊʲô¶ÔÓڷǾۼ¯Ë÷Òý£¨·ÇΨһ£©µÄ²åÈëºÍ¸üÐÂÓÐЧ?
»¹ÊÇÓû¹ÊéµÄÀý×ÓÀ´Ëµ£¬»¹Ò»±¾ÊéAµ½Í¼Êé¹Ý£¬¹ÜÀíÔ±ÒªÅжÏÒ»ÏÂÕâ±¾ÊéÊDz»ÊÇΨһµÄ£¬ËûÔÚ¹ñ̨ÉÏÊÇ¿´²»µ½µÄ£¬±ØÐëÅÀµ½Ö¸¶¨Î»ÖÃȥȷÈÏ£¬Õâ¸ö¹ý³ÌÆäʵÒѾ²úÉúÁËÒ»´ÎIO²Ù×÷£¬Ï൱ÓÚûÓнÚÊ¡ÈκβÙ×÷¡£
ËùÒÔÕâ¸öbufferÖ»ÄÜ´¦Àí·ÇΨһµÄ²åÈ룬²»ÒªÇóÅжÏÊÇ·ñΨһ¡£
Èý¡¢×ÔÊÊÓ¦¹þÏ£Ë÷Òý£¨Adaptive Hash Index£©
´ËË÷Òý·Ç±ËË÷Òý¡£Innodb´æ´¢ÒýÇæ»á¼à¿Ø¶Ô±íÉÏÆÕͨË÷ÒýµÄ²éÕÒ£¬Èç¹û·¢ÏÖijË÷Òý±»Æµ·±·ÃÎÊ£¬Ôò¸ÃË÷Òý³ÉΪÈÈÊý¾Ý£¬½¨Á¢¹þÏ£Ë÷Òý¿ÉÒÔ´øÀ´ËٶȵÄÌáÉý¡£¿´ÏÂͼ£¬AHIµÄλÖÃÔÚÆÕͨË÷Òý֮ǰ£¬²éѯʱÏȲéAHI£¬ºó²éÆÕͨË÷Òý¡£

²úÉúAHIµÄÌõ¼þ£º
ͨ¹ýÖ÷¼ü²éѯ£¬»òÕßͨ¹ýÁªºÏË÷Òý(a,b)²éѯ£¬±ÈÈçselect * from t where a=xxx»òselect
* from t where a=xxx and b=yyy;
ÒÔ¸Ãģʽ²éѯÖÁÉÙ100´Î¡£
ҳͨ¹ý¸Ãģʽ·ÃÎÊÖÁÉÙN´Î£¬N=Ò³ÖеļǼÊý*1/16;
AHIÖ»¶ÔµÈÖµ²éѯÓÐЧ£¬¶Ô·¶Î§²éѯÎÞЧ¡£
ÁíÍ⣬ÎÒÃÇÒªÖªµÀ£¬AHIÊÇInnoDB¿ØÖƵģ¬Òò´ËÎÒÃDz»ÄܶÔAHI½øÐиÉÔ¤¡£ÎÒÃÇ¿ÉÒԲ鿴AHIµÄÊÇ·ñ¿ªÆô£¬Ä¬ÈÏÊÇ¿ªÆôON״̬¡£
show variables
like 'innodb_adaptive_hash_index'\G; |

ͨ¹ýÃüÁîÎÒÃÇ¿ÉÒԲ鵽AHIµÄʹÓÃ×´¿ö¡£
show engine
innodb status\G; |

hash±íʾϵͳʹÓÃAHI²éѯµÄËÙ¶È£¬non-hashÊÇûÓÐʹÓÃAHIµÄ²éѯËÙ¶È¡£Èç¹û¶ÁÕßÏëÒª¿´µ½ÊýÖµ£¬¿ÉÒÔÁ¬Ðø²éѯijÊý¾Ý100´ÎÒÔÉÏ£¬Ôò¿ÉÒÔ¿´µ½hashµÄÖµ¡£
select * from
t where id=1;show engine innodb status\G;
»ò
select * from t where id>1;show engine innodb
status\G; |
|