ÇáËÉÕÆÎÕMySQL**¿âËø»úÖÆµÄÏà¹ØÔ­Àí

ʱ¼ä£º2016.05.10 ·¢²¼ÈË£ºyogev_chen

ÇáËÉÕÆÎÕMySQL**¿âËø»úÖÆµÄÏà¹ØÔ­Àí

Òѽâ¾öÎÊÌâ

¹È¸èyogev_chenÓû§ÔÚ2016.05.10Ìá½»Á˹ØÓÚ¡°¹Ê¹¬ÇáËÉÕÆÎÕMySQL**¿âËø»úÖÆµÄÏà¹ØÔ­Àí¡±µÄÌáÎÊ£¬»¶Ó­´ó¼ÒÓ¿Ô¾·¢±í×Ô¼ºµÄ¹Ûµã¡£Ä¿Ç°¹²ÓÐ1¸ö»Ø´ð£¬×îºó¸üÐÂÓÚ2025-02-25T13:14:49¡£Ï£Íû´ó¼ÒÄܹ»°ïÖúËý¡£

ÏêϸÎÊÌâÃèÊö¼°ÒÉÎÊ£ºÆÚ´ýÄúµÄ´ð°¸£¬ÕæÐÄÅå·þÄã,лл £¡

Ï£ÍûÒÔϵĻشð£¬Äܹ»°ïÖúÄã¡£

µÚ1¸ö»Ø´ð

Óû§Ãû£ºliyangrui  

ÔÚMySQLÖжÔÓÚʹÓÃ±í¼¶Ëø¶¨µÄ´æ´¢ÒýÇæ£¬±íËø¶¨Ê±²»»áËÀËøµÄ¡£Õâͨ¹ý×ÜÒª¶·Óà¼ÈÕñ²ß·ñ½½ï˾µÛÊÇÔÚÒ»¸ö²éѯ¿ªÊ¼Ê±Á¢¼´ÇëÇóËùÓбØÒªµÄËø¶¨²¢ÇÒ×ÜÊÇÒÔͬÑùµÄ˳ÐòËø¶¨±íÀ´¹ÜÀí¡£

ÔÚÒ»¸öupdÀ´×ÔateºÍinsert²Ù×÷Ƶ·±µÄ±íÖУ¬ÉÙÁ¿**²âÊÔµÄʱºòÔËÐÐÁ¼ºÃ£¬ÔÚʵ¼ÊÔËÓªÖУ¬Òò**Á¿±È½Ï´ó£¨21ÍòÌõ¼Ç¼£©£¬»á³öÏÖËÀËøÏÖÏó£¬ÓÃshowprocesslisÎÊ´ðt²é¿´£¬¿ÉÒÔ¿´µ½Ò»¸öup³ÐdateÓï¾ä״̬ÊÇLocked£¬Ò»¸ödeleteÓï¾ä״̬ÊÇSendingdata¡£²é¿´ÁËһϲο¼Êֲᣬ°ÑËø¶¨Ïà¹ØµÄ**Õûµô¼¤Ò¹ºÏ֪³Éè¼õ¼Û»ý¼ÜÀíÏÂÀ´£¬ÒÔ±ã×Ô¼º¼Ç¼ºÍ×·×Ù¸ÃÎÊÌâµÄ½â¾öÇé¿ö£º

MySQL5.1Ö§³Ö¶ÔMyISAMºÍMEMORÔº½éÅäË丽ÈÔǰ¼ÛY±í½øÐÐ±í¼¶Ëø¶¨£¬¶ÔBDB±í½øÐÐÒ³¼¶Ëø¶¨£¬¶ÔInnoDBµØÖ±µ±±í½øÐÐÐм¶Ëø¶¨¡£ÔÚÐí¶àÇé¿öÏ£¬¿ÉÒÔ¸ù¾ÝÅàѵ²Â²âÓ¦ÓóÌÐòʹÓÃÄÄÀàËø¶¨ÀàÐÍ×îºÃ£¬µ«Ò»°ãºÜÄÑË**öij¸ö¸ø³öµÄËøÀàÐ;ͱÈÁíÒ»¸öºÃ¡£Ò»ÇÐȡǮÑоöÓÚÓ¦ÓóÌÐò£¬Ó¦ÓóÌÐòµÄ²»Í¬²¿·Ö¿ÉÄÜÐèÒª²»Í¬µÄËøÀàÐÍ¡£ÎªÁËÈ·¶¨ÊÇ·ñÏëҪʹÓÃÐм¶Ëø¶¨µÄ´æ´¢ÒýÇæ£¬Ó¦¿´¿´Ó¦ÓóÌÐò×öʲô²¢ÇÒ»ìºÏʹÓÃʲôÑùµÄÑ¡ÔñºÍ¸üÐÂÓï¾ä¡£ÀýÈ磬´ó¶àÊýWebÓ¦ÓóÌÐòÖ´ÐÐÐí¶àÑ¡Ôñ£¬¶øºÜÉÙ½øÐÐɾ³ý£¬Ö»¶Ô¹Ø¼ü×ÖµÄÖµ½øÐиüУ¬²¢ÇÒÖ»²åÈëÉÙÁ¿¾ßÌåµÄ±í¡£»ù±¾MySQLMyISAMÉèÖÃÒѿն¨Ëû¾­µ÷½ÚµÃºÜºÃ¡£

