Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
MySQL InnoDB´æ´¢ÒýÇæÌåϵ¼Ü¹¹ ¡ª¡ª ÄÚ´æ¹ÜÀí
 
  2489  次浏览      27
 2019-8-16
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ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;

 

   
2489 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