Óû§Ãû£º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±íÀ´Ìá¸ßÐÔÄÜ