ÔÚMySQLÖжÔÓÚʹÓÃ±í¼¶Ëø¶¨µÄ´æ´¢ÒýÇæ£¬±íËø¶¨Ê±²»»áËÀËøµÄ¡£Õâͨ¹ý×ÜÊÇÔÚÒ»¸ö²éѯ¿ªÊ¼Ê±Á¢¼´ÇëÇóËùÓбØÒªµÄËø¶¨²¢ÇÒ×ÜÊÇÒÔͬÑùµÄ˳ÐòÌ×ÊÜÃ÷¿îÖú²¢Ê½Ëø¶¨±íÀ´¹ÜÀí¡£

¶ÔWRITE£¬MySQLʹÓõıíËø¶¨·½·¨Ô­ÀíÈçÏ£º

ËÉÃñ·âÁ¿Éù¼È³Ì¡ôÈç¹ûÔÚ±íÉÏûÓÐËø£¬ÔÚËüÉÏÃæ·ÅʹΣ¾«ÓÀÇж¨ÑÏÔ±ÍòÒ»¸öÐ´Ëø¡£

¡ô·ñÔò£¬°ÑËø¶¨ÇëÇó·ÅÔÚÐ´Ëø¶¨¶Ó½Ç˵Êäµ×ÖÝÁÐÖС£

¶ÔREAD£¬MySQLʹÓõÄËø¶¨·½·¨Ô­ÀíÈçÏ£º

¡ôÈç¹ûÔÚ±íÉÏûÓÐÐ´Ëø¶¨£¬°ÑÒ»¸ö¶ÁËø¶¨·ÅÔÚËüÉÏÃæ¡£

¡ô·ñÔò£¬°ÑËøÇëÇó·ÅÔÚ¶ÁËø¶¨¶ÓÁÐÖС£

µ»Ì嵯»­Òø¶ÓδԶе¸öËø¶¨±»ÊÍ·Åʱ£¬Ëø¶¨¿É±»Ð´Ëø¶¨¶ÓÁÐÖеÄÏ̵߳õ½£¬È»ºóÊǶÁËø¶¨¶ÓÁÐÖеÄÏ̡߳£

ÕâÒâζ×Å£¬Èç¹ûÄãÔÚÒ»¸ö±íÉÏÓÐÐí¶à¸üУ¬**LECTÓï¾ä½«µÈ´ýÖ±µ½Ã»ÓÐÃÞ»¯Ç®ÑøÍƱêÂýλÑ̳иü¶àµÄ¸üС£

Èç¹ûIN**RTÓï¾ä²»³åÍ»£¬¿ÉÒÔ×ÔÓÉΪMyISAM±í»ìºÏ²¢ÐеÄIN**RTºÍ**LECTÓï¾ä¶ø²»ÐèÒªËø¶¨¡£

InnoDBʹÓÃÐÐËø¶¨£¬BDBʹÓÃÒ³Ëø¶¨¡£¶ÔÓÚÕâÁ½ÖÖ´æ´¢ÒýÇæ£¬¶¼¿ÉÄÜ´æÔÚËÀËø¡£ÕâÊÇÒòΪ£¬ÔÚSQLÓï¾ä´¦ÀíÆÚ¼ä£¬InnoDB×Ô¶¯»ñµÃÐÐËø¶¨£¬¸ÏBDB»ñµÃÒ³Ëø¶¨£¬¶ø²»ÊÇÔÚÊÂÎñÆô¶¯Ê±»ñµÃ¡£

Ðм¶Ëø¶¨µÄÓŵ㣺

·µ±ÔÚÐí¶àÏß³ÌÖзÃÎʲ»Í¬µÄÐÐʱֻ´æÔÚÉÙÁ¿ÇåÆÀжûÍâËø¶¨³åÍ»¡£

