99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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
返回資訊列表
婷婷丁香五月天综合激情| www.久久爱.com| 色综合色色| 异能之下短剧免费观看全集| 青青日韩| 婷婷五月综合性爱| 97色婷婷| 色香欲综合| 99久久九九| 少妇丁香婷婷 | 婷婷五月天亚洲色| 久久亚洲A| 九色porny在线观看激情四射| 天天弄天天操| www色色com| 婷婷五月另类网站| 狠狠色婷婷777| 亚洲综人色综网| 综合久久六月| 看逼中文字幕| 五月天激情综合网| 青青操日本摸摸看看| 另类激情中文| 天天操天天曰| 激情五月综合| 九九色影院| 狼友超碰| 亚洲婷婷91丁香| 丁香五月六月激情久久| 玖玖资源站蜜臀| 色爱综合视频| 丁香五月视频在线观看| 亚洲成人电影aaaa| 五月花丁香婷婷| 国产欧美婷婷五月| 激情黄色五月天| 99精品视频在线观看免费| 丁香婷婷超碰| 色婷婷欧美| 国产精品岛国片在线观看免费| 香蕉影院色| 99精品无码| 99热精品无码| 免费视频WWW在线观看网站| 色婷婷九月| 97干在线播放| 思思re99视频在线观看| 丁香激情五月天| 大香蕉九九| 精品99在线| 综合久久99| 色婷婷五月天视频在线| 国产成人高清| 亚洲人妻AV| 国产这里只有精品| 蜜乳av一级av| 黄色99热| 黄网在线播放| 亚洲舔观看| 99在线观看这里都是精品| 色亚洲无码| 国产亚洲在线| 五月丁香婷中文字幕| 深爱激情九九五月天 | 精品久久久久久久人妻| 日本色综合| 亚洲五月丁香六月婷婷| 色激情五月天| 啪啪九九色| 久久五月天 91| 绿色小导航AV| 桃色Av色哟哟| 伊人啪啪网| 五月天另类视频| 激情五月天综合婷婷网| 日本婷婷| 婷婷色五月天色色| 五月婷婷六月丁香免费| 99精品22| 99热这里全是精品| 亚洲成人电影在线免费观看| 五月天婷婷基地综合网| 四五月婷婷| va婷婷| 97色97干| 天天碰夜夜操| 大香蕉婷婷丁香| 亚洲免费看片| 99在线精品在线视频| 日本丁香五月| 亚洲亚洲人成综合网络| 亚洲午夜一区二区| 婷婷夜夜夜夜| 婷婷九月激情| 97人人操人人拍| 97自拍99| 九九热这里只有精品9| 狠狠色噜噜狠狠狠888| www色色com| 亚洲V国产V欧美V久久久久久| 丁香花综合永久入口| 97碰成超视频免费视频| 丁香五月狠狠综合欧美| 五月天激情图片| 五月丁香色综合| 婷婷五月激情小说| 激情婷婷五月女| 热久久99热欧美国产亚洲| 伦乱天堂| 免费看片在线观看| 99亚洲欧洲| 无码99| 亚洲精品又粗又大又爽A片| 久久精彩视频99| 丁香五月天激情网址| 天天爽日日爽夜夜爽| 色综合久久888| 激情五月天婷婷播播久久综合91| 欧亚洲在线高清视频| 丁香五月天综合网| A片试看50分钟做受视频| 大香婷婷| 国产午夜精品久久久观看| 色五月综合网| 久草性爱| 色婷婷精品视频| 日韩丰满少妇无码内射| 六月婷婷天天操夜夜爽视频| 婷婷无码视频| 99色五月| 天天爽天天操| 1024亚洲| 婷婷五月天黄色小说| 激情五月天丁香| 另类亚洲视频| 精品丁香五月天在线播放| 亚洲12p| 日本久热| 久久婷婷青青草| AV中文在线| 狠狠操天天干| 色5月婷婷色| 激情婷婷六月天| 丁香色播五月天| 九九精品综合| 超碰在线中文字幕| 五月激情综合网| 天天碰夜夜操| 五月婷婷婷自由综合| 亚洲免费婷婷| 亚洲综合网区| www.色婷婷.com| 狠狠舔| 九九中文字幕九| 26uuu亚洲色| 天天爱天天操| 久久这里都是精品免费| 婷婷在线精品| 五月天婷婷色播综合在线| 色999亚洲人成色| 激情婷婷久久| 色综合久久888| 婷婷激情在线| 激情婷婷色色| jiujiu热在线视频| 六月婷婷色综合| 国产伦理精品高清在线观看网站一区二区 | 丁香五月婷婷色综合基地| 五月婷婷基地| 国产伊人五月天| 99热精品无码| 六月伊人婷婷| 久久丁香婷| 可以直接看的AV网站| 日韩欧美成人一区二区三区| 九九热视频精品| 影音先锋一区二区资源站| 日本在线噜噜| 亚洲Av成人在线观看| 久久久这里有精品| 97色碰| 久久激情视频| 26uuu激情五月天| 99热综合| 思思re99视频在线观看| 4438激情网| 97狠狠色| 五月婷色丁香| 岛国午夜视频| 99热亚洲精品| 天天操天天日天天爽| 欧美色图片88| 久超超碰| 米奇激情婷婷| 久久婷婷五月天激情| 99在线免费视频| 成片免费播放| 久久五月婷6 9| 婷婷六月色播| 丁香五月香蕉| 婷婷五月五月丁香| 另类专区在线观看| 日日夜夜天天爽| 葵花AV在线| 狠狠狠狠狠狠| 五月天婷婷在线啪啪视频| 爱iii做iiii日| 五月天亭亭俺也| 日本一级| 五月丁香久久激情综合| 99综合免费视频| 五月丁香六月婷婷中合网| 91综合视频丁香| 丁香 久久| 99re66热这里只有精品| 91碰操| 99热亚洲| 婷婷五月天免费视频在线观看| 七七色色综合| 先锋影音av色五月天资源站| 五月天丁香综合| 很很操很很操| 五月天婷婷色色网| 婷婷中合| 婷婷六月丁| 俺去也在线www色官网| 久久婷婷五月激情综合| 大战熟女丰满人妻AV| 五月天桃色深爱网| 颜射 精品性爱av| 九九人人看| 久久这里只有精品热在99| 国产色五月婷婷| 97香蕉久久超级碰碰高清版 | 99人妻碰碰久久久禁片| 丁香五月播播| 五月丁香六月婷婷激情视频在线观看免费 | 九九热在线视频| 五月丁香六月婷婷操操操| 激情五月综合网| 五月婷婷综合色啪首页| 嫩BBB槡BBBB搡BBBB| 久色| 99国产视频网| 天天干天天干天天干天天干天天干天天干天天| 婷婷久热| 色婷婷免费视频| 婷婷视频在线| 日本精品久久久久中文字幕| 激情伊人五月天| 激情五月丁香五月| 色综合网综合| 婷婷天天综合| 日产精品一线二线三线芒果| 99精品国产热久久91色欲| 久久这里只有国产视频| 深爱婷婷色| 丁香五月综合婷婷| 五月激情婷婷综合| 久久多色| av在线激情| 五月天天天色| 色色哒五月婷婷六月丁香| 欧美成性色| 久久婷婷综合国产| 久9久成人精品视频| 免费在线观看AV网站| 中文av网| 激情小说婷婷| 人妻久久久久久| 久大香蕉| 超碰人人操人人干| 久久停停超碰| 级情九色| 丁香五月综合| 婷婷激情五月| 亚洲日韩一页精品发布| 最近中文字幕2019视频1| 五月天成人小说| AV网站免费在线| 天天干天天干天天干| 久热网站| 婷婷五月天开心网| AV性爱在线| 丁香五月婷婷色播艳门照| 五月天婷婷久色| 99热精品少| 色丁香五月天射婷婷爱婷婷| 99热香港| 这里只有精品在线播放| 丁香五月天成人| 操嫩逼电影| 久久伊人日日夜夜| 婷婷综合五月天亚洲综合| 97韩国久久电影院| 五月天精品| 99久视频| 久久综合99| 九月婷婷久久| 国精产品一区一区三区免费视频| 亚洲电影在线观看| 中文字幕精品推荐免费在线观| 色情婷婷久久五月天| 久热精品9999| 色婷婷色九月| 九九热这里有精品视频| 五月天天天开心激情网| 丁香六月婷婷姐网| 色五月超碰| A一级操| 99热99这里有免费的精品| 五月天激情国产综合婷婷婷就去爱| 黄网网站在线播放| 婷婷丁香视频在线观看免费| 2023天天日夜夜爽| 日韩1区2区| 97色色色| www色婷婷| 丁香五月成人| 久久综合9| 色五月中文字幕| 日本WWW九九九| 亚洲人人操| 天天日夜夜爽| 狠狠插日日干撸| 天天爱天天吃狠天天透| 色五月婷婷久久| 日韩一级片| 成人无码髙潮喷水A片| 91se视频| 久草视频一,二三四| 五月丁香爱婷婷深深| 手机AVAV天堂看网| 亚洲无码成人| 不卡在线超碰| 色综合久久天天综合网| 天天干、天天日日| 大香蕉九九| 国产日韩精品SUV| 日日操夜夜操中国无码| 色色综合色视频| 26UUU精品一区二区c〇m| 婷婷天天色| 亚洲综合99| www.色多多婷| 久久久精品视频79| 五月色综合网| 欧美激情综合五月色丁香| 亚洲无码免费看| 色婷丁香| 五月丁香香蕉| 婷婷五月天性色| 激情爱爱网站超大免费| 婷婷天天综合| 色婷婷电影网| 国产午夜精品一区二区| 五月天激情网页| 色碰碰| 国产精品美女久久久久AV超清| 超碰人人99| 激情综合五月色在线| 26uuu日韩| 日本乱子人伦在线视频| 色色色干| 人人干女人| 亚洲电影在线观看| 99色区| 五月婷婷啪| 天天色播| 狠狠色婷婷| 亚洲视频图片婷婷五月| 国产精品久久久久久妇女6080| 99啪啪网| 五月天桃色深爱网| 色天使久久综合| 婷婷四月 成人 狠狠干| 色婷婷丁香| 人人草碰| 日日爽日日爽| 九一娱乐在线观看视频| 婷婷五月丁香基| 青草视频在线蜜臀| 免费视频无码| 色婷婷丁香社综合| 成人丁香婷婷五月天| 99热这里只有精品22| www.99操.com| 人人看人人摸人人| 国产精品第一国产精品| 激情五月综合免费| 亚洲精品字幕在线观看| 综合激情五月丁香9999久久精| 9久热在线视频精品| 成片免费观看大全| 婷婷五月天激情基地| 五月丁香啪| 思思久久99热| 天天拍天天操| 天天干 夜夜爽| 深爱五月激情综合| www.91婷婷| 97色色色色色色色色色色色色色| 国产成人综合网| 激情综合五| 久久婷婷五月草视频| 91人无码久久久久久| 第九色区av天堂| 日本色婷婷| 另类精品视频在线观看| 激情久久久久久久久久久| 婷婷欧美激情| 亚洲AVDVD| 婷婷五月天欧美| 91日本在线免费| 五月婷婷自拍视频| 9999综合99综合人| 婷婷月综合| 偷偷操99| www激情| 久操操| 99精品在线观看| 开心五月婷婷激情| 天天干天天爽| 色日本网| 六月丁香六月婷婷欧美| 人人爽天天爽| 色五月激情综合| 婷婷综合丁香| 丁香五月天激情综合| 九九99热久久精品66中文字幕| 五月婷婷影院| 99热这里只有精品26| 六月婷婷色综合| 国产色色网址网站| 亚洲成人日韩无码精品| 天天干天天做| 99开心五月五月丁香激情| 亚洲视频99| 婷婷五月天日逼| 婷婷五月天天| 色婷婷AV在线| 99热这里只有精品在线免费| 丁香九月激情在线视频| 欧日韩成人| 日本色噜| 91主播在线| 丁香婷婷激情| 9999热精品在线免费播放| 秋霞少妇AV网站| 99热免费看| 猫咪伊人久久| 欧美成人一区二区三区在线视频| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 色色色色色色网| 玖玖爱综合网| 91打屁股免费看| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 伊人久久大香| www.日日夜夜.com| 天天操天爱综合| 婷婷的色色五月天| 亚洲精品久久久无码| 色99欧洲色19| 婷婷久久欧美| 久久婷婷草| 色噜噜狠狠色综无码久久合欧美| 这里有精品2| 五月婷色色| 伊人久久婷婷五月综合97色| 九热免费视频| 久久久久久丁香五月| 国产AV不卡福利| 婷婷色导航| 能直接看的av网站| 99热国产这里只有| 97干综合网| 日日躁夜夜躁狠狠久久AV| 五月天婷久精视频| 婷婷丁香五月激情中文字幕版| 在线成人视频免费| 91久女| 婷婷五月天av| 日本在线va| 色五月激情五月丁香五月婷婷啪啪综合| 亚洲成人无码片| 天天操夜夜操| 五月丁香婷婷综合久久| 丁香六月天堂| 亚洲色小说在线综合| 色婷婷综合综合网| 五月天大香蕉视频| 精品爱欲五| 超碰chaompinm| 女人天堂 AV| 久久国产性爱A V| 人人操人人爽成人AV| 日韩AV无码影片| 久久久久er热| 97色永久免费视频| 99热在线只有精品| 五月天婷婷视频30| 中文不卡一二三区| 欧洲婷婷五月天| 五月丁香综合在线| 丁香婷婷婷五月综合色情| 亚洲欧美在线观看| 大香蕉av在线| 欧美25p| 亚洲情色一区| 99热66| 日韩在线婷婷五月天综合| 插插插色综合网| 高潮毛片遮挡费高一百度| 99噜噜| 一区二区三区XXXXXX| 伊人久久丁香五月91| www.夜夜操| 色噜噜狠狠一区二区三区| 99热免费精品| 人妻AV在线观看| 天天干一干| 99亚州综合精品成人网| 激情综合网五月激情| 人人人操97| 五月开心啪啪| 久久AV电影| 我爱婷婷五月天综合88| 青青草六月丁香| 五月天色五月天| 久久综合伊人综合在线| 婷婷五月天亚洲激情戏精品| 亚洲女婷婷五月基地综合久久久| 97人人做| 精品久热| 综合色99| 久久精品性爱| 五月天.com| 第四色五月天| www.夜夜操| 亚洲精品字幕在线观看| 在线观看免费人成视频无码| 超碰免费人| 一区二区三区四日本| 国产一区二区av免费| 风流少妇A片一区二区蜜桃| 久99热| 色日本综合| 欧美综合激情五月天| 五月婷婷伊人网| 婷婷五月天综合久久日美女| 日本人人干| 五月天堂六月丁香亚州中文字幕久久| 视频在线免费观看欧洲乱码| 99性色| 久久人人妻| 五月婷婷激情网| 国产精品扒开腿做爽爽爽A片唱戏| 国产成人精品123区免费视频| 国产一二区爆乳_1国产日韩一区二区三-成人AV| 久久er99热精品一区二区| 日逼影音先锋男人AV资源站| CAOBIBI| 久9热视频在线观看| AV九九| 丁香五月综合福利视频导航| 五月激情婷婷在线| 综合色五月| 五月天婷婷综合网| 日韩操啪| 久久精品爱爱| 天天爽综合网| 婷婷99狠狠躁天天躁| 婷婷色网| 久久五月天免费网站| 97色久| 丁香婷婷六月天| 五月丁香六月婷婷欧美综合| 色情五月婷婷| 9l视频自拍九色9l黑人| 色色色色色色色色五月先| 思思99热在线| 婷婷五月激情六月| 婷婷综合视频| 狠狠色丁香久久婷婷综合五月| 国产欧美日韩性爱| 婷婷婷婷色| 色五月激情五月天| 国产性爱色| 蜜臀丁香黄色婷婷五月天| 我爱va亚洲va52| 狠狠爱激情网| 激情久久肏屄视频| 色丁香影院| 69精品人人人人| 中文不卡一二区| 五月天激情国产综合婷婷婷| 99国产精品白浆在线观看免费| 人人操人人添人人摸97| 伊人五月婷婷| 人妻久热| 丁香深五月婷婷| 五月天无码| Www.狠狠| 欧美日韩中文国产一区发布| 激情综合五| 激情五月丁香六月婷婷| 成人精品在线观看| 久久3p| 色射婷婷五月天| 五月婷丁香| 欧美日韩日韩成人| 婷婷永久在线| 99热免| www久久久久| 五月永久激情| www.五月天| 色色色在线| 色婷五月天综合网| 中字幕视频在线永久在线观看免费| www,com,五月色色| 婷婷五月天激情基地| 极品少妇XXXX精品少妇偷拍| 婷婷激情五月| 九九热在线99| 人妻体体内射精一区二区| 婷婷五月激情五月激情| 亚洲人妻av伦理| 好好干Av| 99热在线中文字幕| 精品人妻伦一二三区久久| WWW夜夜| 亚洲AV成人在线| 色色色综合色| 五月天激情婷婷小说| 天天舔天天插天天爱| 99热插| 久久婷婷原创视频| 少妇真实被内射视频三四区| 夜夜干夜夜操| 色伊人婷婷| 五月天狠狠网| 色播五月丁香| 丁香婷五月| 激情五月天啪啪视频| 人妻激情综合| 92国产福利| 色色热日| 日本三级99人妇网站| 久草热8精品视频在线观看| 五月综合久久| 丁香九月久久| 手机旧版看人妻1025| 99亚洲精品视频| 99久在线观看| 九九色video| 婷婷五月电影| 五月天婷婷色紫薇阁| 亚洲视频在线观看区| 五月婷在线观看| 五月天婷婷社区久久综合| 色色激情五月| 香蕉久久国产AV一区二区| 九九热精品| 六月婷婷国产| 欧美亚洲婷婷五月| 99热这里只有精品2024| 秋霞电影理论| 这里只有精品在线播放| 99热精这里只有精品| 丁香婷婷六月天| 狠狠人人| 99这里只有精品在线| 天天综合天天做天天综合| 开心亚洲久久开心| 亚洲成人电影aaaa| 婷婷五月天亚洲综合网| 五月婷在线影院| 五月婷婷,狠狠操| 啪啪色区| 色射影院| wWwCom夜操wwW| 久久久思思热| 丁香五月成人论坛| 天天射天天射一道本日本社区| 99热这里只有精品23| 五月婷婷精品视频| 伊人五月成人| 日韩啊啊啊| 99热天堂| 日韩成人精品中文字幕| 色噜噜狠狠色综合日日| A片试看50分钟做受视频| 激情文学综合婷婷五月天丁香花| 爱操天堂| 狠狠综合区| 97热这里精品在线视频| 丁香婷婷六月激情文学| 五月青青草综合| 俺去也在线www色官网| 天天做天天爱天天要| 欧美性爱中文字幕| 日本五月婷婷| av高清无码| 青青999| WWW.99视频| 五月丁香六月婷婷综合在线| 3p日韩网站视频| 日本操逼九九九九58日本操逼 | 国产午夜精品AV一区二区麻豆| 免费观看全黄做爰的视频| 欧美,日韩成人在线| 海外网站专业操老外| 久久网日本| 久久ER视频com| 色色cOm| 97碰人人操| 高清无码网址| 五月婷婷亚洲天堂97色婷婷| 婷婷欧美激情| 五月婷婷偷| 久热精品视频| 亚洲中文字幕AV| 成人无码精品1区2区3区免费看| 丁香九月色| 久操大| 婷婷色色播五月天| 久久综合影院 | 色一区高清| 丁香五月停停av| 婷婷九九| 狠狠干五月| 国产精品操| 色五月婷婷五月久久| 五月花免费视频| 五月婷激情| 色婷婷五月丁香色| 这里只有精品视频222| 99性爱精品| 色色五月婷| 色域五月丁香| 99色这里| 久久精彩免费视频| 超碰v| 超碰男人色| 婷婷五月开心中文字幕在线| 激情六月婷婷| 久9综合| 五月婷婷六月丁香| 日韩九九| 91久久久久久| 五月丁香自拍| 99综合激情久久精品久久| 99色在线| 色婷婷操逼网| 伊人五月人妻精品| 97福利视频| 午夜九九九九九九| 激情小说五月天中文字幕| 美欧日韩国产成人在战| 亚洲av另类在线观看| 亚洲成人网无码| 久久婷婷五月综合| 五月成人丁香av91| 九九蜜臀精品| 99热国内精品| 色丁香五月婷婷综合久久| 99在线观看视频蜜臀| 久99久精品| 男人的天堂av俄罗斯热| 伊人日日干| 久久综合九九| 99人人操人人操人人精| 国产裸舞表演WWWW| 校花娇喘呻吟校长陈若雪视频| 秋霞成人毛片一级A片| 欧美VA在线| 欧洲电影在线观看免费版英语版| 激情五月天婷婷| 色色色五月婷| 五月香蕉网| 色婷婷先锋| 久久性爱视频| 日本久久天堂| 91人操人人人操人| 婷婷丁香五月天熟女丝袜| 久久久久人无码人妻| 九九色精品| 久久精品99| 99热1| 色色日本欧美| 久久九九热视频| 91色综合久久| 色婷婷五月婷婷五月婷婷五月| 天天爽天天| 久久三级视频| 五月天色色网站| 五月香蕉婷婷| 丁香五月天资源网| 综合色视频| 伊人久久五月天综合| 婷婷五月天天| 五月天综合区| 青青草国产亚洲精品久久| 日日天天天| 色播五月| 99热大全在线观看| 婷婷五月激情小说| 国产伦理精品高清在线观看网站一区二区| 人人操AV| 开心五月综合激情网| 久久婷丁香五月| 123草逼网| 9l视频自拍9l九色9l成人| 97碰碰视频| 五夜丁香| 超碰免费99| 99ri国产| 99热精品在线| 五月丁香亚洲综合| 五月丁香手机在线| 亚洲综合成人网| 琪琪理论片| 被男人添B超爽视频| 天天操天天爽天天爱| 久热在线中文字幕色999舞 | 日逼免费视频| 91九色偷拍| 亚洲天堂aaa| 秋霞av不能| 婷婷五月色| 色欲九区| 天天综合精品| 激情婷婷综合| 婷色影院| 激情五月婷婷丁香| www.色婷婷.com| 六月色播| 色色精品色| 色婷婷成人做爰A片免费看网站| 亚洲五月婷天天操| 五月激情综合婷婷| 可以看的av网站| 久久久久亚洲AV成人无码电影| 日本色色色| 久久亚洲色导航| 五月婷三级片| AV操操操| 日本91在线| 婷婷久久久| 六月丁香激情婷婷| 18久久| 九月丁香亭亭| 亚洲色色爱| 成人AV片播放| 六月婷婷色色色| 天天射影| 亚洲婷婷性爱| 激情综合五月婷婷| 26uuu青青| 99久久66综合| 99精品综合| 狠狠干婷婷| 精品少妇人妻AV无码专区偷人| 婷婷丁香色情| 美女网黄| 久草热8精品视频在线观看 | 婷婷色成人| 激情婷婷久久| 欧美成人精品三区综合A片| 新伍月婷婷| 九九色综合网| 免费无码毛片一区二区A片| 天天做天天摸| 婷婷丁香熟妇综合网| 亚洲情综合五月天| 丁香五月成人婷婷| 韩国情人在线电视剧免费观看高清版全集 | 天天色天天操天天射| 婷婷五月久久| 琪琪色五月天| 中文字幕乱码亚洲精品一区| 五月婷婷色| 久一这里有精品国产| 99资源人人| 久久只有18视频| 婷婷五月天亚洲综合| 激情综合区| 婷婷五月丁香青青草在线| 日本色图综合| 99九九视屏| 欧美三级欧美一级| 婷婷丁香综合网| 亚洲国产成人在线| 亚洲人人操BD| 国产欧美日韩性爱| 九九视频在线观看视频在线播放69| 欧美久热| 色色网站免费| 玖玖99福利| 99综合熟女| 变态 另类 在线| 99视频久久| 五月草影视| 另类色视频| 伊人五月天97| 成人网在线观看视频| 热久久91| 五月天色婷婷激情| 色色综合日韩| 色综合大香蕉| 97超级碰碰碰久久久| 午夜大香蕉| 操逼视频一区| 婷婷激情丁香六月| 激情影院内射| 超级黄色片| 99久| 最近中文字幕大全免费版在线| 婷婷五月天亚洲综合| 99爱视频免费看| 婷婷色播色五月五色五月天色妇| 九九综舍久久| 色婷婷亚洲综合天堂| 成AV人片一区二区三区久久| 久婷婷婷| 人妻无码精品一区| 五月天婷婷久久综合| 全亚洲最大的婷婷五月天网站COM| 美国不卡视频| 97超级碰| 国产欧美日韩综合精品一区二区| 色色色色综合网| 九九热在线精品视频| 人妻VideOssS人妻| 一根材五月婷成人| 热中文字幕| 任我鲁这里有精品视频| 久久久潮喷-久久久九九-成人AV| 人妻丰满精品一区二区A片| 97色碰| 99玖玖免费视频| 五月丁香六月综合激情| 色综合色综合色综合| 亚洲 小说 欧美 激情 另类| 丁香激惜男女| 五月开心婷婷网| 亚洲综合色色| 99久扒热| 麻豆雪千夏| 婷婷色基地在线看 | 9色操| 热99玖玖99玖玖99九九| 欧类av怡春院| 成人免费120分钟啪啪| 日本综合久久| 99视频在线精品| 91九色网| 婷婷五月综合激情| 91操人视频| 九九re精品视频在线观看| 婷婷丁香五月婷婷| 色天五月天在线观看视频| www,26uuu,c0m,色情| 天天操天天日天天操| 久久九精品| 小视频一区| 五月丁香 啪啪啪| 婷婷成人综合五月| 开心五月丁香啪| 69激情小说| 婷婷五月婷婷五月| 可以直接看的AV网站| 99热这里只有精品 搜| 精品久久久久久久人妻| 丁香五月激情无码视频| A久网| 婷婷五月天黄色小说| 五月婷婷激情久久| 激情五月婷婷五月丁香五月开心五月| 久久免片| 五月天激情网站| 丁香六月激情四射| 婷婷中文在线| 五月婷婷婷| 成人AV在线电影| 202丰满熟女妇大| 97在线观看| 热99玖玖99玖玖99九九| 热婷婷av| 超碰高清在线| 黄色三级日本| 欧美va精品va老师va| 这里只有精9| 伊人婷婷五月| 五月天激情www| 无码99| 操99| 公的粗大挺进了我的密道| 亚洲妇女熟BBW| 丁香五月婷婷综合激情哟哟哟| 久久久九九视频精品18| 大香蕉久久婷婷精品综合| 久久精典| 亚洲avjiujiur91| 99热这里有精品2| 99久久6| 97碰超级人人看| 思思热视频| 中文字幕免费高清电视剧| 啪啪啪丁香五月| 成人永久免费视频在线观看| 五月婷在线| 五月丁香av在线| 天天碰夜夜爽| 东京热伊人| 中文字幕日产A片在线看| 色五月综合网站| 九色七七| 欧美va视频不用播放器的va视频网| 婷婷五月天免费| 人人摸人人澡人人| 色色热| 人妻免费网站| 97在线/亚洲| 五月婷婷开心爱| 婷婷五月天在线综合| 精品人人操| 国产成人精品一区二三区熟女在线| WWW.五月com| 久久婷婷网| 天天操夜夜夜拍拍拍| 99精品性爱| 深爱激情综合| 人人操超碰| 日韩成人AV在线| 六月天六月婷| 九月综合| 99ER热精品视频| 一本色道久久综合狠狠躁小说| 五月丁婷香| 亚洲色婷婷五月| 91久久婷婷| 大香蕉在线99热| 999热在线视频| 亚洲中文乱字字幕线在永久| 亚洲综合在线播放| 欧美性生交XXXXX无码小说| 五月天婷婷AV| 色婷婷丁香五月天在线视频 | 熟惀91九色在线| 激情啪啪五月| 26UUU欧美激情一区二区| 日本爆乳片手机在线播放| 禁欲电影完整版在线播放| www.91在线看| 97婷婷丁香五月天激情图片| 婷婷刺激综合| 丰满少妇猛烈A片免费看观看| 亚洲99在线| 天天拍久久| 91超碰九色| 欧美一级a| 99热九九这里只有精品| 噜噜色噜噜网| 色婷婷电影网| 久久久99免费视频| 精品三区影院| 97色色色| 激情四射婷婷色色色| 久久 这里只有精品1| 九九色逼| 绿色小导航AV| 狠狠色无码| 天天操天天曰| 五月天丁香婷婷社区| 第一区久久网站| 天天干夜晚夜操| 黄久久久| 国产精品成人av在线观看春天| 丁香成人五月天| 日熟女| 色久激情在线| 五月婷婷激情综合| 人人操97| 婷婷五月丁香五月综合网| 日本不卡一区二区三区| 久久久网站| 五月天精品| 亚洲中文AV| 日日噜噜久久婷婷五月天| 色狠狠综合| 激情综合色婷婷啪啪六月天| 五月天激情开心网| 99免费视频| 丁香五月1页| 婷婷情色五月天| 99丝袜精品视频网站| 亚洲Av入口| 久热免费视频| 综合AV在线| 六月丁香五月婷婷| 精品操逼一区二区| 五月丁香六月婷婷a v| 99操| 久久九九视频网站| 99久久综合网| www.久久爱.com| 五月天婷婷乱论小说| 激情五月婷婷丁香综合网| 天天综合天天玩夜夜玩天天玩夜夜玩 | 五月综合激情图片 | 亚洲婷婷丁香五月在线| 色99网| 激情综合在线观看| 婷婷丁香五月综合免费视频百花| 97超碰99热99| 蜜乳中文字| 亚洲日本三级片| 亚洲激情色色| 久久大香蕉丁香| 思思色综合网站| 亚洲中文字幕在线观看| 99亚洲综合| 婷婷午夜| 五月丁香美女| www.夜夜操.com| 丁香五月激情宗合网| 久久ab| 激情五月婷婷丁香六月| 91狠狠综合久久久久久| 国产免费一区二区在线A片视频| 婷婷婷久久久| 超碰成人av| 九九爱看亚洲| 激情小说婷婷| 国产99久久久| 丁香五月六月综合激情| 色色五月天婷婷丁香| 五月婷婷激情综合av| 欧美啪啪五月天| 五月丁香婷婷欧美| 亚洲成人网站在线| 久久综合激情| 色哟哟精品| 91热在线| 伊人婷婷五月天av| 婷婷综合色五月天| WWW.亚洲无码| 色综合久久五月| 久久激情网| 91人人看| 五月激情影院| 九九久久精品國產| 99这里是精品| 亚洲无码免费看| 九九综合久久丁香婷婷,开心激情综合网| 无码操B| 丁香婷婷五月天网站| 欧美性爱五月天| 天天在线天天综合网色| 亚洲成人AV高清字幕| 色狠狠色综合| 碰人人操| 久久久久9| 思思99热在线| 婷婷狠狠综合网入口| 亭亭五月色男人| www.日韩国产| 激情小说婷婷| 26uuu国产精品| 亚洲天堂玖玖| 色婷婷五月在线| 丁香5月激情网| 国产精品美女久久久久AV超清 | 日韩av在线播放综合网| 国产精品久久久海的味道| 日韩成人电影在线播放| 79精品视频在线观看,| 激情婷婷人妻| 99热色综合| 97人人操| 再次出发二| 99A片| 97色啪| 深爱丁香网| 丁香九月色| 超碰免费99| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 激情五月天网| 99久久免费精品| 久99久在线观看| www久久久| www、色色色| 97精品欧美91久久久久久久| 男妓跪趴把舌头伸进我的嘴巴| 天天做天天爱天天做| 亚洲在线操| 9久热精品在线视频| 激情深爱五月天| 久久视这里只有精品| 婷婷福利影院| 人妻22p| 激情综合网亚洲色图| 久久久久久久久久91| 欧美激情性做爰免费视频| 这里只有精品免费| 欧美欧盟性爱网| 国产欧美大香蕉一区| 中文字幕在线观看视频www| 黄页大全十八禁| 中文字幕AV网址| 538在线精品| 久久视频婷婷| 婷婷六月插屄激情| 亚洲成人另类| 少妇性按摩无码中文A片 | 99ri精品在线| 日韩精品AV一区二区三区| 色噜噜狠噜噜视频| 婷婷久久免费看| 丁香六月婷婷综合啪啪| 色伦专区97中文字幕| 亚洲午夜电影| 甈你aaaaa| 亚洲精品成人| 婷婷五月综合免费在线| 天天操天天插| 欧美激情VA永久在线播放| 色亭亭五月天网扯| 九洲一级A片| 丁香五月婷婷老师网站| 九九热最新视频| 丁香五月在线观看| 婷婷五月天亚洲色| 97久久草草超级碰碰碰| 九月丁香婷婷网| 久久98| 久大香蕉| 天天情色综合网| 操笔无码| www99久久| 久热精彩视频98| 激情综合五月| 超碰97免费在线| 五月婷婷五月天亚洲无码| 五月天丁香啪啪综合| 丁香六月婷| 超碰免费人人肏| 五月天综合网| 超碰人人色| 五月亭亭网成人在线视频| 好好干av| 深爱五月婷婷开心中文字幕| 狼人婷婷久久| 日韩天堂久久| 天天碰夜夜操| 在线另类| 六月丁香啪啪| 日本女人久久| 亚洲第一精品成人999久久精品| 另类婷婷丁香| 激情综合啪啪啪| 久久久99视频| 99九九在线视频| 亚洲免费电影2| 亚洲中文字幕翔田千里|