当前位置: 首页 > Web前端 > HTML

为什么MySQL会死锁?

时间:2023-03-29 11:31:58 HTML

1锔忊儯姝婚攣姒傝堪鍦ㄦ寮忓紑濮嬩粖澶╃殑璁茶В涔嬪墠锛屾垜浠厛鏉ュ洖椤句竴涓嬫閿佺殑鐩稿叧鐭ヨ瘑銆備竴涓樆濉炵幇璞★紝濡傛灉娌℃湁澶栧姏锛屼粬浠細涓€鐩寸瓑涓嬪幓銆傚氨鍍忓崱bug涓€鏍凤紝姣斿浣犲幓闈㈣瘯鐨勬椂鍊欙紝闈㈣瘯瀹橀棶浣狅細MySQL涓轰粈涔堜細姝婚攣锛涗綘璺熼潰璇曞畼璇达細浣犺鏄綍鐢ㄦ垜鎴戝氨鍛婅瘔浣狅紝闈㈣瘯瀹樿锛氫綘鍛婅瘔鎴戯紝鎴戝氨褰曠敤浣狅紝鐒跺悗浣犱滑涓や釜涓€鐩磋繖鏍凤紝浣犻棶鎴戞垜涔熼棶浣狅紝杩欐槸涓€涓兊灞€.閭d箞锛屼粈涔堟椂鍊欎細鍙戠敓姝婚攣鍛紵杩欏氨涓嶅緱涓嶆彁鍒版閿佺殑鍥涗釜蹇呰鏉′欢锛氫簰鏂ャ€佸崰鏈夌瓑寰呫€佷笉鍙姠鍗犮€佸惊鐜瓑寰呬簰鏂ワ細涔熷氨鏄鑷冲皯鏈変竴涓祫婧愬浜庣嫭鍗犵姸鎬侊紝涔熷氨鏄涓嶈兘琚袱涓嚎绋嬪悓鏃朵娇鐢ㄥ崰鏈夊苟绛夊緟锛氫竴涓繘绋嬭嚦灏戝崰鏈変竴涓祫婧愬苟绛夊緟鍙︿竴涓祫婧愶紝浣嗘槸杩欎釜璧勬簮琚叾浠栦汉鍗犵敤浜嗐€傞潪鎶㈠崰寮忥細鎴戜滑鐨勬剰鎬濇槸绾跨▼涓嶈兘鎶㈠崰鍏朵粬绾跨▼鍗犵敤鐨勮祫婧愶紝鍙兘鑷繁涓诲姩閲婃斁锛屽惊鐜瓑寰咃細A鍦ㄧ瓑寰匓鐨勮祫婧愶紝B鍦ㄧ瓑寰匔鐨勮祫婧愶紝C鍦ㄧ瓑寰匒鐨剅esources2锔忊儯姝婚攣鐨勫彂鐢熺幇鍦ㄦ垜浠ā鎷熶竴涓閿佺殑鍦烘櫙锛屼箣鍓嶆垜浠垱寤轰竴涓猼eam琛ㄦ潵瀛樺偍涓€涓帓鐞僒eaminformation:CREATETABLEteam(idintNOTNULLAUTO_INCREMENT,position_nointDEFAULTNULL,user_nameVARCHAR(10)DEFAULTNULL,PRIMARYKEY(id),KEYindex_position(position_no)USINGBTREE)ENGINE=InnoDB;澶嶅埗浠g爜骞舵彃鍏ヤ簲鍏冩暟鎹細涓婁紶...閲嶆柊涓婁紶鍜屽彇娑堢幇鍦ㄥ洟闃熸鍦ㄦ嫑鍕熶竴鍚嶄簩浼犳墜鍜屼竴鍚嶅壇鏀伙紝鍗硃osition_no=6鍜宲osition_no=7鐨勪汉锛屼絾鏄湪鎷涘嫙涔嬪墠锛屼綘闇€瑕佺‘璁よ繖涓綅缃槸鍚︽湁浜猴紝鍥㈤槦鐨勪袱涓粡鐞嗗悜琛ㄤ腑鎻掑叆鏁版嵁鏃讹紝浼氬彂鐢熶互涓嬩簨鎯咃紝姝ゆ椂浼氬嚭鐜版閿侊細缁忕悊A锛堟竻姘达級缁忕悊B锛堝彜杩級atposition6existsselect*fromteamwhereposition_no=6forupdate鏌ヨ鏄惁鏈変汉鍦╬osition7select*fromteamwhereposition_no=7forupdateinsertintoteam(position_no,user_name)values(6,grinding)insertintoteam(position_no,user_name)values(7,lev)鍏堣В閲婁竴涓嬩负浠€涔堢敤currentread锛屽洜涓哄鏋滄槸snapshotread锛屼細鍑虹幇鐨勬儏鍐垫槸锛氫袱涓猰anager閮芥兂鎻掑叆position涓?鐨勪汉锛屼粬浠兘鎵捐浣嶇疆鍦ㄦ煡璇㈡湡闂村瓨鍦紝鎵€浠ヤ粬浠兘鎻掑叆浜嗭紝鍗筹細缁忕悊A锛堟竻姘达級缁忕悊B锛堣胺锛夋煡璇綅缃?鐨勪汉鏄惁瀛樺湪select*fromteamwhereposition_no=6forupdate鏌ヨ浣嶇疆7鏄惁鏈変汉select*fromteamwhereposition_no=6forupdateinsertintoteam(position_no,user_name)values(6,grinding)insertintoteam(position_no,user_name))values(6,Jichuan)姝ゆ椂浼氭坊鍔犱袱涓汉锛屼細鏈変袱鏉′綅缃负6鐨勮褰曪紝浼氬嚭鐜板够璇伙紝鎵€浠ユ煡璇㈢殑鏃跺€欓渶瑕佸姞閿侊紝鍗充娇鐢ㄧ洰鍓嶅洖璇诲垰鎵嶇殑鍦烘櫙锛屽鏋滄垜浠湪瀹為檯鐜涓瘯涓€涓嬶紝浼氬緱鍒拌繖鏍风殑缁撴灉锛氬綋缁忕悊A鎻掑叆浣嶇疆6鐨勪汉鏃讹紝褰撶粡鐞咮鎻掑叆浣嶇疆7鐨勪汉鏃讹紝涓ゆ鎻掑叆閮借闃诲锛屼篃灏辨槸璇达紝姝讳骸鍙戠敓浜嗐€傞攣锛屼笅闈㈡垜浠潵鍒嗘瀽涓轰粈涔堜細鍑虹幇姝婚攣锛?锔忊儯姝婚攣搴曞眰鍘熺悊鍒嗘瀽鍏跺疄鏈変簡鏄ㄥぉ鐨勭煡璇嗗偍澶囧拰鏌ヨ鏃跺鍔犻攣鎯呭喌鐨勪簡瑙o紝鎴戜滑涓嶉毦鍒嗘瀽涓轰粈涔堜細鍑虹幇姝婚攣锛歴elect*fromteamwhereposition_no=6forupdate璇彞灞炰簬闈炲敮涓€绱㈠紩鐨勭瓑浠锋煡璇紝浼氬姞(6,+鈭瀅鐨勯偦閿攣select*fromteamwhereposition_no=7forupdate璇彞灞炰簬闈炲敮涓€绱㈠紩鐨勭瓑浠锋煡璇紝浼氬姞(7,+鈭瀅涓浉閭婚敭閿併€備袱涓簨鍔¢兘鎸佹湁鑼冨洿涓?6,+鈭瀅鐨勭浉閭婚敭閿侊紝涓嬩竴娆℃彃鍏ユ搷浣滀細鑾峰彇鎻掑叆鎰忓悜閿侊紝杩欏拰Proximitykey閿佹槸浜掓枼鐨勶紝鎵€浠ヨ幏鍙杋nsertionintentlock闇€瑕侀噴鏀惧鏂圭殑transactionproximitylock锛岃繖鏍峰氨鏈変簡寰幆绛夊緟锛屼篃灏辨槸姝婚攣4锔忊儯濡備綍閬垮厤鏁版嵁搴撴閿乪绾э紝MySQL涓烘垜浠彁渚涗簡涓ょ鎵撶牬姝婚攣鐨勭瓥鐣ワ細璁剧疆浜嬪姟绛夊緟閿佺殑瓒呮椂鏃堕棿锛屼篃灏辨槸璇达紝濡傛灉浜嬪姟宸茬粡琚樆濉烇紝瓒呰繃璁剧疆鐨刬nnodb_lock_wait_timeout浣滀负鍙傛暟鍊煎悗锛屼簨鍔″彲浠ュ湪鎸囧畾鏃堕棿鍚庤嚜鍔ㄥ洖婊氬苟閲婃斁閿佸紑鍚富鍔ㄦ閿佹娴嬶細杩欐槸MySQL鎻愪緵鐨勬閿佹娴嬨€傚鏋滆鏈哄埗鍙戠幇姝婚攣锛屽畠灏嗗洖婊氬叾涓竴涓簨鍔′互鍏佽鍏朵粬浜嬪姟鎵ц锛岀劧鍚庢墍鏈変簨鍔″皢琚В閿併€傝缃柟娉曚负锛歩nnodb_deadlock_detect=on鍦ㄤ笟鍔″眰闈㈠嵆鍙€傛垜浠湪澶勭悊涓氬姟閫昏緫鏃讹紝绉瀬瀵绘壘姝婚攣鐨勫彲鑳芥€э紝浠庢牴婧愪笂瑙e喅闂锛屽苟杩涜淇銆傛瘮濡傚鏋滄槸涓轰簡闃叉璁㈠崟鍙烽噸澶嶏紝涔熷氨鏄槻姝㈤噸澶嶆牎楠岋紝鎴戜滑鍙互淇敼璁㈠崟鍙风殑鐢熸垚瑙勫垯锛屼娇鐢ㄩ洩鑺辩畻娉曟垨鑰匯edis鏉ョ敓鎴愯鍗曞彿锛屼篃鍙互鍦ㄨ鍗曞彿瀛楁...馃挰鎬荤粨