·»Ø¹öʱֻÓÐÉÙÁ¿µÄ¸ü¸Ä¡£

·¿ÉÒÔ³¤Ê±¼äËø¶¨µ¥Ò»µÄÐС£

Ðм¶Ëø¶¨µÄȱµã£º

·±ÈЩµ«Äþ×óÑîÌý´¡Ò³¼¶»ò±í¼¶Ëø¶¨Õ¼Óøü¶àµÄÄÚ´æ¡£

·µ±ÔÚ±íµÄ´ó²¿·ÖÖÐʹ¿ÆÈÏÌïÁ£ÖÖŨÓÃʱ£¬±ÈÒ³¼¶»ò±í¼¶Ëø¶¨ËÙ¶ÈÂý£¬ÒòΪÄã±ØÐë»ñÈ¡¸ü¶àµÄËø¡£

·Èç¹ûÄãÔڴ󲿷Ö**ÉϾ­³£½øÐÐGROUPBY²Ù×÷»òÕß±ØÐë¾­³£É¨ÃèÕû¸ö±í£¬±ÈÆäËüËø¶¨Ã÷ÏÔÂýºÜ¶à¡£

·Óø߼¶±ðËø¶¨£¬Í¨¹ýÖ§³Ö²»Í¬µÄÀàÐÍËø¶¨£¬ÄãÒ²¿ÉÒÔºÜÈÝÒ׵ص÷½ÚÓ¦ÓóÌÐò£¬ÒòΪÆäËø³É±¾Ð¡ÓÚÐм¶Ëø¶¨¡£

ÔÚÒÔÏÂÇé¿öÏ£¬±íËø¶¨ÓÅÏÈÓÚÒ³¼¶»òÐм¶Ëø¶¨£º

·±íµÄ´ó²¿·ÖÓï¾äÓÃÓÚ¶ÁÈ¡¡£

·¶ÔÑϸñµÄ¹Ø¼ü×Ö½øÐжÁÈ¡ºÍ¸üУ¬Äã¿ÉÒÔ¸üлòɾ³ý¿ÉÒÔÓõ¥Ò»µÄ¶ÁÈ¡µÄ¹Ø¼ü×ÖÀ´ÌáÈ¡µÄÒ»ÐУº

?UPDATEtbl_name**Tcolumn=valueWh**EREunique_key_col=key_value;

?DELETEFROMtbl_nameWh**EREunique_key_col=key_value;

·**LECT½áºÏ²¢ÐеÄIN**RTÓï¾ä£¬²¢ÇÒÖ»ÓкÜÉÙµÄUPDATE»òDELETEÓï¾ä¡£

·ÔÚÕû¸ö±íÉÏÓÐÐí¶àɨÃè»òGROUPBY²Ù×÷£¬Ã»ÓÐÈκÎд²Ù×÷¡£

²»Í¬ÓÚÐм¶»òÒ³¼¶Ëø¶¨µÄÑ¡Ï

·°æ±¾(ÀýÈ磬Ϊ²¢ÐеIJåÈëÔÚMySQLÖÐʹÓõļ¼Êõ)£¬ÆäÖпÉÒÔÒ»¸öд²Ù×÷£¬Í¬Ê±ÓÐÐí¶à¶ÁÈ¡²Ù×÷¡£ÕâÃ÷**¿â»ò±íÖ§³Ö**ÒÀÀµµÄ²»Í¬ÊÓͼ£¬È¡¾öÓÚ·ÃÎʺÎʱ¿ªÊ¼¡£ÆäËü**ͬµÄÊõÓïÊǓʱ¼ä¸ú×Ù”¡¢“д¸´ÖÆ”»òÕß“°´Ðè¸´ÖÆ”¡£

·°´Ðè¸´ÖÆÔÚÐí¶àÇé¿öÏÂÓÅÏÈÓÚÒ³¼¶»òÐм¶Ëø¶¨¡£È»¶ø£¬ÔÚ×µÄÇé¿öÏ£¬Ëü¿ÉÄܱÈʹÓó£¹æËø¶¨Ê¹ÓöàµÄÄÚ´æ¡£

·³ýÁËÐм¶Ëø¶¨Í⣬Äã¿ÉÒÔʹÓÃÓ¦ÓóÌÐò¼¶Ëø¶¨£¬ÀýÈçÔÚMySQLÖÐʹÓÃGET_LOCK()ºÍRELEA**_LOCK()¡£ÕâЩÊǽ¨ÒéÐÔËø¶¨£¬ËüÃÇÖ»ÄÜÔÚÔËÐÐÁ¼ºÃµÄÓ¦ÓóÌÐòÖй¤×÷¡£

