免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

MySQL鎖機(jī)制深度解析:從共享鎖、排他鎖到死鎖排查與性能優(yōu)化

MySQL鎖機(jī)制深度解析:從共享鎖、排他鎖到死鎖排查與性能優(yōu)化 1. 從一次線上事故說(shuō)起為什么我們需要深入了解MySQL鎖那天晚上系統(tǒng)監(jiān)控突然告警核心交易接口的響應(yīng)時(shí)間從平時(shí)的幾十毫秒飆升到了十幾秒TPS斷崖式下跌。登錄服務(wù)器一看CPU和IO都挺正常但數(shù)據(jù)庫(kù)連接池幾乎全滿大量線程狀態(tài)顯示為Waiting for table metadata lock。緊急排查后發(fā)現(xiàn)是一個(gè)開(kāi)發(fā)同學(xué)在業(yè)務(wù)低峰期執(zhí)行了一個(gè)ALTER TABLE操作試圖給一個(gè)千萬(wàn)級(jí)的大表加個(gè)索引。就是這個(gè)看似平常的DDL語(yǔ)句與業(yè)務(wù)高峰期仍在進(jìn)行的查詢和更新操作產(chǎn)生了鎖沖突直接“鎖”住了整張表導(dǎo)致服務(wù)近乎癱瘓。最后我們不得不強(qiáng)制Kill掉那個(gè)DDL進(jìn)程并調(diào)整了后續(xù)所有表結(jié)構(gòu)變更的流程——必須在嚴(yán)格的維護(hù)窗口并且先評(píng)估鎖的影響。這次事故讓我深刻意識(shí)到對(duì)于使用MySQL的開(kāi)發(fā)者、DBA甚至架構(gòu)師而言僅僅會(huì)寫SQL是遠(yuǎn)遠(yuǎn)不夠的?!版i”這個(gè)隱藏在數(shù)據(jù)庫(kù)引擎深處的并發(fā)控制機(jī)制平時(shí)悄無(wú)聲息一旦發(fā)威就足以讓整個(gè)系統(tǒng)“卡死”。很多人對(duì)鎖的理解停留在“表鎖”和“行鎖”這兩個(gè)名詞上或者背過(guò)“MyISAM用表鎖InnoDB用行鎖”這樣的面試題。但在真實(shí)的、高并發(fā)的生產(chǎn)環(huán)境中鎖的機(jī)制遠(yuǎn)比這復(fù)雜和微妙。共享鎖、排他鎖、意向鎖、間隙鎖、臨鍵鎖、元數(shù)據(jù)鎖……這些鎖是如何協(xié)同工作的什么情況下行鎖會(huì)升級(jí)為什么我明明只更新一行數(shù)據(jù)卻感覺(jué)鎖住了半張表死鎖是怎么產(chǎn)生的又該如何避免和排查理解MySQL的鎖機(jī)制不是為了應(yīng)付面試而是為了能設(shè)計(jì)出更健壯的數(shù)據(jù)模型編寫出更高效的SQL語(yǔ)句制定出更安全的運(yùn)維策略。它就像數(shù)據(jù)庫(kù)世界的交通規(guī)則不懂規(guī)則遲早會(huì)出“車禍”。接下來(lái)我將結(jié)合多年的實(shí)戰(zhàn)經(jīng)驗(yàn)和案例分析為你層層剝開(kāi)MySQL并發(fā)控制的神秘面紗不僅告訴你鎖是什么更告訴你它們?yōu)槭裁催@樣工作以及如何在實(shí)踐中駕馭它們。2. 鎖的基石共享鎖與排他鎖的本質(zhì)與交互要理解MySQL中紛繁復(fù)雜的鎖類型我們必須從最基礎(chǔ)、最核心的兩個(gè)概念入手共享鎖Shared Lock, S Lock和排他鎖Exclusive Lock, X Lock。這是所有鎖語(yǔ)義的基石。你可以把數(shù)據(jù)庫(kù)中的一條數(shù)據(jù)想象成一個(gè)會(huì)議室。共享鎖S鎖就像是對(duì)這個(gè)會(huì)議室的“讀取權(quán)限”。多個(gè)參與者可以同時(shí)持有這個(gè)會(huì)議室的S鎖一起進(jìn)去查閱資料讀取數(shù)據(jù)互不干擾。在MySQL中普通的SELECT語(yǔ)句在默認(rèn)的REPEATABLE READ隔離級(jí)別下并不會(huì)加鎖它是通過(guò)MVCC多版本并發(fā)控制來(lái)保證一致性的這點(diǎn)后面會(huì)詳述。但是如果你使用了SELECT ... LOCK IN SHARE MODE或者SELECT ... FOR SHAREMySQL 8.0就會(huì)對(duì)被讀取的行加上S鎖。排他鎖X鎖則像是這個(gè)會(huì)議室的“獨(dú)占使用權(quán)”。一旦一個(gè)參與者拿到了X鎖他就獨(dú)占了這間會(huì)議室其他任何人無(wú)論是想查閱還是想使用都不能再進(jìn)入。在MySQL中UPDATE、DELETE、INSERT語(yǔ)句以及使用了SELECT ... FOR UPDATE的查詢都會(huì)對(duì)被操作的行加上X鎖。它們之間的兼容性規(guī)則是理解并發(fā)沖突的關(guān)鍵S鎖與S鎖是兼容的多個(gè)事務(wù)可以同時(shí)讀取同一行數(shù)據(jù)。S鎖與X鎖是不兼容的一個(gè)事務(wù)正在讀取某行持有S鎖另一個(gè)事務(wù)就不能修改它申請(qǐng)X鎖會(huì)被阻塞反之亦然一個(gè)事務(wù)正在修改某行持有X鎖其他事務(wù)也不能讀取它申請(qǐng)S鎖會(huì)被阻塞。X鎖與X鎖是不兼容的這很好理解兩個(gè)事務(wù)不能同時(shí)修改同一行數(shù)據(jù)。注意這里說(shuō)的“讀取”指的是加鎖讀Locking Read。在InnoDB默認(rèn)的RR隔離級(jí)別下普通的快照讀Snapshot Read是不加鎖的它通過(guò)ReadView訪問(wèn)undo log中的歷史版本因此不會(huì)與寫操作沖突。這是MVCC帶來(lái)的巨大優(yōu)勢(shì)也是高并發(fā)讀的保障。但務(wù)必分清“快照讀”和“當(dāng)前讀加鎖讀”的區(qū)別。一個(gè)核心的實(shí)戰(zhàn)場(chǎng)景SELECT ... FOR UPDATEvsUPDATE很多人會(huì)混淆這兩個(gè)語(yǔ)句的加鎖行為。假設(shè)我們有一個(gè)賬戶余額表accounts現(xiàn)在要實(shí)現(xiàn)一個(gè)“查詢并扣款”的操作。錯(cuò)誤示范邏輯漏洞-- 事務(wù)1 START TRANSACTION; SELECT balance FROM accounts WHERE user_id 1001; -- 假設(shè)查到100元 -- 在應(yīng)用層判斷if (balance 50) { ... } UPDATE accounts SET balance balance - 50 WHERE user_id 1001; -- 扣款 COMMIT;在并發(fā)環(huán)境下事務(wù)1的SELECT快照讀和事務(wù)2的SELECT可能看到相同的余額100元都認(rèn)為可以扣款然后相繼執(zhí)行UPDATE。最終余額可能變成-50元這就是典型的“丟失更新”問(wèn)題。正確做法使用悲觀鎖-- 事務(wù)1 START TRANSACTION; SELECT balance FROM accounts WHERE user_id 1001 FOR UPDATE; -- 對(duì)user_id1001的行加上X鎖 -- 此時(shí)其他事務(wù)對(duì)該行的SELECT ... FOR UPDATE或UPDATE都會(huì)被阻塞 UPDATE accounts SET balance balance - 50 WHERE user_id 1001; COMMIT;SELECT ... FOR UPDATE會(huì)對(duì)查找到的行施加X(jué)鎖從而在查詢的瞬間就“鎖定”了數(shù)據(jù)避免了并發(fā)修改。UPDATE語(yǔ)句本身也會(huì)在更新時(shí)對(duì)行加X(jué)鎖但SELECT ... FOR UPDATE的鎖是在UPDATE執(zhí)行前就獲取的可以保證查詢和更新之間數(shù)據(jù)的一致性。這個(gè)例子揭示了鎖的第一個(gè)核心價(jià)值在并發(fā)環(huán)境中保護(hù)數(shù)據(jù)從“讀取”到“修改”這個(gè)關(guān)鍵窗口期的一致性。3. InnoDB的鎖升級(jí)意向鎖、行鎖與表鎖的協(xié)同當(dāng)我們說(shuō)“InnoDB支持行級(jí)鎖”時(shí)并不意味著它只有行鎖。為了實(shí)現(xiàn)高效的鎖管理InnoDB設(shè)計(jì)了一套多粒度的鎖機(jī)制包括意向鎖Intention Locks。為什么需要意向鎖想象一下如果沒(méi)有意向鎖事務(wù)A鎖定了表中的一行行級(jí)X鎖。此時(shí)事務(wù)B想給整個(gè)表加一個(gè)表級(jí)X鎖比如執(zhí)行ALTER TABLE。事務(wù)B如何判斷自己能否加這個(gè)表鎖呢它必須逐行檢查表中是否有任何一行已經(jīng)被加鎖。對(duì)于一個(gè)有上億行記錄的表這種檢查是災(zāi)難性的、不現(xiàn)實(shí)的。意向鎖就是為了解決這個(gè)問(wèn)題而生的。它是一種表級(jí)鎖但它表達(dá)的是一種“意向”Intention而不是真正的鎖定。意向共享鎖Intention Shared Lock, IS鎖事務(wù)打算給表中的某些行加S鎖。在給一行加S鎖之前必須先獲得該表的IS鎖。意向排他鎖Intention Exclusive Lock, IX鎖事務(wù)打算給表中的某些行加X(jué)鎖。在給一行加X(jué)鎖之前必須先獲得該表的IX鎖。規(guī)則是事務(wù)在獲取行鎖S或X之前必須先獲取對(duì)應(yīng)表級(jí)的意向鎖IS或IX。意向鎖之間是兼容的因?yàn)樗鼈冎皇潜磉_(dá)意向不沖突。但意向鎖與真正的表級(jí)S/X鎖之間有特定的兼容性規(guī)則正是這套規(guī)則讓表級(jí)鎖的快速判斷成為可能。請(qǐng)求鎖類型 vs 已存在鎖類型X表IX表S表IS表X表沖突沖突沖突沖突IX表沖突兼容沖突兼容S表沖突沖突兼容兼容IS表沖突兼容兼容兼容從這個(gè)兼容性矩陣我們可以解讀出幾個(gè)關(guān)鍵點(diǎn)表級(jí)X鎖與任何意向鎖都沖突。這意味著如果一個(gè)事務(wù)持有了表級(jí)X鎖如LOCK TABLES ... WRITE其他事務(wù)連獲取意向鎖即打算操作任何行都不被允許。表級(jí)S鎖與IX鎖沖突。這意味著如果一個(gè)事務(wù)持有了表級(jí)S鎖如LOCK TABLES ... READ其他事務(wù)就不能獲取IX鎖即不能“打算”修改任何行。IX鎖與IX鎖是兼容的。這是實(shí)現(xiàn)高并發(fā)寫的關(guān)鍵兩個(gè)事務(wù)可以同時(shí)持有同一個(gè)表的IX鎖意味著它們可以同時(shí)修改表中不同的行因?yàn)樾屑?jí)X鎖是互斥的但表級(jí)意向鎖不互斥?,F(xiàn)在回到開(kāi)頭的場(chǎng)景事務(wù)B想給表加X(jué)鎖。它只需要檢查兩件事1. 當(dāng)前是否有其他事務(wù)持有該表的X鎖2. 當(dāng)前是否有其他事務(wù)持有該表的IS或IX鎖只要發(fā)現(xiàn)任何一個(gè)事務(wù)B的加鎖請(qǐng)求就會(huì)被阻塞。這個(gè)檢查是瞬間完成的無(wú)需遍歷每一行。行鎖升級(jí)為表鎖的常見(jiàn)誤區(qū)網(wǎng)上常說(shuō)“InnoDB的行鎖會(huì)在某些情況下升級(jí)為表鎖”這其實(shí)是一個(gè)容易誤導(dǎo)的說(shuō)法。更準(zhǔn)確的情況是索引失效導(dǎo)致鎖升級(jí)如果UPDATE或DELETE語(yǔ)句的WHERE條件無(wú)法使用索引InnoDB將無(wú)法通過(guò)索引精確定位到需要鎖定的行。為了保證數(shù)據(jù)一致性它可能會(huì)退而求其次鎖定所有被掃描過(guò)的行甚至鎖定整個(gè)索引或整個(gè)表。這本質(zhì)上不是“升級(jí)”而是因?yàn)闊o(wú)法使用行鎖而被迫使用更粗粒度的鎖。這也是為什么我們必須為高頻查詢和更新的字段建立合適索引的重要原因之一。-- 假設(shè)phone字段沒(méi)有索引 UPDATE users SET status 1 WHERE phone 13800138000; -- 這條語(yǔ)句會(huì)進(jìn)行全表掃描對(duì)掃描到的每一行可能是全表都嘗試加X(jué)鎖效果類似于鎖表。顯式的表鎖語(yǔ)句使用了LOCK TABLES ... READ/WRITE這是應(yīng)用層主動(dòng)要求的表鎖與引擎無(wú)關(guān)。所以在InnoDB中表鎖意向鎖、自增鎖等和行鎖是協(xié)同工作的共同構(gòu)建起一套高效的并發(fā)控制體系。理解意向鎖是理解InnoDB鎖機(jī)制如何平衡精度與效率的關(guān)鍵。4. 超越單行間隙鎖、臨鍵鎖與幻讀的防治在“可重復(fù)讀Repeatable Read, RR”隔離級(jí)別下InnoDB引入了兩種更復(fù)雜的鎖用于解決“幻讀Phantom Read”問(wèn)題間隙鎖Gap Lock和臨鍵鎖Next-Key Lock。什么是幻讀在一個(gè)事務(wù)內(nèi)兩次執(zhí)行相同的查詢第二次查詢看到了第一次查詢時(shí)未出現(xiàn)的“幻影行”。注意幻讀強(qiáng)調(diào)的是“看到了新插入的行”。在“讀已提交Read Committed, RC”級(jí)別下幻讀是可能發(fā)生的。間隙鎖Gap Lock間隙鎖鎖定的不是一條具體的記錄而是索引記錄之間的“間隙”。例如表中存在id為5和10的記錄那么間隙鎖可以鎖定區(qū)間(5, 10)。它的存在是為了防止其他事務(wù)在這個(gè)間隙中插入新的記錄。間隙鎖是共享的。多個(gè)事務(wù)可以在同一個(gè)間隙上持有間隙鎖。它的唯一目的就是阻止插入。間隙鎖只存在于RR隔離級(jí)別或以上在RC級(jí)別下不存在。臨鍵鎖Next-Key Lock臨鍵鎖是行鎖Record Lock 間隙鎖Gap Lock的組合。它既鎖定了記錄本身也鎖定了該記錄之前的間隙。假設(shè)索引中有值10, 11, 13, 20。那么臨鍵鎖可能鎖定的區(qū)間是(-∞, 10], (10, 11], (11, 13], (13, 20], (20, ∞)。它是一個(gè)“左開(kāi)右閉”的區(qū)間。當(dāng)InnoDB掃描索引并準(zhǔn)備加鎖時(shí)默認(rèn)使用的就是臨鍵鎖。這是RR級(jí)別下防止幻讀的主要手段。實(shí)戰(zhàn)案例分析范圍查詢?nèi)绾渭渔i假設(shè)表t有一個(gè)主鍵索引id現(xiàn)有數(shù)據(jù)1, 5, 10, 15。-- 事務(wù)A (RR隔離級(jí)別) START TRANSACTION; SELECT * FROM t WHERE id 10 AND id 15 FOR UPDATE;這條語(yǔ)句會(huì)查詢到id10這一條記錄。那么它到底鎖定了什么找到id10的記錄加上行鎖X鎖。為了阻止幻讀InnoDB還會(huì)加上間隙鎖。對(duì)于id 10它會(huì)鎖定[10, ∞)這個(gè)區(qū)間嗎不完全是。因?yàn)闂l件是id 15所以它找到的下一個(gè)索引鍵值是15。因此InnoDB實(shí)際加的是臨鍵鎖鎖定的范圍是[10, 15)。具體來(lái)說(shuō)對(duì)id10的記錄加行鎖。對(duì)間隙(10, 15)加間隙鎖。 所以鎖定的區(qū)間是(5, 15]臨鍵鎖區(qū)間是左開(kāi)右閉但這里id10是右閉端點(diǎn)整體效果是鎖住了10以及10到15之間的空隙。此時(shí)如果事務(wù)B嘗試執(zhí)行以下操作-- 事務(wù)B INSERT INTO t (id) VALUES (12); -- 被阻塞因?yàn)?2在(10, 15)間隙內(nèi) UPDATE t SET ... WHERE id 15; -- 成功因?yàn)?5不在鎖定的臨鍵鎖范圍內(nèi)右邊界是開(kāi)區(qū)間。但如果是SELECT ... FOR UPDATE id15也可能被阻塞取決于具體實(shí)現(xiàn)和是否存在其他鎖。 INSERT INTO t (id) VALUES (8); -- 成功8在(5,10)間隙未被鎖定。如何觀察和驗(yàn)證鎖信息可以通過(guò)performance_schema庫(kù)中的data_locks和data_lock_waits表MySQL 8.0來(lái)查看當(dāng)前的鎖等待情況。對(duì)于更早的版本可以使用SHOW ENGINE INNODB STATUS命令在輸出的TRANSACTIONS部分查看鎖信息。這對(duì)于排查死鎖和鎖超時(shí)問(wèn)題至關(guān)重要。理解間隙鎖和臨鍵鎖是掌握RR隔離級(jí)別下InnoDB行為的關(guān)鍵。它們雖然增強(qiáng)了數(shù)據(jù)一致性但也帶來(lái)了更復(fù)雜的鎖沖突可能性是許多死鎖場(chǎng)景的“元兇”。在設(shè)計(jì)索引和編寫SQL時(shí)必須考慮這些鎖的影響范圍。5. 鎖的沖突與化解死鎖的成因、排查與規(guī)避策略死鎖是并發(fā)系統(tǒng)中經(jīng)典且棘手的問(wèn)題。在MySQL中當(dāng)兩個(gè)或更多事務(wù)相互等待對(duì)方釋放鎖并且都無(wú)法繼續(xù)推進(jìn)時(shí)就形成了死鎖。InnoDB引擎內(nèi)置了死鎖檢測(cè)機(jī)制一旦發(fā)現(xiàn)死鎖會(huì)立即回滾其中一個(gè)代價(jià)最小的事務(wù)通常以修改的行數(shù)為參考讓其他事務(wù)得以繼續(xù)。一個(gè)典型的死鎖場(chǎng)景假設(shè)有賬戶表accounts有兩個(gè)事務(wù)同時(shí)操作-- 事務(wù)1 START TRANSACTION; UPDATE accounts SET balance balance - 100 WHERE id 1; -- 持有id1的X鎖 UPDATE accounts SET balance balance 100 WHERE id 2; -- 嘗試獲取id2的X鎖 -- 事務(wù)2 START TRANSACTION; UPDATE accounts SET balance balance - 50 WHERE id 2; -- 持有id2的X鎖 UPDATE accounts SET balance balance 50 WHERE id 1; -- 嘗試獲取id1的X鎖執(zhí)行時(shí)序如下事務(wù)1鎖定id1。事務(wù)2鎖定id2。事務(wù)1嘗試鎖定id2發(fā)現(xiàn)被事務(wù)2持有于是等待。事務(wù)2嘗試鎖定id1發(fā)現(xiàn)被事務(wù)1持有于是等待。 至此事務(wù)1等待事務(wù)2事務(wù)2等待事務(wù)1形成循環(huán)等待死鎖產(chǎn)生。InnoDB檢測(cè)到后會(huì)回滾其中一個(gè)事務(wù)比如事務(wù)2并向客戶端返回1213 - Deadlock found when trying to get lock; try restarting transaction錯(cuò)誤。事務(wù)1隨后可以成功執(zhí)行。死鎖的排查工具SHOW ENGINE INNODB STATUS這是最常用的工具。在輸出中查找LATEST DETECTED DEADLOCK部分它會(huì)詳細(xì)記錄最后一次死鎖發(fā)生的時(shí)間、涉及的事務(wù)、正在執(zhí)行的SQL語(yǔ)句、以及每個(gè)事務(wù)持有和等待的鎖。這是分析死鎖根因的第一手資料。performance_schema在MySQL 5.7 / 8.0中可以啟用performance_schema的相關(guān)消費(fèi)者consumers通過(guò)查詢events_transactions_current,data_locks,data_lock_waits等表來(lái)實(shí)時(shí)監(jiān)控鎖和事務(wù)狀態(tài)進(jìn)行更深入的分析。規(guī)避死鎖的實(shí)戰(zhàn)策略死鎖無(wú)法完全避免但可以通過(guò)良好的設(shè)計(jì)和編碼習(xí)慣大幅降低其發(fā)生概率和影響保持事務(wù)小巧且快速事務(wù)越大持有鎖的時(shí)間越長(zhǎng)與其他事務(wù)沖突的概率就越高。盡快提交或回滾事務(wù)。約定一致的訪問(wèn)順序這是最重要、最有效的原則。在業(yè)務(wù)邏輯中如果存在多個(gè)需要更新的對(duì)象如表、行所有事務(wù)都按照相同的順序去訪問(wèn)它們。例如總是先更新id小的賬戶再更新id大的賬戶。在上面的例子中如果兩個(gè)事務(wù)都按id1 - id2的順序更新就不會(huì)發(fā)生死鎖。為查詢創(chuàng)建合適的索引避免因?yàn)樗饕?dǎo)致鎖范圍擴(kuò)大從行鎖升級(jí)為類似表鎖的行為增加沖突面。使用EXPLAIN檢查SQL的執(zhí)行計(jì)劃。降低隔離級(jí)別如果業(yè)務(wù)允許將隔離級(jí)別從RR降為RC。RC級(jí)別下沒(méi)有間隙鎖可以消除大量因間隙鎖導(dǎo)致的死鎖。但需評(píng)估幻讀風(fēng)險(xiǎn)。使用樂(lè)觀鎖對(duì)于沖突不那么激烈的場(chǎng)景可以考慮使用樂(lè)觀鎖。在表中增加一個(gè)版本號(hào)version字段。更新時(shí)將version作為條件。-- 樂(lè)觀鎖更新示例 UPDATE products SET stock stock - 1, version version 1 WHERE id 100 AND version 5;如果更新影響行數(shù)為0說(shuō)明版本號(hào)已被其他事務(wù)修改本次更新失敗需要在應(yīng)用層重試或提示用戶。設(shè)置合理的鎖等待超時(shí)通過(guò)innodb_lock_wait_timeout參數(shù)默認(rèn)50秒設(shè)置鎖等待超時(shí)時(shí)間。對(duì)于不重要的后臺(tái)任務(wù)可以設(shè)置一個(gè)較短的超時(shí)時(shí)間避免長(zhǎng)時(shí)間阻塞。但這只是緩解不是解決。重試機(jī)制在應(yīng)用層捕獲死鎖異常如1213錯(cuò)誤并進(jìn)行有限次數(shù)的重試。這對(duì)于由短時(shí)鎖競(jìng)爭(zhēng)引起的偶發(fā)死鎖非常有效。死鎖是系統(tǒng)并發(fā)度達(dá)到一定水平后的自然產(chǎn)物不必談之色變。關(guān)鍵在于建立有效的監(jiān)控、分析和應(yīng)對(duì)機(jī)制將其對(duì)業(yè)務(wù)的影響控制在可接受的范圍內(nèi)。6. 隱形的守護(hù)者與性能殺手元數(shù)據(jù)鎖與自增鎖除了我們熟知的用于保護(hù)數(shù)據(jù)的鎖MySQL還有兩種至關(guān)重要的“后臺(tái)鎖”它們不直接參與業(yè)務(wù)數(shù)據(jù)的并發(fā)控制卻深刻影響著數(shù)據(jù)庫(kù)的可用性和性能元數(shù)據(jù)鎖Metadata Lock, MDL和自增鎖AUTO-INC Lock。元數(shù)據(jù)鎖MDL表結(jié)構(gòu)的守護(hù)神文章開(kāi)頭的事故罪魁禍?zhǔn)拙褪荕DL鎖。MDL鎖是Server層實(shí)現(xiàn)的鎖用于保護(hù)表結(jié)構(gòu)元數(shù)據(jù)的一致性防止在查詢或修改表數(shù)據(jù)的同時(shí)表結(jié)構(gòu)被更改如ALTER TABLE,DROP TABLE。MDL鎖也分為不同級(jí)別MDL讀鎖在執(zhí)行DML操作SELECT,INSERT,UPDATE,DELETE時(shí)自動(dòng)獲取。多個(gè)事務(wù)可以同時(shí)持有同一表的MDL讀鎖。MDL寫鎖在執(zhí)行DDL操作ALTER TABLE,DROP TABLE時(shí)自動(dòng)獲取。MDL寫鎖是排他的。MDL鎖的阻塞與死鎖風(fēng)險(xiǎn)MDL鎖的引入帶來(lái)了一個(gè)經(jīng)典的阻塞鏈問(wèn)題一個(gè)長(zhǎng)查詢或長(zhǎng)事務(wù)SELECT * FROM big_table開(kāi)始執(zhí)行獲取了該表的MDL讀鎖。此時(shí)另一個(gè)線程執(zhí)行ALTER TABLE big_table ADD COLUMN ...它需要獲取MDL寫鎖。由于MDL讀鎖與寫鎖互斥這個(gè)DDL操作被阻塞進(jìn)入等待隊(duì)列。后續(xù)所有新的、針對(duì)big_table的查詢需要MDL讀鎖都會(huì)被這個(gè)等待的MDL寫鎖阻塞因?yàn)镸DL鎖的調(diào)度是“寫鎖優(yōu)先”在寫鎖等待期間新的讀鎖申請(qǐng)也會(huì)被堵在后面。 這就導(dǎo)致了“一榮俱榮一損俱損”的雪崩效應(yīng)一個(gè)慢查詢或未提交的事務(wù)可以阻塞整個(gè)表的所有后續(xù)訪問(wèn)包括查詢。如何應(yīng)對(duì)MDL鎖問(wèn)題監(jiān)控與發(fā)現(xiàn)使用SHOW PROCESSLIST命令查看線程狀態(tài)關(guān)注Waiting for table metadata lock。在performance_schema中可以通過(guò)metadata_locks表查看MDL鎖的詳細(xì)信息。規(guī)范DDL操作在業(yè)務(wù)低峰期執(zhí)行這是鐵律。使用pt-online-schema-change或gh-ost等在線改表工具這些工具通過(guò)創(chuàng)建影子表、同步數(shù)據(jù)、原子切換的方式避免了長(zhǎng)時(shí)間持有MDL寫鎖對(duì)業(yè)務(wù)影響極小。對(duì)于核心表的結(jié)構(gòu)變更應(yīng)強(qiáng)制使用此類工具。設(shè)置超時(shí)在MySQL 5.7可以為ALTER TABLE設(shè)置LOCK和ALGORITHM選項(xiàng)有時(shí)能減少鎖持有時(shí)間。但最根本的還是用在線工具。避免長(zhǎng)事務(wù)及時(shí)提交事務(wù)特別是使用了BEGIN或START TRANSACTION顯式開(kāi)啟的事務(wù)??焖俣ㄎ徊ill阻塞源通過(guò)information_schema.innodb_trx結(jié)合SHOW PROCESSLIST找到持有MDL讀鎖的長(zhǎng)時(shí)間運(yùn)行的事務(wù)或查詢并評(píng)估是否可以將其Kill掉。自增鎖AUTO-INC Lock序列號(hào)的秩序維持者當(dāng)表中有AUTO_INCREMENT列時(shí)InnoDB使用一種特殊的表級(jí)鎖——自增鎖來(lái)保證為每一行新數(shù)據(jù)生成的自增主鍵值是唯一且連續(xù)的。自增鎖的行為模式由innodb_autoinc_lock_mode參數(shù)控制innodb_autoinc_lock_mode 0(“傳統(tǒng)”模式)每次執(zhí)行INSERT語(yǔ)句時(shí)都會(huì)獲取一個(gè)特殊的表級(jí)AUTO-INC鎖并在語(yǔ)句結(jié)束后釋放。這保證了所有INSERT語(yǔ)句的自增ID是連續(xù)且可預(yù)測(cè)的但并發(fā)插入性能最差。innodb_autoinc_lock_mode 1(“連續(xù)”模式默認(rèn)值)這是大多數(shù)情況下的最佳選擇。對(duì)于“簡(jiǎn)單插入”能預(yù)先確定插入行數(shù)的語(yǔ)句如INSERT INTO t VALUES (1), (2), (3)它使用一個(gè)輕量級(jí)的互斥量來(lái)生成ID不需要持有AUTO-INC鎖到語(yǔ)句結(jié)束大大提升了并發(fā)性。對(duì)于“批量插入”如INSERT ... SELECT,LOAD DATA它仍然會(huì)使用AUTO-INC鎖以保證生成的ID對(duì)于當(dāng)前語(yǔ)句是連續(xù)的。innodb_autoinc_lock_mode 2(“交錯(cuò)”模式)所有INSERT語(yǔ)句都不使用AUTO-INC鎖完全依靠互斥量生成ID。這能提供最高的并發(fā)插入性能但會(huì)帶來(lái)兩個(gè)后果1) 同一語(yǔ)句內(nèi)生成的自增ID可能不連續(xù)2) 在基于語(yǔ)句的復(fù)制SBR模式下可能導(dǎo)致主從不一致。因此只有在使用行復(fù)制RBR或混合復(fù)制MBR時(shí)才考慮使用此模式。實(shí)戰(zhàn)建議除非有非常特殊的、要求絕對(duì)連續(xù)ID且并發(fā)插入不高的場(chǎng)景否則保持默認(rèn)的innodb_autoinc_lock_mode 1即可。它很好地平衡了性能、一致性和并發(fā)性。理解MDL鎖和自增鎖能幫助我們?cè)谶M(jìn)行表結(jié)構(gòu)變更和高并發(fā)插入時(shí)提前預(yù)判風(fēng)險(xiǎn)制定更穩(wěn)妥的方案避免它們從“守護(hù)者”變成“性能殺手”。7. 鎖的實(shí)戰(zhàn)觀測(cè)與性能優(yōu)化思路理論最終要服務(wù)于實(shí)踐。我們?nèi)绾沃庇^地看到數(shù)據(jù)庫(kù)中的鎖又該如何基于對(duì)鎖的理解來(lái)優(yōu)化系統(tǒng)性能這是本章要解決的核心問(wèn)題。鎖信息觀測(cè)實(shí)戰(zhàn)SHOW ENGINE INNODB STATUS(經(jīng)典方法) 執(zhí)行該命令后在輸出結(jié)果中重點(diǎn)關(guān)注TRANSACTIONS和LATEST DETECTED DEADLOCK如果有部分。這里會(huì)顯示當(dāng)前活躍事務(wù)、持有的鎖以及鎖等待信息。雖然信息是文本格式不如新系統(tǒng)表直觀但在所有版本中均可用。---TRANSACTION 1234567890, ACTIVE 10 sec starting index read mysql tables in use 1, locked 1 LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s) MySQL thread id 100, OS thread handle 0x7f123456, query id 200 localhost root updating UPDATE accounts SET balance balance - 100 WHERE id 2 ------- TRX HAS BEEN WAITING 5 SEC FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 300 page no 3 n bits 72 index PRIMARY of table test.accounts trx id 1234567890 lock_mode X locks rec but not gap waiting Record lock, heap no 3 PHYSICAL RECORD: ...這段輸出告訴我們事務(wù)1234567890正在等待一個(gè)行鎖lock_mode X鎖的模式是locks rec but not gap記錄鎖非間隙鎖鎖在accounts表的主鍵索引上。information_schema與performance_schema(推薦MySQL 5.7/8.0)information_schema.innodb_locks/innodb_lock_waits(在8.0中已被移除遷移至performance_schema)可以查看當(dāng)前的鎖和鎖等待關(guān)系。performance_schema.data_locks(MySQL 8.0)記錄了所有當(dāng)前持有的鎖包括行鎖、表鎖、意向鎖等的詳細(xì)信息如鎖類型、模式、所屬對(duì)象等。performance_schema.data_lock_waits(MySQL 8.0)記錄了當(dāng)前的鎖等待關(guān)系明確指出哪個(gè)事務(wù)在等待哪個(gè)事務(wù)持有的鎖。一個(gè)常用的排查鎖阻塞的查詢-- MySQL 8.0 SELECT r.trx_id AS waiting_trx_id, r.trx_mysql_thread_id AS waiting_thread, r.trx_query AS waiting_query, b.trx_id AS blocking_trx_id, b.trx_mysql_thread_id AS blocking_thread, b.trx_query AS blocking_query FROM performance_schema.data_lock_waits w INNER JOIN information_schema.innodb_trx b ON b.trx_id w.blocking_engine_transaction_id INNER JOIN information_schema.innodb_trx r ON r.trx_id w.requesting_engine_transaction_id;這個(gè)查詢能清晰地展示出“誰(shuí)被誰(shuí)阻塞了”是診斷鎖等待問(wèn)題的利器。基于鎖機(jī)制的SQL編寫與索引設(shè)計(jì)優(yōu)化對(duì)鎖的理解直接影響我們編寫SQL和設(shè)計(jì)索引的方式盡量使用主鍵或唯一索引進(jìn)行更新/刪除這能確保InnoDB使用行鎖將鎖的粒度控制在最小范圍。避免全表掃描導(dǎo)致的鎖升級(jí)。避免大范圍更新特別是無(wú)索引的更新UPDATE table SET status 0 WHERE status 1如果status字段沒(méi)有索引會(huì)鎖住大量甚至全部記錄極易引發(fā)長(zhǎng)時(shí)間鎖等待和死鎖。務(wù)必為WHERE條件中的字段添加索引。謹(jǐn)慎使用SELECT ... FOR UPDATE明確你真的需要“當(dāng)前讀”并鎖定數(shù)據(jù)。如果只是要保證讀取一致性RR級(jí)別下的普通SELECT快照讀通常就夠了它不會(huì)加鎖并發(fā)性能更高。只在需要基于查詢結(jié)果立即進(jìn)行更新且要防止其他事務(wù)修改時(shí)才使用FOR UPDATE。將大事務(wù)拆分為小事務(wù)這是黃金法則。一個(gè)更新10萬(wàn)行的事務(wù)持有鎖的時(shí)間可能長(zhǎng)達(dá)幾分鐘。拆分成每次更新1000行并在每個(gè)批次后提交能顯著減少鎖的持有時(shí)間和沖突概率。注意間隙鎖的影響范圍在RR級(jí)別下范圍查詢BETWEEN,,和FOR UPDATE會(huì)加間隙鎖。在設(shè)計(jì)業(yè)務(wù)邏輯和索引時(shí)要考慮這個(gè)特性。有時(shí)使用SELECT ... FOR UPDATE SKIP LOCKEDMySQL 8.0可以跳過(guò)已被鎖定的行實(shí)現(xiàn)簡(jiǎn)單的無(wú)鎖隊(duì)列提高并發(fā)處理能力。監(jiān)控innodb_row_lock_*狀態(tài)變量通過(guò)SHOW STATUS LIKE innodb_row_lock%;可以查看行鎖的競(jìng)爭(zhēng)情況。innodb_row_lock_current_waits當(dāng)前正在等待行鎖的數(shù)量。innodb_row_lock_time系統(tǒng)啟動(dòng)以來(lái)行鎖定的總時(shí)間毫秒。innodb_row_lock_time_avg每次行鎖等待的平均時(shí)間。innodb_row_lock_time_max行鎖等待的最長(zhǎng)時(shí)間。innodb_row_lock_waits系統(tǒng)啟動(dòng)以來(lái)行鎖等待發(fā)生的總次數(shù)。 如果innodb_row_lock_waits和innodb_row_lock_time_avg持續(xù)很高說(shuō)明行鎖競(jìng)爭(zhēng)激烈需要優(yōu)化。鎖是數(shù)據(jù)庫(kù)并發(fā)控制的精髓也是性能調(diào)優(yōu)的深水區(qū)。從被動(dòng)地解決鎖超時(shí)、死鎖告警到主動(dòng)地通過(guò)設(shè)計(jì)規(guī)避鎖沖突是每個(gè)后端開(kāi)發(fā)者成長(zhǎng)的必經(jīng)之路。掌握觀測(cè)工具理解鎖的行為模式才能讓我們?cè)跇?gòu)建高并發(fā)、高可用的數(shù)據(jù)服務(wù)時(shí)真正做到心中有數(shù)游刃有余。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月婷婷丁香91| 99爱视频在线| 天天日日人| 色婷婷在线视频| 国产成人高清| 激情五月四色| 亚洲天堂色色| 综合网啪| 婷婷情色激情| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 夜夜谢天天干| 人妻精品一区二区三区| 亚洲性图一区二区| 久/久精品99看9| 国产婷婷婷| 婷婷五月色激情欧美激情| 色5月婷婷色| 99热这里只有精| 丁香五月香蕉| 久久这里只有国产精品视频| 蜜桃婷婷五月| 激情九月婷婷| 五月婷婷啪啪网| www.色色色com| 久久婷婷丁香| 永久免费一区二区三区| 五月丁香六月婷婷在线观看| 天天干天天叉| 丁香五月色五月婷婷宗合| 激情综合区| 婷婷字幕在线| 日韩不卡123| 天天操天天操天天操天天操天天操 | 天天天天天天操| 久久激情五月天| 五月丁香啪啪| 色婷婷婷av| 亚洲AV永久无码影院黑人| 亚洲精品电影| 中文字幕在线免费观看视频| 99九无网码| 99热成人在线观看| 玖玖资源站蜜臀| 婷婷欧美色| 99碰网站| 99热超碰在线| 夜夜操夜夜爽| 色五月婷婷丁香国产在线| 色噜久| 亚洲免费成人电影AV| 九九久久精品| A片试看50分钟做受视频| 亚洲国产精品VA在线看黑人| 十一月婷婷激情四射| 伊人五月天婷婷| 亚洲小说五月婷婷| 操逼123网| 色五月aV| 五月婷婷婷婷婷婷艺术| 欧美成人精品一区二区| 色播五月天激情| 精品久久久久久久人妻| 九九久久网| 欧美久久婷婷| 色五月大| 99热97| 欧美激情综合| 色婷婷成人做爰A片免费看网站 | 超碰国产在线播放| 五月婷三级片| 黄色av高清| 丁香六月婷婷操逼网| 天天插操| 成人免费在线电影| 中文字幕+乱码+中文字幕在线观看| 69精品人人人人人人| 中文字幕成人影视| 六月丁香婷婷综合色播| 色区域网站视频| 性天天中文网| 激情文学五月丁香六月婷婷 | 97av在线视频| 色色色在线播放| 丁香五月六月久久综合| 嫩BBB槡BBBB搡BBBB视频| 激情五月丁香六月婷婷| 国产成人AV在线播放| 色婷| 99热亚洲综合| 激情WWW| 久久九九蜜| 激情五月天综合| 精品久热69| 色婷婷视频| AV九九| 久久久天堂国产精品女人| 色综合久久无码| 久久久久久久久久久44| 五月色婷婷AV| 婷婷99| av大香蕉| 久99视频在线观看| 五月天激情AV| 疯狂做受XXXX高潮A片动画| 99re资源在线视频导航| 亚洲精99| 天天爽成人综合网站| 六月丁香综合网| 色视频五月天| 五月天婷婷偷拍| 操操自拍| 99激情视频| 天天做天天爱天天高潮| 婷婷综合色图| 免费国产视频| 欧美啪啪五月天| 综合激情五月四射婷婷| 久草视频一,二三四| 国产又粗又大又爽又黄| 97色色色色| 狠狠色狠狠色综合日日91| 激情九月婷婷| 五月丁香六月激情综合| 欧美大道不卡| 操97免费超级视频| aaa9区免费在线观看| 婷婷基地成人五月天| 日本久久精品18| 色婷婷综合久久| 丁香婷婷黄网站| 久99热| 五月婷婷六月色| 无码色综合| 丁香五月激情婷婷| 天天色中文字幕女优AV| 五月成人网天天| 99这里有精品| 狠狠操狠狠狠| 日韩99无码| 热99久久这里只有精品| 婷婷伊人久久无码色五月| 久久五月丁香婷婷| 久99视频| 夜夜骑日日夜夜| 久久性视频| 色婷婷久久久| 欧美丰满熟妇BBB久久久| 成人做爰A片免费看网站找不到了| 美日韩成人| 人人草人人爱| 91成人电影| 色五月中文网| 91婷婷伊人牛牛| 色婷婷www| 日韩婷久| 中文字幕在线播放视频| 深爱激情网五月| 26UUU精品一区二区| 97色片| 九色啦蜜臀| 熟美女麻豆| 丁香五月亚综合图片| 久久99国产综合精品免费| 激情婷婷五月亚洲| 久久大国产香蕉| 婷婷五月丁香成人网| 五月婷婷和六月| 国产真人做爰视频免费| 激情小说视频图片| 激情综合网五月婷婷| 欧美精品99| 久热人妻| 欧美成人在线观看| 啪啪黄页网| www.久久久.com| 久久99网| 99在线观看视频| 亚洲无码激情| 色播五月丁香| 久久婷婷五月天| 秋霞A V毛片| 91chinese在线| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 99re在线播放| 色五月丁香五月| 色五月天丁香婷婷色| 丁香婷婷五月色成人网站| 五月天综合在线| 99久久久| 久久9热| 色色五月天丁香| 日本狠狠干| 伊人干练久| 亚洲天堂碰碰婷婷| 婷婷伊人网| 九月色婷婷综合| 内射综合网| 99无码视频| 五月日韩中文字幕| 级情九色| 丁香久久| 久久五月婷婷开心网| 丁香五月综合首页| 亚洲中文字幕在线观看| 久99热| 五六月丁香激情视频| 久久综合色五月| 99热精品在线观看| 色伊人婷婷| www婷婷亚洲| 金品在线视频99| 丁香九月激情| 久9视频| 79色色色色| 久久停停超碰| 日91高清无玛| 婷婷色一二三区波多野结衣| 国产午夜成人免费看片无遮挡| 婷婷97狠狠干| 天天看A片| 超碰操日| 日木WWW视频| 亚韩在线视频| 狼人婷婷久久| 久久五月丁香| 欧美成人A片AAA片在线播放| 五月婷庭丁香在线| 狠狠五月天婷婷| 久激情| 成人做爰A片免费看网站找不到了 国产露脸150部国语对白 | 五月丁香久人妻中文| av网站免费在线| 天天天天干| www.91色| 五月婷在线观看| 婷婷综合五月| 99精品国产在热久久婷婷| 国产成人精品一区二三区熟女在线 | 六月天无码网址| 欧美日韩999| 色综合久网| 超碰婷婷色| 六月婷婷色综合| 中文字幕,综合,91| 九九热只有精品| 五月天电影网| 婷婷六月情| 丁香五月天婷婷久久| 婷婷天堂站| 色婷另类| 婷婷久久综合久| 在线不卡中文字幕| 天天色天天射天天日| 五月婷婷色| 天天色色天天| 婷婷五月天激情网| 新97人人上人人| 日日撸夜夜操| 久久久香| A片试看50分钟做受视频| 大香蕉五月天| 久久全意婷婷| 99伊人婷婷在线| 热996精品在线观看| 激情婷婷综合网| www.com任你艹| 久热re在线视频| 超碰99热精品| 99视频色在线观看| 79色色免费| 五月天激情Av| 五月激情影院| 五月激情小说| 婷婷色资源| 97人人操人人拍| 丁香狠狠操| 欧美大道不卡| 亚洲激情无码久久| 色XX综合网| www,色婷婷| 九九黄色网| 五月丁香婷婷综合在线| 伊人婷婷五月| 99色视频在线| 久操婷婷| 超碰色人妾| 色99热| 轮奸综合网| w婷婷五月婷婷w| 79色色色色| 丁香久久久| 91成人性爱视频| 艳妇野外情欲放荡HD| 久热精彩视频98| 色一情一乱一乱91Av| 99福利导航| 色综合色欲综合天天免费| 五月天综合影院| 婷婷中文无码| 99超碰欧美| 九九性爱网| 开心婷婷中文字慕| 色综合伊人网| 亚洲成人在线在线| 91九色首页| 色情激情五月| 婷婷99狠狠| 亚洲成人av在线观看| 亚洲第一黄网| 色五月AV| 91丨九色丨熟女高潮| 在线播放成人网站| 欧美啪啪五月天| 午夜丁香婷婷| 在线视频激情网站| www.金莲av| 欧美五月婷婷| 婷婷色五月天在线观看| 青青草伊人婷婷| 五月丁香 啪啪| 人人人操97| av在线免费播放| 丁香激情综合| 色狠狠伊人久久五月丁香| 激情综合色婷婷啪啪六月天| 亚洲无码免费看| 丁香婷婷人妻| 五月天色图| 青草青草久9视频在线视频| 9999久久久久| 五月丁香成人| 久久9热| 激情美女五月天激情在线| 久久婷婷亚洲| Av九九| 婷婷五月天开心网| 婷婷五月丁香国产| 久久一二三视频| 久操热| 91色碰| wwwxxx五月婷婷小说| 日本综合色图| 中文字幕在线免费观看视频| 丁香五月区| 97碰操| m色激情网| 婷婷色婷婷| 色五月天激情| 99热国产这里只有精品| 99色激| 久久婷婷色色| 婷婷五月成人| 超碰在线99| 99er6免费视频热播| 综合婷婷都市激情| 久热超碰91| 五月婷婷婷婷| 六月丁香停| 五月丁香色| 伊人超碰在线| 99性爱| 婷婷丁香综合| 大香蕉久久久久| 综合另类视频| 五月丁香婷婷基地| 婷婷五月天伊人| 色婷婷视频| 五月天激情四射| 婷婷午夜精品久久久| 日本啪啪网| 久久五月婷婷丁香| 99亚州综合精品成人网| 婷婷五月天日逼| 亚洲国产精品VA在线看黑人| 久久视频这里99| 九热av| 婷婷伊人网| 一区二区你懂的| 99re思思热久久| 大香伊人婷婷| 色色99| 丁香六月天AV| 欧美偷偷操| 色五月婷婷九月| 日本色色网站| 成人片在线播放| 在线色五月婷婷| 久热伊人91| 99亚州综合精品成人网| 婷婷五月情| 六月丁香啪啪| 天天做好综合色| 亚洲一区国产传媒| 裸体做A爰片毛片A片免费| 婷婷香五月综合激情| 日韩婷久| 五月天综合在线| www.夜夜騎夜夜狠| 亚洲欧美成人在线| 国产乱轮一区二区三区| 99啪啪| 大波美女VA网站| 狠狠色婷婷综合开心影视| 日本色爽| 色婷婷丁香五月丁香| 香蕉五月婷婷| 色狠狠色| 日本一级特黄大片AAAAA级| 开心婷婷五月激情网小说 | 久久精品4| 天天天操天天天爰| 五月天婷婷激情在线色图| 五月天综合视频| 丁香五月网| 人人干女人| 五月婷在线| 激情欧美丁香五月| 九九久久99| 日韩在线99| 婷婷成人基地| 久/久精品99看9| 五月婷AV| 亚洲精品欧洲精品| 亚洲成人综合在线| 无码A片一区二区免费| 亚洲AV成人在线| 色婷婷综合视频| 九九热10| 色狠狠综合| 男女啪啪视频久 9| 五月丁香六月激情| 99综合网| 五月天色婷婷基地| AV在线中文| 成人 AV播放| 丁香五月影院| 丁香五月在线观看| 欧洲亚洲免费视频9| 五月综合六月婷婷| www.狠狠狠.com| 久久人人九九| 男人的天堂五月丁香| 激情六月婷婷啪啪| 少妇水多A片太爽了| 久久婷婷五月综合| 97操在线视频| 日本女人久久| 色丁香五月婷婷| 五月婷婷激情综合视频| 99re26视频| 思思99热热热99| 婷婷月综合| 丁香婷婷五月人体| aaaa.黄| 丁香五月大香蕉在线99| 免费超碰在线观看| 4399无码视频二区| 人碰人人人玩91| 久久视频在线视频| 亚洲精品白浆高清久久久久久| 久久婷五月综合色| 色色免费网站| 超碰久热| 九九视频免费| 丁香五月AV在线| 99热只有精品在线播放| 欧美五月丁香在线| 五月丁香六月婷婷中合网| 五月在线婷色| 五月天婷婷色小说| 色五月丁香伊人| 婷婷五月天成人网站| 丁香五月激情鲁| 亚洲五月天婷婷综合| 天天情色五月天| 色欲日日躁| 日日干夜夜撸夜夜骑 | 97超级碰碰碰| 精品人妻伦一二三区久| 99热色精品| 一起草AV入口| 色色色天堂网| 五月色网| 九九热九九| 蜜桃人妻无码AV天堂三区| 99国产精品久久久久久久久久久 | 99热啪啪| 丁香五月大片| 久热视频这里只有精品| 五月丁香综合影院| www五月| 中字幕视频在线永久在线观看免费 | 国产黄大片在线观看画质优化| 成人AV免费观看| 超碰99热| 久久九九经典| 五月丁香大香蕉| 97丁香五月天| 五月天网站亭亭| 超碰日日操| 天天插综合网| 99热免费18| www.日本91| 久久99网站| 亚洲AAA| 婷婷狠狠干| 涩综合婷婷| 久久综合26p| 色婷婷69| 色色综合视频| 欧美va在线| 开心色色五月天综合| 91se在线观看| 六月丁香婷婷网| 天天爽天天爽视频| 欧美大肥婆大肥BBBBB| 丁香五月激情五月| site:xiongshengzz.com| VA婷婷亚洲| 亚洲AV网站在线观看| 国产亚洲精品久久久久苍井松 | 大香蕉婷婷婷| 噜综合| 5月婷婷6月六月丁香| 综合激情视频| 青青色com久久| 亚洲激情 久久| www.99热这里精品| 怎么样可以看免费的一级av| 在线五月婷婷小电影| 色噜噜狠狠插综合| 大地资源色婷婷视频在线| 婷婷色五月大香蕉在线观看| www.ppypp| 99热只有| 亚韩在线视频| 看片视频在线免费日产在线看| 婷婷五月色情| 丁香五月婷婷综合激情哟哟哟| 婷婷五月天99综合网站| 丁香婷婷六月婷婷六月婷婷六月婷婷| 五月丁香六月婷| 月色色综合婷婷网| 这里只有精品视频在线看| 丁香五月自拍| 任你擦免费视频| 激情五月色综合| 狠狠精品干练久久久无码中文字幕| 丁香五月激情啪啪综合| 久久五月网| 99国产在线| 色你久久| 婷婷五月综合色拍| 超碰97干| 棕合影院色色| www.久久爱.com| 亚洲成人婷婷| 夜夜AVV| 欧洲免费视频色| 欧美大片免费观看| 五月天开心色情网| http:色情日本com| 26uuu亚洲色| 亚洲精品视频在线| 五月天婷婷成人网| 五月花综合| 婷婷亚洲色| 啪啪综合| 啪啪啪大香蕉| 欧美日本综合网| 久久免片| 欧美又粗又大一区二区在线观看| 永久精品| 丁香五月婷婷亚洲色图| 9色在线视频| 97操碰碰无码视频| 激情五月综合| 思思热在线视频观看精品| 婷婷五月天av| 狠狠做五月婷婷| 色狠狠色噜噜AV天堂五区| 激情综合激情五月| 久久婷婷网址| 五月婷婷激情中文字幕| 97久久久| 色狠狠色噜噜AV天堂五区| 婷婷色五月久久| 五月婷婷综合在线亚洲视频| 26UUU欧美| 九九青草热| 特黄三级片| 人妻久久久久久久久妻久久久久久久久 | 99精品在线下载| 无码碰碰| 日韩操逼大片| 亚洲性爱干干| a免费在线| 五月丁香成年黄色| 91精品婷婷国产综合久久| 欧美婷婷丁香五月社区| 亚洲国产精品SUV| 性色99| 久久视频婷婷| 日韩九区| 亚洲六月色| 91成人视频| 极品少妇XXXX精品少妇偷拍| 99久久极情精品一区| 中美月韩免费A片| 五月婷婷丁香六月| 99热一区| 精品一区二区三区四区五区六区介绍| 人妻22p| 激情五月天啪啪| 91综合网| 99这里只有精品| se99视频| 色必久悠悠影院| 玖玖热99| 少妇被下春药玩弄A片| 激情五月色在线播放| 激情文学久久| 日韩成人电泉AV| 丁香婷婷五月| 99这里只有| 亚洲色精彩| 99久久高清视频| 久久精品99| 99精品免费| 五月天播播综合| 五月婷婷九九热| 久久久天堂国产精品女人| 99热资源在线| 九色色| 五月开心婷婷中文字幕| www.99热在线| 五月丁香激情在线| 99啪啪| 一区二区传媒视频| 人人爽网| 六月丁香网| 色婷婷A| 亚洲激情精品| 色欲五月天| 激情色色| xx久久| 九九热青青草| 伊人婷婷福利网| 日日夜夜干| 中文字幕永久免费| 欧美性爱一区| 99热网站| 无码色色| 五月天深爱激情网| 亚洲、热| 激情综合网,婷婷五月天| 天天久久狠狠色综合| 五月丁香婷婷激情四射迷人| 婷婷丁香五月综合久久| 丁香性爱在线视频| 国产成人精品亚洲线观看| 色九月婷婷| 色哟哟精品| 99色色网| 99热色精品| 噜噜五月天综合| www.ppypp| 亚洲人人操BD| 欧美va欧美va差| 99热这里只有精品50| 天天成人五月天| 天天爱天天做天天舔| 丁香五月激情六月欧亚激情综合导航| 五月久久丁香| 五月停停99| 啪啪九九色| 色色色色色日韩午夜激情 | 国产精品18久久久| 涩涩五月天| 久久亚洲婷婷| 国产成人精品亚洲线观看| 国产伦理精品高清在线观看网站一区二区 | 亚洲婷婷丁香五月亚洲| 综合五月亭亭9| 五月天无码视屏播放| 五月天激情综合网俺也去| 97资源碰碰| 久久婷婷五月综合97色一本| 另类五月婷婷| 天天操天天日天天爽| 激情婷婷五月色| 中出内射的人妻视频| 五月开行婷婷色五月| 深情五月天| 亚洲人成色A777777在线观看| 欧美日本一区二区三区| 久久人妻www| 亚洲性爱电影| 五月天大香蕉| 天天日天天肏天天奸| #NAME?| 亚洲视频国产一区| 五月婷婷啪啪| 激情五月天之五月婷婷| 色五月丁香伊人五月| 91热网址| 久99| Aα在线免费观看| 色哟哟精品| 欧美色骚婷婷五月天| 丁香五月,激情五月,深爱五月| 久久久月丁香| 丁香五月在线观看| 天天操人人干| 青青久久五月| 黄色片区子| 五月婷深深爱激情网| 五月婷视频| 激情第四色| 五月婷婷久久爱| 婷婷五月色情| 五月开心网| 99热在线极品极品| 色五月综合网| 五月六月激情| 天天日,天天干,天天操| 六月婷婷天堂| 激情五月天婷婷图| 99热99热在线| 在线日韩视频| 99人人精品| 综合网激情五月天| 久久久婷婷五月亚洲97号色| 日本不卡高字幕在线2019| 91打屁股视频网站| 狠狠狠狠狠草| 天天干天天操天天爽| 伊人激情网| 婷婷综合激情五月中文字幕| 国精产品一区一区三区有限公司杨 | 五月天综合| 国产,欧美,学生妹,视频| 色狠狠色综合久久久绯色AⅤ影视| 日韩 中文 欧美| 激情五月亚洲综合网| 色欲天天综合| 亚洲成Av人片乱码色第1集| 久久综合热17c| www.99热视频| 精品九九网| 淫荡综合网| 色999五月色| 色综合久久88色综合天天看| 超碰A V在线| 96人人操人人操人人| 九九热啪啪| 综合精品啪啪| 99er视频在线| 人妻无码视频网| 婷香五月网在线| 激情综合网址| 九月婷婷激情| 天天爱天天做天天| 亚洲无码性爱| 新激情五月天色播| 少妇真实被内射视频三四区| 久久99这里只有精品| 丁香婷婷六月天| 国产免费av在线| 五月丁香六月激情欧美综合| 人妻免费网站| 综合深爱五月| 碰碰碰97国产| 狠色狠色综合久久| 五月天婷婷色播综合在线| 青青草a在线| 色五月婷婷老师| aⅤ79成人片| 99色免费观看全部| aaaaa黄色| 深爱开心激情| 夜夜爽天天| 日韩色色视频| 思思久ren热| 91碰碰| 一区二区三区四区五区| 丁香五月狠狠综合欧美| 婷婷永久在线| 91在线日| 99人人操人人摸| 黄色中文字目| 99re这里只有精品在线观看| 91大操| 婷婷激情五月天小说校园| 超碰在线免费观看3 9| 操一操插一插| 欧美婷婷九月| 99久久婷| 热的国产99热| 性生生活大片又黄又| 丁香五月天综合网| 欧美日韩中国| 99精品在线观看视频| 五月丁香婷婷久久| 久久婷综合| 狠狠人妻久久久久久综合丁香| 激情丁香五月| 综合色五月| 天天操综合网| 五月激情视频网| 色婷婷亚洲综合天堂| 婷婷五月免费视频| 国产超碰在线| 亚洲精品第一色色色色色色| 丁香五月天啪啪a日本| 大香蕉人人人| 丁香九月婷| 99视频久久免费视频| 91色性感五月婷婷丁香| 久久国产AV| 少妇人妻人伦A片| 中文字幕在线观看视频www| 激情小说五月天| 日本 @ va 免费| 欧美日韩成人免费在线| 强壮公让我夜夜高潮A片视频| 日韩无码专区| 夜夜嗨一区二区三区直播内容| 亚洲第一色色色| 九九九AAA热视频| 99热国产精品| WWW.99热| 丁香婷婷啪啪| 亚韩精品视频1区| 久久久五月天| 思思 热 99| 亚洲婷婷在线播放十月| 久色大香蕉| 婷婷狠狠操| 婷婷丁香色五月久久88| 永久无码色| 色都都狠狠色都都色综合色| 久久九九热视频| 丁香五月激情啪啪| 天堂爱爱| WWW.99视频| 琪琪色综合网站| 色啪网| 色欲AVV| 久久机热/这里只有精品| 婷婷久久亚洲| 成人久久天天x资源站| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 五月婷婷激情综合在线| 超碰在线网站| 成人丁香婷婷| 五月色综合| 噜噜五月天综合| 五月天婷婷丁香蜜桃91| 久久婷婷亚洲| 综合色婷婷| 婷婷丁香成人色综合| 色五月婷婷久久| 丁香五月色| 色婷婷狠狠久久综合五月| 久久99免费视屏| 久久在线92| 综合久久8| 欧美激情综合五月色丁香| 啪啪一区| 成人五月天丁香婷| 亚洲美女网Va| 俺去啦综合网| 九九草热在线观看| 另类色网| 国产 码在线成人网站| 国产肏屄大片| 亚洲婷婷五月天| 新激情五月天色播| 深爱激情五月天色婷婷| 五月丁香六月婷婷,婷| 五月婷婷五月天| 丁香婷婷色情| 超碰高清在线| 99玖玖人人| av五月丁香婷婷网| 丁香五月色色婷| 99热爆在线| 色婷婷六月| 三级黄色大片视频| 女人被躁到高潮嗷嗷叫小| 亚洲天堂热| 激情五月婷婷| 久久久激情| 人人爱操| 亚洲国产精品二二三三区| 日韩成人网址| 亚洲高清在线| 色五月激情五月| 极品少妇高潮啪啪AV无码| 色综合久| 中文字幕网伦射乱中文| 九九九九精品精| 欧美婷婷色| 亚洲日比视频| 日本三级色| 操逼国产91| 久久久久久久久久91| 日良久久| www.色综合| 六月丁香五月婷婷| 99精品视频在线观看| 青青久在线视频免费观看| 色婷婷呢狠禁久禁| 日韩精品在线观看9| 玖玖综合玖玖| A级毛片高清免费不卡播放谢谢谢谢| 激情五月天综合网| 影音先锋高清无码资源网| 牛牛澡牛牛爽| 99啪啪骑| 最新色色五月天| 热的国产99热| 另类激情五月| 开心五月网 | 亚洲天堂aaa| 99视频精品在线| 9l视频自拍9l视频自拍九色学生| 丁香 婷婷 亚洲 熟女| 天天色天天操天天射| 99riAv1国产在线观看| 思思re99视频在线观看| 国产精品久久久久久久久久免费| 成片免费播放| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 激情 婷婷 丁香五月天| WWW色五月天| 伍月婷丁香花全集| 91人操人人人操人| 97啪啪| 大香蕉视频99| 91人妻人人操人人爽| 思思热思在线精品视频| 噜噜色com| 99热婷婷| 亚洲在线网站| 99综合久久| 色色婷婷综合网| 99啪99| 国产高潮A片羞羞视频涩涩| 色婷婷久久9.com| 亚洲综合婷婷| 性天天中文网| 色狠狠色| 夜色.cnm| 欧美婷婷六月丁香综合色| 久久亚洲婷婷| 色色色欧美| 亚洲综合视频八| 青草青草久热这里只有精品| 人人爱人人添| 超碰在线成人| 欧美VA视频| 六月丁香综合网| 免费黄色AV| 99只有精品9| jiujiu热在线视频| www色五月| 欧类av怡春院| 4399在线日本A片| 欧洲免费视频色| 天天操比比| 五月天激情综合网| 五月社区婷婷激情| 日本色色色| 操婷婷基地| 东北婷婷五月天| 丁香五月自拍| 婷婷五月综合亚洲| 97在线观视频免费观看| 久久99操| 五月婷在线| 色欲久久99精品久久久久久| 婷婷六月丁香在线| 亚洲在线综合| 日笨久久网| 五月丁香久久呀| 婷婷91| 五月丁香婷婷在线| 九九热这里只有精品6| aV直接看| 亚洲婷婷月丁香五月| 激情综合无码| 婷婷五月天中文字幕| 九九性视频| 男人先锋久久| 丁香月五月天婷婷久久| 丁香五月婷婷影院| 欧美色久| 婷婷色操| 六月综合婷婷开心伊人| 这里只有精品9| 久久国产一区二区三区| 色五月激情问网站| 第五色婷婷| 99操| 五月丁香黄色视频| 99re热在线视频| 99riAv1国产在线观看| 丁香 亚洲 久久| 激情五月婷婷五月| 嫩草视频。| 狠狠插日日干撸| 亚洲婷婷性爱| 99热这里只有精品13| 强壮公让我夜夜高潮A片视频| 99少妇精品| 天天爽天天摸天天爱| 91操女| 亚洲欧美国产高清vA在线播放| 五月天激情视频| 99久久99视频只有精品| 色婷婷综合网站| 思思99热这里只有精品| 色五月婷婷在线| 成人超碰AV| 日欧一片内射VA在线影院| 最近免费中文字幕大全高清大全1| 99视频在线啪| 99色在线视频| 日本婷久久| 97热这里只有精品| 日本丁香五月婷婷| 91色呦哟| 777色色色| 啪啪婷婷五月天激情| 五月婷婷色色色| aaaaa不卡| 99re6在线视频精品免费| 成年人99热| 婷婷之玖玖| 五月婷精品| 人人玩人人橾| 久操香蕉| rr天天操| 激情五月天色色网| 婷婷五月在线视频| 狠狠五月天激情| 六月婷婷青青青视频| 色婷天天| jiujiu无码五区| 伊人喵咪a V| 丁香久久久| 伊人婷婷青青cao| 天天日天天久久青青| 久久国产色| 97福利视频| 久cao香蕉影院| 射久久丁香五月| 日日操夜夜爽白洁| 99re资源在线视频导航| 狼人狠狠操| 丁香婷婷五月天色播| 狠狠狠狠青草| 九九热在线视频观看| 五月四色色| 丁香五月色网| 国产欧美精品AAAAAA片| 婷婷色情六月| 天天做天天爱高潮片| 久热99中文字幕| 国产成人+综合亚洲+天堂| caop视频| 激情六月天婷婷| 丁香五月天欧美| 婷婷大乡焦噜噜| 最近中文字幕大全免费版在线 | 新男人天堂人妻| 伊人久久婷婷| 五月激情婷婷女| 久久久五月天| 九九99偷拍视频| 亚州操人在线视频| 美女妹子后射视频网站在线观看| 色综合色色色色色色综合| 五月天激情亚洲| 成人丁香婷婷| 丁香五月AV在线| 吊色AV男人的天堂| 狠狠插.com| 天天舔天天爽| 97碰人人操| 亚洲丁香五月| site:wpjngj.com| 色吧婷婷| 丁香五月婷婷高清| 风流少妇A片一区二区蜜桃| 超碰爱爱爱| 婷婷五月天BBw| 开心丁五月| 日韩精品超碰在线观看| 精品综合网在线| 91狠狠综合久久久久久| 日本视频99| 婷婷播5月| 另类激情五月| 九九sese| 久久久久妻| 久久婷婷久久| 人妖色AV色综合| 我淫我色婷婷五月天激情四射| 五月丁香亭亭| 天天爽天天做| 青青五月天婷婷| 色婷婷狠狠干| 91日韩在线| 97人人操在线| 在线观看av网站| 久久91久久91色欲精品| 97干资源在线观看| 亚洲狠9| 亚洲日本韩国| 人妻丰满精品一区二区A片| 青青草五月天| 五月丁香六月在线| 五月丁香影院| 色色色婷婷五月天| 久久婷五月综合| 神马欧美精| 99re热在线视频观看| 开心激情综合| 夜夜撸夜夜骑| 综合网五月| 欧洲色| 99热这里都是精品| 色五月婷婷在线| 婷婷丁香五月网| 色五月婷婷老师| 五月婷婷视频| 啪啪婷婷五月天激情| 国产精品电影网| 任你日视频| WWW99热| 伊人久久婷婷| 开心激情五月天网| 婷婷丁香成人| 久久久久人妻| 超碰国产在线播放| 九九精品免费视频99| 久久久久久婷| 综合精品99| 9久国产| 九九热黄色| 久久五月天综合视频网站| xx色综合| 欧美综合激情五月天| 丁香五月电影| 婷婷 伊人 久久| 久久9视频| 五月色情婷婷| 五月婷婷激情综合在线| oumeisesewang| 综合五月激情| 五月天激情婷婷| 日本人妻A片成人免费看片| 狠狠五月天| 一起草AV入口| 日韩AV中文字幕在线| 99热综合在线| 最新午夜理论片| 操啊操av| 91成人看片| 天天日夜夜| 97碰碰九九视频| 婷婷五月天AV在线| 天天狠天天狠| 婷婷五月天综合色| 九热免费视频| 国产日韩欧美| 婷婷久久天堂网| 丁香五月天堂网| 99这里只有精品在线观看| 99这里有精品| 99热这里是精品| 日韩啪啪自拍| 久热9| 色欲资源网| 亚洲第一成人无码A片| 全部老头和老太XXXXX| 无码一级片| 五月婷婷免费在线| 99国产性感视频| www.超碰在线| 五月美女婷婷风骚| 九九热中文| 国精产品一区二区三区| 人人97碰| 亚洲狠狠终合停停终合| 婷婷丁香宗合888| 五月欧美色色五月| 久超超碰| 国产精女同一区二区三区久| 五月色色色| 色J香五月天| 国产精品美女| 97自拍99| 日 日干 日日做| 8区视频在线| 日本三级99人妇网站| 久99| 五月欧美丁香在线观看| 婷婷五月天在线观看| 另类视屏| 少妇口诉沐足视频播放器网址| 91久久婷婷人人澡草| 五月婷婷激情五月| 大天天伊人| 五月丁香综合啪啪対白| 婷婷五月天久久久| 丁香五月ⅤA久久久| 婷婷五月俺要去| 色噜噜综合网| 伊人久久大香天蕉亚洲特级| 六月丁香激情最新更新| 深夜男女福利刺激影院一区| av在线观看网址| 丁香六月天婷婷色| 99热激情| 九九人人精品| 精品人妻久久久久| 国产毛片精品一区二区色欲黄A片| 婷婷色基地在线看 | 久碰久操| 色色色热热热| 天天爱天天做天天舔| 天天色天天舔天天爱天天爽| 天天操天天操天天操天天操天天操| 午夜天堂一区人妻| 大香蕉久久伊人婷婷五月丁香| 综合久久五月| 天天干天天干天天| 久久9视频| 色综合久久88色综合天天| 踪合专区啪啪| 偷拍视频五月天| 久久九九免费视频| 岛国AAAV| 欧美天天干五月丁香| 高清无码视频网址| 玖玖综合色| 色五月成人| 亚洲视频操| 婷婷刺激综合| 99超碰人人| 人人草人人爱| 久re在线| 玖玖资源站中文| 亚洲视频在线观看区| 五月开行婷婷色五月| 丁香五月婷婷av影院| 亚洲精品小视频| 国产一级片色色| 精品人妻久久久久久久| 97五月婷| 天天日夜夜帕| 色欧美日|