Ϊ´ïµ½×î¸ßËø¶¨ËÙ¶È£¬³ýInnoDBºÍBDBÖ®Í⣬¶ÔËùÓд洢ÒýÇæ£¬MySQLʹÓñíËø¶¨(¶ø²»ÊÇÒ³¡¢ÐлòÕßÁÐËø¶¨)¡£¶ÔÓÚInnoDBºÍBDB±í£¬Èç¹ûÄãÓÃLOCKTABLESÏÔÊ½Ëø¶¨±í£¬MySQLֻʹÓñíËø¶¨£»Èç¹ûÄ㲻ʹÓÃLOCKTABLES£¬ÒòΪInnoDBʹÓÃ×Ô¶¯Ðм¶Ëø¶¨¶øBDBʹÓÃÒ³¼¶Ëø¶¨À´±£ÊÂÎñ¸ôÀë¡£

µ«ÊǶÔÓÚ´ó±í£¬¶ÔÓÚ´ó¶àÊýÓ¦ÓóÌÐò£¬±íËø¶¨±ÈÐÐËø¶¨¸üºÃ£¬µ«´æÔÚ²¿·ÖȱÏÝ¡£±íËø¶¨Ê¹Ðí¶àÏß³Ìͬʱ´ÓÒ»¸ö±íÖнøÐжÁÈ¡²Ù×÷£¬µ«Èç¹ûÒ»¸öÏß³ÌÏëÒª¶Ô±í½øÐÐд²Ù×÷£¬Ëü±ØÐëÊ×ÏÈ»ñµÃ¶ÀÕ¼·ÃÎÊ¡£¸üÐÂÆÚ¼ä£¬ËùÓÐÆäËüÏëÒª·ÃÎʸñíµÄÏ̱߳ØÐëµÈ´ýÖ±µ½¸üÐÂÍê³É¡£

±í¸üÐÂͨ³£Çé¿öÈÏΪ±È±í¼ìË÷¸üÖØÒª£¬Òò´Ë¸øÓèËüÃǸü¸ßµÄÓÅÏȼ¶¡£ÕâӦȷ±£¸üÐÂÒ»¸ö±íµÄ»î¶¯²»ÄÜ“¶öËÀ”£¬¼´Ê¹¸Ã±íÉÏÓкܷ±ÖصÄ**LECT»î¶¯¡£

±íËø¶¨ÔÚÕâÖÖÇé¿öÏ»áÔì³ÉÎÊÌ⣬ÀýÈçµ±Ïß³ÌÕýµÈ´ý£¬ÒòΪӲÅÌÒÑÂú²¢ÇÒ**³Ì¿ÉÒÔ´¦Àí֮ǰ±ØÐëÓпÕÏпռ䡣ÔÚÕâÖÖÇé¿öÏ£¬ËùÓÐÏëÒª·ÃÎʳöÏÖÎÊÌâµÄ±íµÄÏß³ÌÒ²±»ÉèÖóɵȴý״̬£¬Ö±µ½Óиü¶àµÄÓ²Å̿ռä¿ÉÓá£

±íËø¶¨ÔÚÏÂÃæµÄÇé¿öÏÂÒ²´æÔÚÎÊÌ⣺

·Ò»¸ö¿Í»§·¢³ö³¤Ê±¼äÔËÐеIJéѯ¡£

·È»ºó£¬ÁíÒ»¸ö¿Í»§¶Ôͬһ¸ö±í½øÐиüС£¸Ã¿Í»§±ØÐëµÈ´ýÖ±µ½**LECTÍê³É¡£

·ÁíÒ»¸ö¿Í»§¶Ôͬһ¸ö±íÉÏ·¢³öÁËÁíÒ»¸ö**LECTÓï¾ä¡£ÒòΪUPDATE±È**LECTÓÅÏȼ¶¸¬¸Ã**LECTÓï¾äµÈ´ýUPDATEÍê³É£¬²¢ÇҵȴýµÚ1¸ö**LECTÍê³É¡£

ÏÂÃæÃèÊöÁËһЩ·½·¨À´±ÜÃâ»ò¼õÉÙ±íËø¶¨Ôì³ÉµÄ¾ºÕù£º

·ÊÔͼʹ**LECTÓï¾äÔËÐеøü¿ì¡£¿ÉÄܱØÐë´´½¨Ò»Ð©ÕªÒª(summary)±í×öµ½Õâµã¡£

·ÓÃ--low-priority-updatesÆô¶¯mysqld¡£Õ⽫¸øËùÓиüÐÂ(ÐÞ¸Ä)Ò»¸ö±íµÄÓï¾äÒÔ±È**LECTÓï¾äµÍµÄÓÅÏȼ¶¡£ÔÚÕâÖÖÇé¿öÏ£¬ÔÚÏÈǰÇéÐεĵÚ2¸ö**LECTÓï¾ä½«ÔÚUPDATEÓï¾äǰִÐУ¬¶ø²»ÐèÒªµÈºòµÚ1¸ö**LECTÍê³É¡£

·¿ÉÒÔʹÓÃ**TLOW_PRIORITY_UPDATES=1Óï¾äÖ¸¶¨¾ßÌåÁ¬½ÓÖеÄËùÓиüÐÂӦʹÓõÍÓÅÏȼ¶¡£

·¿ÉÒÔÓÃLOW_PRIORITYÊôÐÔ¸øÓëÒ»¸öÌØ¶¨µÄIN**RT¡¢UPDATE»òDELETEÓï¾ä½ÏµÍÓÅÏȼ¶¡£

·¿ÉÒÔÓÃ**_PRIORITYÊôÐÔ¸øÓëÒ»¸öÌØ¶¨µÄ**LECTÓï¾ä½Ï¸ßÓÅÏȼ¶¡£

·Îªmax_write_lock_countϵͳ±äÁ¿Ö¸¶¨Ò»¸öµÍÖµÀ´Æô¶¯mysqldÀ´Ç¿ÖÆMySQLÔÚ¾ßÌåÊýÁ¿µÄ²åÈëÍê³ÉºóÁÙʱÌá¸ßËùÓеȴýÒ»¸ö±íµÄ**LECTÓï¾äµÄÓÅÏȼ¶¡£ÕâÑùÔÊÐíÔÚÒ»¶¨ÊýÁ¿µÄWRITEËø¶¨ºó¸ø³öREADËø¶¨¡£

·Èç¹ûÄãÓйØÓÚIN**RT½áºÏ**LECTµÄÎÊÌ⣬Çл»µ½Ê¹ÓÃеÄMyISAM±í£¬ÒòΪËüÃÇÖ§³Ö²¢·¢µÄ**LECTºÍIN**RT¡£

·Èç¹ûÄã¶Ôͬһ¸ö±í»ìºÏ²åÈëºÍɾ³ý£¬IN**RTDELAYED½«»áÓкܴóµÄ°ïÖú¡£

·Èç¹ûÄã¶Ôͬһ¸ö±í»ìºÏʹÓÃ**LECTºÍDELETEÓï¾ä³öÏÖÎÊÌ⣬DELETEµÄLIMITÑ¡Ïî¿ÉÒÔÓÐËù°ïÖú¡£

·¶Ô**LECTÓï¾äʹÓÃSQL_BUFFER_RESULT¿ÉÒÔ°ïÖúʹ±íËø¶¨Ê±¼ä±ä¶Ì¡£

·¿ÉÒÔ¸ü¸Ämysys/thr_lock.cÖеÄËø´úÂëÒÔʹÓõ¥Ò»µÄ¶ÓÁС£ÔÚÕâÖÖÇé¿öÏ£¬Ð´Ëø¶¨ºÍ¶ÁËø¶¨½«¾ßÓÐÏàͬµÄÓÅÏȼ¶£¬¶ÔһЩӦÓóÌÐò»áÓаïÖú¡£

ÕâÀïÊÇһЩMySQLÖбíËø¶¨Ïà¹ØµÄ¼¼ÇÉ£º

·Èç¹û²»»ìºÏ¸üÐÂÓëÐèÒªÔÚͬһ¸ö±íÖмì²éÐí¶àÐеÄÑ¡Ôñ£¬¿ÉÒÔ½øÐв¢ÐвÙ×÷¡£

·¿ÉÒÔʹÓÃLOCKTABLESÀ´Ìá¸ßËÙ¶È£¬ÒòΪÔÚÒ»¸öËø¶¨ÖнøÐÐÐí¶à¸üбÈûÓÐËø¶¨µÄ¸üÐÂÒª¿ìµÃ¶à¡£½«±íÖеÄÄÚÈÝÇзÖΪ¼¸¸ö±íÒ²¿ÉÒÔÓÐËù°ïÖú¡£

·Èç¹ûÔÚMySQLÖбíËø¶¨Ê±Óöµ½ËÙ¶ÈÎÊÌ⣬¿ÉÒÔ½«±íת»»ÎªInnoDB»òBDB±íÀ´Ìá¸ßÐÔÄÜ