日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Mysql锁【转】

發(fā)布時(shí)間:2024/7/5 数据库 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql锁【转】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概述
數(shù)據(jù)庫(kù)鎖定機(jī)制簡(jiǎn)單來(lái)說(shuō),就是數(shù)據(jù)庫(kù)為了保證數(shù)據(jù)的一致性,而使各種共享資源在被并發(fā)訪(fǎng)問(wèn)變得有序所設(shè)計(jì)的一種規(guī)則。對(duì)于任何一種數(shù)據(jù)庫(kù)來(lái)說(shuō)都需要有相應(yīng)的鎖定機(jī)制,所以MySQL自然也不能例外。
MySQL數(shù)據(jù)庫(kù)由于其自身架構(gòu)的特點(diǎn),存在多種數(shù)據(jù)存儲(chǔ)引擎,每種存儲(chǔ)引擎所針對(duì)的應(yīng)用場(chǎng)景特點(diǎn)都不太一樣,為了滿(mǎn)足各自特定應(yīng)用場(chǎng)景的需求,每種存儲(chǔ)引擎的鎖定機(jī)制都是為各自所面對(duì)的特定場(chǎng)景而優(yōu)化設(shè)計(jì),所以各存儲(chǔ)引擎的鎖定機(jī)制也有較大區(qū)別。MySQL各存儲(chǔ)引擎使用了三種類(lèi)型(級(jí)別)的鎖定機(jī)制:表級(jí)鎖定,行級(jí)鎖定和頁(yè)級(jí)鎖定。

1.表級(jí)鎖定(table-level)
表級(jí)別的鎖定是MySQL各存儲(chǔ)引擎中最大顆粒度的鎖定機(jī)制。該鎖定機(jī)制最大的特點(diǎn)是實(shí)現(xiàn)邏輯非常簡(jiǎn)單,帶來(lái)的系統(tǒng)負(fù)面影響最小。所以獲取鎖和釋放鎖的速度很快。由于表級(jí)鎖一次會(huì)將整個(gè)表鎖定,所以可以很好的避免困擾我們的死鎖問(wèn)題。
當(dāng)然,鎖定顆粒度大所帶來(lái)最大的負(fù)面影響就是出現(xiàn)鎖定資源爭(zhēng)用的概率也會(huì)最高,致使并大度大打折扣。
使用表級(jí)鎖定的主要是MyISAM,MEMORY,CSV等一些非事務(wù)性存儲(chǔ)引擎。

2.行級(jí)鎖定(row-level)
行級(jí)鎖定最大的特點(diǎn)就是鎖定對(duì)象的顆粒度很小,也是目前各大數(shù)據(jù)庫(kù)管理軟件所實(shí)現(xiàn)的鎖定顆粒度最小的。由于鎖定顆粒度很小,所以發(fā)生鎖定資源爭(zhēng)用的概率也最小,能夠給予應(yīng)用程序盡可能大的并發(fā)處理能力而提高一些需要高并發(fā)應(yīng)用系統(tǒng)的整體性能。
雖然能夠在并發(fā)處理能力上面有較大的優(yōu)勢(shì).但是行級(jí)鎖定也因此帶來(lái)了不少弊端。由于鎖定資源的顆粒度很小,所以每次獲取鎖和釋放鎖需要做的事情也更多,帶來(lái)的消耗自然也就更大了。此外,行級(jí)鎖定也最容易發(fā)生死鎖。
使用行級(jí)鎖定的主要是InnoDB存儲(chǔ)引擎。

3.頁(yè)級(jí)鎖定(page-level)
頁(yè)級(jí)鎖定是MySQL中比較獨(dú)特的一種鎖定級(jí)別,在其他數(shù)據(jù)庫(kù)管理軟件中也并不是太常見(jiàn)。頁(yè)級(jí)鎖定的特點(diǎn)是鎖定顆粒度介于行級(jí)鎖定與表級(jí)鎖之間,所以獲取鎖定所需要的資源開(kāi)銷(xiāo),以及所能提供的并發(fā)處理能力也同樣是介于上面二者之間。另外,頁(yè)級(jí)鎖定和行級(jí)鎖定一樣,會(huì)發(fā)生死鎖。
在數(shù)據(jù)庫(kù)實(shí)現(xiàn)資源鎖定的過(guò)程中,隨著鎖定資源顆粒度的減小,鎖定相同數(shù)據(jù)量的數(shù)據(jù)所需要消耗的內(nèi)存數(shù)量是越來(lái)越多的,實(shí)現(xiàn)算法也會(huì)越來(lái)越復(fù)雜。不過(guò),隨著鎖定資源顆粒度的減小,應(yīng)用程序的訪(fǎng)問(wèn)請(qǐng)求遇到鎖等待的可能性也會(huì)隨之降低,系統(tǒng)整體并發(fā)度也隨之提升。
使用頁(yè)級(jí)鎖定的主要是BerkeleyDB存儲(chǔ)引擎。

總的來(lái)說(shuō),MySQL這3種鎖的特性可大致歸納如下:
表級(jí)鎖:開(kāi)銷(xiāo)小,加鎖快;不會(huì)出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低;
行級(jí)鎖:開(kāi)銷(xiāo)大,加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高;
頁(yè)級(jí)鎖:開(kāi)銷(xiāo)和加鎖時(shí)間界于表鎖和行鎖之間;會(huì)出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般。
適用范圍:從鎖的角度來(lái)說(shuō),表級(jí)鎖更適合于以查詢(xún)?yōu)橹?#xff0c;只有少量按索引條件更新數(shù)據(jù)的應(yīng)用,如Web應(yīng)用;而行級(jí)鎖則更適合于有大量按索引條件并發(fā)更新少量不同數(shù)據(jù),同時(shí)又有并發(fā)查詢(xún)的應(yīng)用,如一些在線(xiàn)事務(wù)處理(OLTP)系統(tǒng)。

二、詳解表級(jí)鎖定
由于MyISAM存儲(chǔ)引擎使用的鎖定機(jī)制完全是由MySQL提供的表級(jí)鎖定實(shí)現(xiàn),所以下面我們將以MyISAM存儲(chǔ)引擎作為示例存儲(chǔ)引擎。

1.MySQL表級(jí)鎖的鎖模式
MySQL的表級(jí)鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨(dú)占寫(xiě)鎖(Table Write Lock)。
鎖模式的兼容性:
①對(duì)MyISAM表的讀操作,不會(huì)阻塞其他用戶(hù)對(duì)同一表的讀請(qǐng)求,但會(huì)阻塞對(duì)同一表的寫(xiě)請(qǐng)求;
②對(duì)MyISAM表的寫(xiě)操作,則會(huì)阻塞其他用戶(hù)對(duì)同一表的讀和寫(xiě)操作;
③MyISAM表的讀操作與寫(xiě)操作之間,以及寫(xiě)操作之間是串行的。當(dāng)一個(gè)線(xiàn)程獲得對(duì)一個(gè)表的寫(xiě)鎖后,只有持有鎖的線(xiàn)程可以對(duì)表進(jìn)行更新操作。其他線(xiàn)程的讀、寫(xiě)操作都會(huì)等待,直到鎖被釋放為止。

2.如何加表鎖
MyISAM在執(zhí)行查詢(xún)語(yǔ)句(SELECT)前,會(huì)自動(dòng)給涉及的所有表加讀鎖,在執(zhí)行更新操作(UPDATE、DELETE、INSERT等)前,會(huì)自動(dòng)給涉及的表加寫(xiě)鎖,這個(gè)過(guò)程并不需要用戶(hù)干預(yù),因此,用戶(hù)一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。

3.MyISAM表鎖優(yōu)化建議
對(duì)于MyISAM存儲(chǔ)引擎,雖然使用表級(jí)鎖定在鎖定實(shí)現(xiàn)的過(guò)程中比實(shí)現(xiàn)行級(jí)鎖定或者頁(yè)級(jí)鎖所帶來(lái)的附加成本都要小,鎖定本身所消耗的資源也是最少。但是由于鎖定的顆粒度比較到,所以造成鎖定資源的爭(zhēng)用情況也會(huì)比其他的鎖定級(jí)別都要多,從而在較大程度上會(huì)降低并發(fā)處理能力。所以,在優(yōu)化MyISAM存儲(chǔ)引擎鎖定問(wèn)題的時(shí)候,最關(guān)鍵的就是如何讓其提高并發(fā)度。由于鎖定級(jí)別是不可能改變的了,所以我們首先需要盡可能讓鎖定的時(shí)間變短,然后就是讓可能并發(fā)進(jìn)行的操作盡可能的并發(fā)。
(1)查詢(xún)表級(jí)鎖爭(zhēng)用情況
MySQL內(nèi)部有兩組專(zhuān)門(mén)的狀態(tài)變量記錄系統(tǒng)內(nèi)部鎖資源爭(zhēng)用情況:
mysql> show status like 'table%';
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| Table_locks_immediate | 100 |
| Table_locks_waited | 11 |
+----------------------------+---------+

這里有兩個(gè)狀態(tài)變量記錄MySQL內(nèi)部表級(jí)鎖定的情況,兩個(gè)變量說(shuō)明如下:
Table_locks_immediate:產(chǎn)生表級(jí)鎖定的次數(shù);
Table_locks_waited:出現(xiàn)表級(jí)鎖定爭(zhēng)用而發(fā)生等待的次數(shù);
兩個(gè)狀態(tài)值都是從系統(tǒng)啟動(dòng)后開(kāi)始記錄,出現(xiàn)一次對(duì)應(yīng)的事件則數(shù)量加1。如果這里的Table_locks_waited狀態(tài)值比較高,那么說(shuō)明系統(tǒng)中表級(jí)鎖定爭(zhēng)用現(xiàn)象比較嚴(yán)重,就需要進(jìn)一步分析為什么會(huì)有較多的鎖定資源爭(zhēng)用了。
(2)縮短鎖定時(shí)間
如何讓鎖定時(shí)間盡可能的短呢?唯一的辦法就是讓我們的Query執(zhí)行時(shí)間盡可能的短。
a)盡兩減少大的復(fù)雜Query,將復(fù)雜Query分拆成幾個(gè)小的Query分布進(jìn)行;
b)盡可能的建立足夠高效的索引,讓數(shù)據(jù)檢索更迅速;
c)盡量讓MyISAM存儲(chǔ)引擎的表只存放必要的信息,控制字段類(lèi)型;
d)利用合適的機(jī)會(huì)優(yōu)化MyISAM表數(shù)據(jù)文件。
(3)分離能并行的操作
說(shuō)到MyISAM的表鎖,而且是讀寫(xiě)互相阻塞的表鎖,可能有些人會(huì)認(rèn)為在MyISAM存儲(chǔ)引擎的表上就只能是完全的串行化,沒(méi)辦法再并行了。大家不要忘記了,MyISAM的存儲(chǔ)引擎還有一個(gè)非常有用的特性,那就是ConcurrentInsert(并發(fā)插入)的特性。
MyISAM存儲(chǔ)引擎有一個(gè)控制是否打開(kāi)Concurrent Insert功能的參數(shù)選項(xiàng):concurrent_insert,可以設(shè)置為0,1或者2。三個(gè)值的具體說(shuō)明如下:
concurrent_insert=2,無(wú)論MyISAM表中有沒(méi)有空洞,都允許在表尾并發(fā)插入記錄;
concurrent_insert=1,如果MyISAM表中沒(méi)有空洞(即表的中間沒(méi)有被刪除的行),MyISAM允許在一個(gè)進(jìn)程讀表的同時(shí),另一個(gè)進(jìn)程從表尾插入記錄。這也是MySQL的默認(rèn)設(shè)置;
concurrent_insert=0,不允許并發(fā)插入。
可以利用MyISAM存儲(chǔ)引擎的并發(fā)插入特性,來(lái)解決應(yīng)用中對(duì)同一表查詢(xún)和插入的鎖爭(zhēng)用。例如,將concurrent_insert系統(tǒng)變量設(shè)為2,總是允許并發(fā)插入;同時(shí),通過(guò)定期在系統(tǒng)空閑時(shí)段執(zhí)行OPTIMIZE TABLE語(yǔ)句來(lái)整理空間碎片,收回因刪除記錄而產(chǎn)生的中間空洞。
(4)合理利用讀寫(xiě)優(yōu)先級(jí)
MyISAM存儲(chǔ)引擎的是讀寫(xiě)互相阻塞的,那么,一個(gè)進(jìn)程請(qǐng)求某個(gè)MyISAM表的讀鎖,同時(shí)另一個(gè)進(jìn)程也請(qǐng)求同一表的寫(xiě)鎖,MySQL如何處理呢?
答案是寫(xiě)進(jìn)程先獲得鎖。不僅如此,即使讀請(qǐng)求先到鎖等待隊(duì)列,寫(xiě)請(qǐng)求后到,寫(xiě)鎖也會(huì)插到讀鎖請(qǐng)求之前。
這是因?yàn)镸ySQL的表級(jí)鎖定對(duì)于讀和寫(xiě)是有不同優(yōu)先級(jí)設(shè)定的,默認(rèn)情況下是寫(xiě)優(yōu)先級(jí)要大于讀優(yōu)先級(jí)。
所以,如果我們可以根據(jù)各自系統(tǒng)環(huán)境的差異決定讀與寫(xiě)的優(yōu)先級(jí):
通過(guò)執(zhí)行命令SET LOW_PRIORITY_UPDATES=1,使該連接讀比寫(xiě)的優(yōu)先級(jí)高。如果我們的系統(tǒng)是一個(gè)以讀為主,可以設(shè)置此參數(shù),如果以寫(xiě)為主,則不用設(shè)置;
通過(guò)指定INSERT、UPDATE、DELETE語(yǔ)句的LOW_PRIORITY屬性,降低該語(yǔ)句的優(yōu)先級(jí)。
另外,MySQL也提供了一種折中的辦法來(lái)調(diào)節(jié)讀寫(xiě)沖突,即給系統(tǒng)參數(shù)max_write_lock_count設(shè)置一個(gè)合適的值,當(dāng)一個(gè)表的讀鎖達(dá)到這個(gè)值后,MySQL就暫時(shí)將寫(xiě)請(qǐng)求的優(yōu)先級(jí)降低,給讀進(jìn)程一定獲得鎖的機(jī)會(huì)。
這里還要強(qiáng)調(diào)一點(diǎn):一些需要長(zhǎng)時(shí)間運(yùn)行的查詢(xún)操作,也會(huì)使寫(xiě)進(jìn)程“餓死”,因此,應(yīng)用中應(yīng)盡量避免出現(xiàn)長(zhǎng)時(shí)間運(yùn)行的查詢(xún)操作,不要總想用一條SELECT語(yǔ)句來(lái)解決問(wèn)題,因?yàn)檫@種看似巧妙的SQL語(yǔ)句,往往比較復(fù)雜,執(zhí)行時(shí)間較長(zhǎng),在可能的情況下可以通過(guò)使用中間表等措施對(duì)SQL語(yǔ)句做一定的“分解”,使每一步查詢(xún)都能在較短時(shí)間完成,從而減少鎖沖突。如果復(fù)雜查詢(xún)不可避免,應(yīng)盡量安排在數(shù)據(jù)庫(kù)空閑時(shí)段執(zhí)行,比如一些定期統(tǒng)計(jì)可以安排在夜間執(zhí)行。

三、詳解行級(jí)鎖定
行級(jí)鎖定不是MySQL自己實(shí)現(xiàn)的鎖定方式,而是由其他存儲(chǔ)引擎自己所實(shí)現(xiàn)的,如廣為大家所知的InnoDB存儲(chǔ)引擎,以及MySQL的分布式存儲(chǔ)引擎NDBCluster等都是實(shí)現(xiàn)了行級(jí)鎖定。考慮到行級(jí)鎖定君由各個(gè)存儲(chǔ)引擎自行實(shí)現(xiàn),而且具體實(shí)現(xiàn)也各有差別,而InnoDB是目前事務(wù)型存儲(chǔ)引擎中使用最為廣泛的存儲(chǔ)引擎,所以這里我們就主要分析一下InnoDB的鎖定特性。

1.InnoDB鎖定模式及實(shí)現(xiàn)機(jī)制
考慮到行級(jí)鎖定君由各個(gè)存儲(chǔ)引擎自行實(shí)現(xiàn),而且具體實(shí)現(xiàn)也各有差別,而InnoDB是目前事務(wù)型存儲(chǔ)引擎中使用最為廣泛的存儲(chǔ)引擎,所以這里我們就主要分析一下InnoDB的鎖定特性。
總的來(lái)說(shuō),InnoDB的鎖定機(jī)制和Oracle數(shù)據(jù)庫(kù)有不少相似之處。InnoDB的行級(jí)鎖定同樣分為兩種類(lèi)型,共享鎖和排他鎖,而在鎖定機(jī)制的實(shí)現(xiàn)過(guò)程中為了讓行級(jí)鎖定和表級(jí)鎖定共存,InnoDB也同樣使用了意向鎖(表級(jí)鎖定)的概念,也就有了意向共享鎖和意向排他鎖這兩種。
當(dāng)一個(gè)事務(wù)需要給自己需要的某個(gè)資源加鎖的時(shí)候,如果遇到一個(gè)共享鎖正鎖定著自己需要的資源的時(shí)候,自己可以再加一個(gè)共享鎖,不過(guò)不能加排他鎖。但是,如果遇到自己需要鎖定的資源已經(jīng)被一個(gè)排他鎖占有之后,則只能等待該鎖定釋放資源之后自己才能獲取鎖定資源并添加自己的鎖定。而意向鎖的作用就是當(dāng)一個(gè)事務(wù)在需要獲取資源鎖定的時(shí)候,如果遇到自己需要的資源已經(jīng)被排他鎖占用的時(shí)候,該事務(wù)可以需要鎖定行的表上面添加一個(gè)合適的意向鎖。如果自己需要一個(gè)共享鎖,那么就在表上面添加一個(gè)意向共享鎖。而如果自己需要的是某行(或者某些行)上面添加一個(gè)排他鎖的話(huà),則先在表上面添加一個(gè)意向排他鎖。意向共享鎖可以同時(shí)并存多個(gè),但是意向排他鎖同時(shí)只能有一個(gè)存在。所以,可以說(shuō)InnoDB的鎖定模式實(shí)際上可以分為四種:共享鎖(S),排他鎖(X),意向共享鎖(IS)和意向排他鎖(IX),我們可以通過(guò)以下表格來(lái)總結(jié)上面這四種所的共存邏輯關(guān)系:

如果一個(gè)事務(wù)請(qǐng)求的鎖模式與當(dāng)前的鎖兼容,InnoDB就將請(qǐng)求的鎖授予該事務(wù);反之,如果兩者不兼容,該事務(wù)就要等待鎖釋放。
意向鎖是InnoDB自動(dòng)加的,不需用戶(hù)干預(yù)。對(duì)于UPDATE、DELETE和INSERT語(yǔ)句,InnoDB會(huì)自動(dòng)給涉及數(shù)據(jù)集加排他鎖(X);對(duì)于普通SELECT語(yǔ)句,InnoDB不會(huì)加任何鎖;事務(wù)可以通過(guò)以下語(yǔ)句顯示給記錄集加共享鎖或排他鎖。
共享鎖(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
排他鎖(X):SELECT * FROM table_name WHERE ... FOR UPDATE
用SELECT ... IN SHARE MODE獲得共享鎖,主要用在需要數(shù)據(jù)依存關(guān)系時(shí)來(lái)確認(rèn)某行記錄是否存在,并確保沒(méi)有人對(duì)這個(gè)記錄進(jìn)行UPDATE或者DELETE操作。
但是如果當(dāng)前事務(wù)也需要對(duì)該記錄進(jìn)行更新操作,則很有可能造成死鎖,對(duì)于鎖定行記錄后需要進(jìn)行更新操作的應(yīng)用,應(yīng)該使用SELECT... FOR UPDATE方式獲得排他鎖。

2.InnoDB行鎖實(shí)現(xiàn)方式
InnoDB行鎖是通過(guò)給索引上的索引項(xiàng)加鎖來(lái)實(shí)現(xiàn)的,只有通過(guò)索引條件檢索數(shù)據(jù),InnoDB才使用行級(jí)鎖,否則,InnoDB將使用表鎖。
在實(shí)際應(yīng)用中,要特別注意InnoDB行鎖的這一特性,不然的話(huà),可能導(dǎo)致大量的鎖沖突,從而影響并發(fā)性能。下面通過(guò)一些實(shí)際例子來(lái)加以說(shuō)明。
(1)在不通過(guò)索引條件查詢(xún)的時(shí)候,InnoDB確實(shí)使用的是表鎖,而不是行鎖。
(2)由于MySQL的行鎖是針對(duì)索引加的鎖,不是針對(duì)記錄加的鎖,所以雖然是訪(fǎng)問(wèn)不同行的記錄,但是如果是使用相同的索引鍵,是會(huì)出現(xiàn)鎖沖突的。
(3)當(dāng)表有多個(gè)索引的時(shí)候,不同的事務(wù)可以使用不同的索引鎖定不同的行,另外,不論是使用主鍵索引、唯一索引或普通索引,InnoDB都會(huì)使用行鎖來(lái)對(duì)數(shù)據(jù)加鎖。
(4)即便在條件中使用了索引字段,但是否使用索引來(lái)檢索數(shù)據(jù)是由MySQL通過(guò)判斷不同執(zhí)行計(jì)劃的代價(jià)來(lái)決定的,如果MySQL認(rèn)為全表掃描效率更高,比如對(duì)一些很小的表,它就不會(huì)使用索引,這種情況下InnoDB將使用表鎖,而不是行鎖。因此,在分析鎖沖突時(shí),別忘了檢查SQL的執(zhí)行計(jì)劃,以確認(rèn)是否真正使用了索引。

3.間隙鎖(Next-Key鎖)
當(dāng)我們用范圍條件而不是相等條件檢索數(shù)據(jù),并請(qǐng)求共享或排他鎖時(shí),InnoDB會(huì)給符合條件的已有數(shù)據(jù)記錄的索引項(xiàng)加鎖;
對(duì)于鍵值在條件范圍內(nèi)但并不存在的記錄,叫做“間隙(GAP)”,InnoDB也會(huì)對(duì)這個(gè)“間隙”加鎖,這種鎖機(jī)制就是所謂的間隙鎖(Next-Key鎖)。
例:
假如emp表中只有101條記錄,其empid的值分別是 1,2,...,100,101,下面的SQL:
mysql> select * from emp where empid > 100 for update;
是一個(gè)范圍條件的檢索,InnoDB不僅會(huì)對(duì)符合條件的empid值為101的記錄加鎖,也會(huì)對(duì)empid大于101(這些記錄并不存在)的“間隙”加鎖。
InnoDB使用間隙鎖的目的:
(1)防止幻讀,以滿(mǎn)足相關(guān)隔離級(jí)別的要求。對(duì)于上面的例子,要是不使用間隙鎖,如果其他事務(wù)插入了empid大于100的任何記錄,那么本事務(wù)如果再次執(zhí)行上述語(yǔ)句,就會(huì)發(fā)生幻讀;
(2)為了滿(mǎn)足其恢復(fù)和復(fù)制的需要。
很顯然,在使用范圍條件檢索并鎖定記錄時(shí),即使某些不存在的鍵值也會(huì)被無(wú)辜的鎖定,而造成在鎖定的時(shí)候無(wú)法插入鎖定鍵值范圍內(nèi)的任何數(shù)據(jù)。在某些場(chǎng)景下這可能會(huì)對(duì)性能造成很大的危害。
除了間隙鎖給InnoDB帶來(lái)性能的負(fù)面影響之外,通過(guò)索引實(shí)現(xiàn)鎖定的方式還存在其他幾個(gè)較大的性能隱患:
(1)當(dāng)Query無(wú)法利用索引的時(shí)候,InnoDB會(huì)放棄使用行級(jí)別鎖定而改用表級(jí)別的鎖定,造成并發(fā)性能的降低;
(2)當(dāng)Query使用的索引并不包含所有過(guò)濾條件的時(shí)候,數(shù)據(jù)檢索使用到的索引鍵所只想的數(shù)據(jù)可能有部分并不屬于該Query的結(jié)果集的行列,但是也會(huì)被鎖定,因?yàn)殚g隙鎖鎖定的是一個(gè)范圍,而不是具體的索引鍵;
(3)當(dāng)Query在使用索引定位數(shù)據(jù)的時(shí)候,如果使用的索引鍵一樣但訪(fǎng)問(wèn)的數(shù)據(jù)行不同的時(shí)候(索引只是過(guò)濾條件的一部分),一樣會(huì)被鎖定。
因此,在實(shí)際應(yīng)用開(kāi)發(fā)中,尤其是并發(fā)插入比較多的應(yīng)用,我們要盡量?jī)?yōu)化業(yè)務(wù)邏輯,盡量使用相等條件來(lái)訪(fǎng)問(wèn)更新數(shù)據(jù),避免使用范圍條件。
還要特別說(shuō)明的是,InnoDB除了通過(guò)范圍條件加鎖時(shí)使用間隙鎖外,如果使用相等條件請(qǐng)求給一個(gè)不存在的記錄加鎖,InnoDB也會(huì)使用間隙鎖。

4.死鎖
上文講過(guò),MyISAM表鎖是deadlock free的,這是因?yàn)镸yISAM總是一次獲得所需的全部鎖,要么全部滿(mǎn)足,要么等待,因此不會(huì)出現(xiàn)死鎖。但在InnoDB中,除單個(gè)SQL組成的事務(wù)外,鎖是逐步獲得的,當(dāng)兩個(gè)事務(wù)都需要獲得對(duì)方持有的排他鎖才能繼續(xù)完成事務(wù),這種循環(huán)鎖等待就是典型的死鎖。
在InnoDB的事務(wù)管理和鎖定機(jī)制中,有專(zhuān)門(mén)檢測(cè)死鎖的機(jī)制,會(huì)在系統(tǒng)中產(chǎn)生死鎖之后的很短時(shí)間內(nèi)就檢測(cè)到該死鎖的存在。當(dāng)InnoDB檢測(cè)到系統(tǒng)中產(chǎn)生了死鎖之后,InnoDB會(huì)通過(guò)相應(yīng)的判斷來(lái)選這產(chǎn)生死鎖的兩個(gè)事務(wù)中較小的事務(wù)來(lái)回滾,而讓另外一個(gè)較大的事務(wù)成功完成。
那InnoDB是以什么來(lái)為標(biāo)準(zhǔn)判定事務(wù)的大小的呢?MySQL官方手冊(cè)中也提到了這個(gè)問(wèn)題,實(shí)際上在InnoDB發(fā)現(xiàn)死鎖之后,會(huì)計(jì)算出兩個(gè)事務(wù)各自插入、更新或者刪除的數(shù)據(jù)量來(lái)判定兩個(gè)事務(wù)的大小。也就是說(shuō)哪個(gè)事務(wù)所改變的記錄條數(shù)越多,在死鎖中就越不會(huì)被回滾掉。
但是有一點(diǎn)需要注意的就是,當(dāng)產(chǎn)生死鎖的場(chǎng)景中涉及到不止InnoDB存儲(chǔ)引擎的時(shí)候,InnoDB是沒(méi)辦法檢測(cè)到該死鎖的,這時(shí)候就只能通過(guò)鎖定超時(shí)限制參數(shù)InnoDB_lock_wait_timeout來(lái)解決。
需要說(shuō)明的是,這個(gè)參數(shù)并不是只用來(lái)解決死鎖問(wèn)題,在并發(fā)訪(fǎng)問(wèn)比較高的情況下,如果大量事務(wù)因無(wú)法立即獲得所需的鎖而掛起,會(huì)占用大量計(jì)算機(jī)資源,造成嚴(yán)重性能問(wèn)題,甚至拖跨數(shù)據(jù)庫(kù)。我們通過(guò)設(shè)置合適的鎖等待超時(shí)閾值,可以避免這種情況發(fā)生。
通常來(lái)說(shuō),死鎖都是應(yīng)用設(shè)計(jì)的問(wèn)題,通過(guò)調(diào)整業(yè)務(wù)流程、數(shù)據(jù)庫(kù)對(duì)象設(shè)計(jì)、事務(wù)大小,以及訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的SQL語(yǔ)句,絕大部分死鎖都可以避免。下面就通過(guò)實(shí)例來(lái)介紹幾種避免死鎖的常用方法:
(1)在應(yīng)用中,如果不同的程序會(huì)并發(fā)存取多個(gè)表,應(yīng)盡量約定以相同的順序來(lái)訪(fǎng)問(wèn)表,這樣可以大大降低產(chǎn)生死鎖的機(jī)會(huì)。
(2)在程序以批量方式處理數(shù)據(jù)的時(shí)候,如果事先對(duì)數(shù)據(jù)排序,保證每個(gè)線(xiàn)程按固定的順序來(lái)處理記錄,也可以大大降低出現(xiàn)死鎖的可能。
(3)在事務(wù)中,如果要更新記錄,應(yīng)該直接申請(qǐng)足夠級(jí)別的鎖,即排他鎖,而不應(yīng)先申請(qǐng)共享鎖,更新時(shí)再申請(qǐng)排他鎖,因?yàn)楫?dāng)用戶(hù)申請(qǐng)排他鎖時(shí),其他事務(wù)可能又已經(jīng)獲得了相同記錄的共享鎖,從而造成鎖沖突,甚至死鎖。
(4)在REPEATABLE-READ隔離級(jí)別下,如果兩個(gè)線(xiàn)程同時(shí)對(duì)相同條件記錄用SELECT...FOR UPDATE加排他鎖,在沒(méi)有符合該條件記錄情況下,兩個(gè)線(xiàn)程都會(huì)加鎖成功。程序發(fā)現(xiàn)記錄尚不存在,就試圖插入一條新記錄,如果兩個(gè)線(xiàn)程都這么做,就會(huì)出現(xiàn)死鎖。這種情況下,將隔離級(jí)別改成READ COMMITTED,就可避免問(wèn)題。
(5)當(dāng)隔離級(jí)別為READ COMMITTED時(shí),如果兩個(gè)線(xiàn)程都先執(zhí)行SELECT...FOR UPDATE,判斷是否存在符合條件的記錄,如果沒(méi)有,就插入記錄。此時(shí),只有一個(gè)線(xiàn)程能插入成功,另一個(gè)線(xiàn)程會(huì)出現(xiàn)鎖等待,當(dāng)?shù)?個(gè)線(xiàn)程提交后,第2個(gè)線(xiàn)程會(huì)因主鍵重出錯(cuò),但雖然這個(gè)線(xiàn)程出錯(cuò)了,卻會(huì)獲得一個(gè)排他鎖。這時(shí)如果有第3個(gè)線(xiàn)程又來(lái)申請(qǐng)排他鎖,也會(huì)出現(xiàn)死鎖。對(duì)于這種情況,可以直接做插入操作,然后再捕獲主鍵重異常,或者在遇到主鍵重錯(cuò)誤時(shí),總是執(zhí)行ROLLBACK釋放獲得的排他鎖。

5.什么時(shí)候使用表鎖
對(duì)于InnoDB表,在絕大部分情況下都應(yīng)該使用行級(jí)鎖,因?yàn)槭聞?wù)和行鎖往往是我們之所以選擇InnoDB表的理由。但在個(gè)別特殊事務(wù)中,也可以考慮使用表級(jí)鎖:
(1)事務(wù)需要更新大部分或全部數(shù)據(jù),表又比較大,如果使用默認(rèn)的行鎖,不僅這個(gè)事務(wù)執(zhí)行效率低,而且可能造成其他事務(wù)長(zhǎng)時(shí)間鎖等待和鎖沖突,這種情況下可以考慮使用表鎖來(lái)提高該事務(wù)的執(zhí)行速度。
(2)事務(wù)涉及多個(gè)表,比較復(fù)雜,很可能引起死鎖,造成大量事務(wù)回滾。這種情況也可以考慮一次性鎖定事務(wù)涉及的表,從而避免死鎖、減少數(shù)據(jù)庫(kù)因事務(wù)回滾帶來(lái)的開(kāi)銷(xiāo)。
當(dāng)然,應(yīng)用中這兩種事務(wù)不能太多,否則,就應(yīng)該考慮使用MyISAM表了。
在InnoDB下,使用表鎖要注意以下兩點(diǎn)。
(1)使用LOCK TABLES雖然可以給InnoDB加表級(jí)鎖,但必須說(shuō)明的是,表鎖不是由InnoDB存儲(chǔ)引擎層管理的,而是由其上一層──MySQL Server負(fù)責(zé)的,僅當(dāng)autocommit=0、InnoDB_table_locks=1(默認(rèn)設(shè)置)時(shí),InnoDB層才能知道MySQL加的表鎖,MySQL Server也才能感知InnoDB加的行鎖,這種情況下,InnoDB才能自動(dòng)識(shí)別涉及表級(jí)鎖的死鎖,否則,InnoDB將無(wú)法自動(dòng)檢測(cè)并處理這種死鎖。
(2)在用 LOCK TABLES對(duì)InnoDB表加鎖時(shí)要注意,要將AUTOCOMMIT設(shè)為0,否則MySQL不會(huì)給表加鎖;事務(wù)結(jié)束前,不要用UNLOCK TABLES釋放表鎖,因?yàn)閁NLOCK TABLES會(huì)隱含地提交事務(wù);COMMIT或ROLLBACK并不能釋放用LOCK TABLES加的表級(jí)鎖,必須用UNLOCK TABLES釋放表鎖。正確的方式見(jiàn)如下語(yǔ)句:
例如,如果需要寫(xiě)表t1并從表t讀,可以按如下做:
SET AUTOCOMMIT=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
[do something with tables t1 and t2 here];
COMMIT;
UNLOCK TABLES;


6.InnoDB行鎖優(yōu)化建議
InnoDB存儲(chǔ)引擎由于實(shí)現(xiàn)了行級(jí)鎖定,雖然在鎖定機(jī)制的實(shí)現(xiàn)方面所帶來(lái)的性能損耗可能比表級(jí)鎖定會(huì)要更高一些,但是在整體并發(fā)處理能力方面要遠(yuǎn)遠(yuǎn)優(yōu)于MyISAM的表級(jí)鎖定的。當(dāng)系統(tǒng)并發(fā)量較高的時(shí)候,InnoDB的整體性能和MyISAM相比就會(huì)有比較明顯的優(yōu)勢(shì)了。但是,InnoDB的行級(jí)鎖定同樣也有其脆弱的一面,當(dāng)我們使用不當(dāng)?shù)臅r(shí)候,可能會(huì)讓InnoDB的整體性能表現(xiàn)不僅不能比MyISAM高,甚至可能會(huì)更差。
(1)要想合理利用InnoDB的行級(jí)鎖定,做到揚(yáng)長(zhǎng)避短,我們必須做好以下工作:
a)盡可能讓所有的數(shù)據(jù)檢索都通過(guò)索引來(lái)完成,從而避免InnoDB因?yàn)闊o(wú)法通過(guò)索引鍵加鎖而升級(jí)為表級(jí)鎖定;
b)合理設(shè)計(jì)索引,讓InnoDB在索引鍵上面加鎖的時(shí)候盡可能準(zhǔn)確,盡可能的縮小鎖定范圍,避免造成不必要的鎖定而影響其他Query的執(zhí)行;
c)盡可能減少基于范圍的數(shù)據(jù)檢索過(guò)濾條件,避免因?yàn)殚g隙鎖帶來(lái)的負(fù)面影響而鎖定了不該鎖定的記錄;
d)盡量控制事務(wù)的大小,減少鎖定的資源量和鎖定時(shí)間長(zhǎng)度;
e)在業(yè)務(wù)環(huán)境允許的情況下,盡量使用較低級(jí)別的事務(wù)隔離,以減少M(fèi)ySQL因?yàn)閷?shí)現(xiàn)事務(wù)隔離級(jí)別所帶來(lái)的附加成本。
(2)由于InnoDB的行級(jí)鎖定和事務(wù)性,所以肯定會(huì)產(chǎn)生死鎖,下面是一些比較常用的減少死鎖產(chǎn)生概率的小建議:
a)類(lèi)似業(yè)務(wù)模塊中,盡可能按照相同的訪(fǎng)問(wèn)順序來(lái)訪(fǎng)問(wèn),防止產(chǎn)生死鎖;
b)在同一個(gè)事務(wù)中,盡可能做到一次鎖定所需要的所有資源,減少死鎖產(chǎn)生概率;
c)對(duì)于非常容易產(chǎn)生死鎖的業(yè)務(wù)部分,可以嘗試使用升級(jí)鎖定顆粒度,通過(guò)表級(jí)鎖定來(lái)減少死鎖產(chǎn)生的概率。
(3)可以通過(guò)檢查InnoDB_row_lock狀態(tài)變量來(lái)分析系統(tǒng)上的行鎖的爭(zhēng)奪情況:
mysql> show status like 'InnoDB_row_lock%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| InnoDB_row_lock_current_waits | 0 |
| InnoDB_row_lock_time | 0 |
| InnoDB_row_lock_time_avg | 0 |
| InnoDB_row_lock_time_max | 0 |
| InnoDB_row_lock_waits | 0 |
+-------------------------------+-------+


InnoDB 的行級(jí)鎖定狀態(tài)變量不僅記錄了鎖定等待次數(shù),還記錄了鎖定總時(shí)長(zhǎng),每次平均時(shí)長(zhǎng),以及最大時(shí)長(zhǎng),此外還有一個(gè)非累積狀態(tài)量顯示了當(dāng)前正在等待鎖定的等待數(shù)量。對(duì)各個(gè)狀態(tài)量的說(shuō)明如下:
InnoDB_row_lock_current_waits:當(dāng)前正在等待鎖定的數(shù)量;
InnoDB_row_lock_time:從系統(tǒng)啟動(dòng)到現(xiàn)在鎖定總時(shí)間長(zhǎng)度;
InnoDB_row_lock_time_avg:每次等待所花平均時(shí)間;
InnoDB_row_lock_time_max:從系統(tǒng)啟動(dòng)到現(xiàn)在等待最常的一次所花的時(shí)間;
InnoDB_row_lock_waits:系統(tǒng)啟動(dòng)后到現(xiàn)在總共等待的次數(shù);
對(duì)于這5個(gè)狀態(tài)變量,比較重要的主要是InnoDB_row_lock_time_avg(等待平均時(shí)長(zhǎng)),InnoDB_row_lock_waits(等待總次數(shù))以及InnoDB_row_lock_time(等待總時(shí)長(zhǎng))這三項(xiàng)。尤其是當(dāng)?shù)却螖?shù)很高,而且每次等待時(shí)長(zhǎng)也不小的時(shí)候,我們就需要分析系統(tǒng)中為什么會(huì)有如此多的等待,然后根據(jù)分析結(jié)果著手指定優(yōu)化計(jì)劃。
如果發(fā)現(xiàn)鎖爭(zhēng)用比較嚴(yán)重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比較高,還可以通過(guò)設(shè)置InnoDB Monitors 來(lái)進(jìn)一步觀察發(fā)生鎖沖突的表、數(shù)據(jù)行等,并分析鎖爭(zhēng)用的原因。
鎖沖突的表、數(shù)據(jù)行等,并分析鎖爭(zhēng)用的原因。具體方法如下:
mysql> create table InnoDB_monitor(a INT) engine=InnoDB;

然后就可以用下面的語(yǔ)句來(lái)進(jìn)行查看:
mysql> show engine InnoDB status;

監(jiān)視器可以通過(guò)發(fā)出下列語(yǔ)句來(lái)停止查看:
mysql> drop table InnoDB_monitor;

設(shè)置監(jiān)視器后,會(huì)有詳細(xì)的當(dāng)前鎖等待的信息,包括表名、鎖類(lèi)型、鎖定記錄的情況等,便于進(jìn)行進(jìn)一步的分析和問(wèn)題的確定。可能會(huì)有讀者朋友問(wèn)為什么要先創(chuàng)建一個(gè)叫InnoDB_monitor的表呢?因?yàn)閯?chuàng)建該表實(shí)際上就是告訴InnoDB我們開(kāi)始要監(jiān)控他的細(xì)節(jié)狀態(tài)了,然后InnoDB就會(huì)將比較詳細(xì)的事務(wù)以及鎖定信息記錄進(jìn)入MySQL的errorlog中,以便我們后面做進(jìn)一步分析使用。打開(kāi)監(jiān)視器以后,默認(rèn)情況下每15秒會(huì)向日志中記錄監(jiān)控的內(nèi)容,如果長(zhǎng)時(shí)間打開(kāi)會(huì)導(dǎo)致.err文件變得非常的巨大,所以用戶(hù)在確認(rèn)問(wèn)題原因之后,要記得刪除監(jiān)控表以關(guān)閉監(jiān)視器,或者通過(guò)使用“--console”選項(xiàng)來(lái)啟動(dòng)服務(wù)器以關(guān)閉寫(xiě)日志文件。

轉(zhuǎn)載于:https://www.cnblogs.com/ericz2j/p/11109388.html

與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Mysql锁【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产精品久久久久久久久免费 | 韩日成人av | 亚洲精品日韩在线观看 | 日本韩国中文字幕 | 国产欧美精品一区二区三区 | 久久久91精品国产一区二区精品 | 狠狠色伊人亚洲综合网站野外 | 婷婷 中文字幕 | 精品国产电影一区二区 | 国产精品手机在线观看 | 亚洲欧美成人综合 | 欧美最新大片在线看 | 在线观看中文字幕第一页 | 婷婷色中文字幕 | 91一区啪爱嗯打偷拍欧美 | 天天做天天射 | 久久99精品久久久久久久久久久久 | 麻豆视频免费看 | 2018好看的中文在线观看 | 久久精品1区 | 天天射天天爽 | 色综合久久综合网 | 99久久精品免费一区 | 色综合亚洲精品激情狠狠 | 啪啪午夜免费 | 午夜成人免费电影 | 波多野结衣动态图 | www操操 | 精品久久久久免费极品大片 | 亚洲国产激情 | 精品一区中文字幕 | 91尤物在线播放 | 中文字幕色在线 | 国产香蕉视频 | 福利一区二区 | 五月婷婷av | 四虎在线免费视频 | 国产黄视频在线观看 | 激情综合色播五月 | 在线色资源 | 久久福利综合 | 有码一区二区三区 | 亚洲欧美国产精品久久久久 | 久久久久久久精 | 久久精品久久久久 | 99精品免费久久久久久久久日本 | 99色免费 | 成人av教育| 97精品国产aⅴ | 欧美日韩二三区 | 国产这里只有精品 | 婷婷国产在线观看 | 成人免费 在线播放 | 久久黄色片子 | 免费无遮挡动漫网站 | 国产精品初高中精品久久 | bbbbb女女女女女bbbbb国产 | 国产精品久久久久久久久久久久午夜 | 欧美日韩国产在线一区 | 国产成人亚洲在线电影 | 欧美一级片在线 | 欧美 日韩 久久 | 欧美日韩视频观看 | 色香com.| 人人讲| 九七在线视频 | 欧美日韩xx | 91亚洲国产成人久久精品网站 | 狠狠操在线 | 夜夜高潮夜夜爽国产伦精品 | 色婷婷啪啪免费在线电影观看 | 午夜精品一区二区三区视频免费看 | 国产中文字幕一区 | 超碰在线观看97 | 日韩久久在线 | 国产精品高潮久久av | 国产亚洲欧美日韩高清 | 91精品日韩 | 中文字幕在线日亚洲9 | 日韩一级黄色av | www操操操| 一区二区三区在线免费播放 | 九九久久久久99精品 | 国产日产精品久久久久快鸭 | 国产精品专区在线观看 | 亚洲午夜久久久久久久久久久 | 一区在线电影 | 欧美国产一区二区 | 国产精品黄色在线观看 | 精品久久久免费 | 97精品国产一二三产区 | 九九热国产 | 欧美一区三区四区 | 色婷婷电影网 | 国产福利精品视频 | 伊人婷婷久久 | 国产精品视频你懂的 | 992tv人人网tv亚洲精品 | 国产精品免费一区二区三区 | 久久玖 | 国产一区国产精品 | 亚洲激情中文 | 在线91视频 | 婷婷深爱网 | 久久久精品国产一区二区电影四季 | 精品主播网红福利资源观看 | 欧美资源| 久久精品亚洲精品国产欧美 | 黄色一级性片 | 人人爽久久涩噜噜噜网站 | 精品国产一二三四区 | 97国产在线播放 | 日韩欧美一区二区在线播放 | 亚洲精品视频免费观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 91色国产在线| 中文字幕在线看片 | 亚洲国产中文在线观看 | 人人干干人人 | 天天躁日日躁狠狠 | 久久久久久国产一区二区三区 | 国产一二三四在线观看视频 | 九热精品 | a在线免费 | 免费日韩一区二区三区 | 免费久久久| 欧美日韩观看 | 久久艹人人 | 亚洲国产av精品毛片鲁大师 | 在线色网站 | 伊人欧美 | 久久久久国产a免费观看rela | 亚洲精品免费观看 | 日韩电影在线观看中文字幕 | 91精品国产自产老师啪 | 婷婷天天色 | 欧美老女人xx | 成人在线观看免费 | 日日爽天天操 | 在线最新av| 91九色丨porny丨丰满6 | 国产免费观看久久 | 免费黄色小网站 | 国产人免费人成免费视频 | 久久dvd| 国产精品久久久久亚洲影视 | 深爱激情av| 亚洲小视频在线 | 夜夜高潮夜夜爽国产伦精品 | 97精品一区二区三区 | 在线国产日韩 | 亚洲精品视频在线免费播放 | 国产精品美女视频 | 午夜精品一区二区三区在线播放 | 午夜精品久久久久久久99 | 亚洲综合色视频在线观看 | 亚洲男男gaygay无套同网址 | 97精品国产97久久久久久久久久久久 | 免费av看片 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产精品黄色影片导航在线观看 | 中文字幕一区二区在线观看 | 色综合久久88色综合天天免费 | 伊人婷婷网 | 日韩视频一区二区 | 亚洲在线激情 | 亚洲aaa毛片 | 很黄很黄的网站免费的 | 91网页版在线观看 | 亚洲欧美精品一区 | 欧美日韩一级久久久久久免费看 | 黄色一级片视频 | 91精品亚洲影视在线观看 | 黄色一级网 | 美女久久视频 | 伊人色综合网 | 色91在线视频 | 欧美性直播 | 久久久国产影视 | 欧美精彩视频在线观看 | 最近更新好看的中文字幕 | av在线看网站 | 成人avav| 国产麻豆精品一区二区 | 精品国产一区二区三区四区在线观看 | 免费观看性生交大片3 | 国产精品综合在线观看 | 91高清在线 | 99精品在线视频观看 | 精品二区久久 | 97国产情侣爱久久免费观看 | 久久久久女教师免费一区 | 中文字幕一区二区三区四区在线视频 | 香蕉久久久久 | 精品国产一二三 | 天天综合天天做天天综合 | 亚洲免费观看视频 | 日韩av中文在线 | 天天操福利视频 | 国产精品视频999 | 色综合色综合久久综合频道88 | 视频一区二区视频 | 亚洲黄色免费网站 | 国产超碰在线 | 久久久久久97三级 | 精品美女国产在线 | 日日操天天射 | 日本丰满少妇免费一区 | 日韩高清不卡在线 | 亚洲一区二区三区四区在线视频 | 三级黄色片在线观看 | 亚洲国产中文字幕在线观看 | 久久亚洲专区 | 午夜精品福利一区二区 | 天天射天天舔天天干 | 亚洲精品国偷拍自产在线观看 | 久久成年人网站 | 91av在线看 | 欧美日本啪啪无遮挡网站 | 国产精品一区二区美女视频免费看 | 日韩激情中文字幕 | 久久久久久毛片精品免费不卡 | 欧美精品一区二区三区四区在线 | 亚洲在线视频观看 | 午夜精品福利一区二区 | 国产黄色片免费观看 | 狠狠网亚洲精品 | 欧美aa级 | 婷婷色网站 | 永久免费精品视频 | 麻豆一精品传二传媒短视频 | 97夜夜澡人人爽人人免费 | 久久激情视频 久久 | 成人午夜剧场在线观看 | 天天干.com | 久久99热精品这里久久精品 | 中文字幕在线播放日韩 | 免费在线观看一区二区三区 | 欧美aa一级片 | 黄在线 | 狠狠综合久久 | 日韩在线观看第一页 | 丝袜美女视频网站 | 色综合久久88色综合天天人守婷 | 国产精品女同一区二区三区久久夜 | 天堂中文在线视频 | 麻豆视传媒官网免费观看 | 91av手机在线 | 在线免费亚洲 | 亚洲日本中文字幕在线观看 | 中文字幕在线观看第一页 | 中文字幕有码在线观看 | 久久综合丁香 | 色天天综合久久久久综合片 | 中文字幕在线中文 | 国产无吗一区二区三区在线欢 | 麻豆视频免费看 | 国产性xxxx| 最近中文字幕 | 午夜精品剧场 | 午夜免费电影院 | 亚洲理论片在线观看 | av日韩精品 | 最近中文字幕高清字幕免费mv | 黄色aaa毛片| 国产一区二区免费看 | 日韩欧美国产免费播放 | 亚洲一区天堂 | 射射射综合网 | 亚洲中字幕 | 国产18精品乱码免费看 | 欧美福利在线播放 | 国产成人精品一区二三区 | 国产精品亚洲综合久久 | 日韩精品中文字幕在线不卡尤物 | 日韩欧美综合精品 | 超碰精品在线观看 | 国产三级香港三韩国三级 | 美女黄频在线观看 | 97av在线视频免费播放 | 美女网站色在线观看 | 久久网站av | 超碰人人草人人 | 日韩网站在线免费观看 | 欧美一级乱黄 | 国产精品欧美激情在线观看 | 久久网站av | 国产又黄又爽又猛视频日本 | 国产一卡二卡在线 | 精品在线播放视频 | 亚洲国产精品人久久电影 | 又黄又刺激视频 | 欧美日韩99 | 免费一级片观看 | 国产在线视频不卡 | 色婷婷五| 黄色毛片视频 | 久久午夜免费视频 | 久久久男人的天堂 | 五月天.com | 97免费视频在线 | 国产亚洲精品av | 中文字幕91视频 | 日韩欧美在线一区二区 | 岛国一区在线 | 免费在线观看av网址 | 国产精品欧美一区二区 | 九九九毛片 | 国产精成人品免费观看 | 国产成人a亚洲精品 | 久久极品 | 亚洲视频电影在线 | 国产亚洲情侣一区二区无 | 日韩在线观看视频网站 | 国产精品女人久久久 | 日韩成人免费观看 | 久久久午夜视频 | 国产一区在线视频 | 91精品国产福利在线观看 | 99在线热播精品免费 | 欧美成人h版电影 | 91亚洲精 | 成人在线免费av | 国产精品午夜在线观看 | 蜜桃麻豆www久久囤产精品 | 国产在线观看,日本 | 久久久久久久久久久久影院 | 久久热亚洲 | 亚洲第一香蕉视频 | 亚洲一区二区三区精品在线观看 | 91最新在线| 久久久久久综合 | 日韩免费av片 | 麻豆系列在线观看 | 亚洲精品一区二区网址 | 亚洲一级影院 | 国产乱对白刺激视频不卡 | 超碰人人草人人 | 国产成人精品久久久久蜜臀 | 伊甸园永久入口www 99热 精品在线 | 91在线观看欧美日韩 | 99色视频| 国产美女被啪进深处喷白浆视频 | 日韩欧美视频一区 | 91亚洲免费 | 天天干,天天射,天天操,天天摸 | 亚洲精品网址在线观看 | 欧美精品免费一区二区 | 亚洲成人黄色在线观看 | 亚洲四虎影院 | 天天爱天天操 | 亚洲a成人v | 天天色天天射天天综合网 | 精品国产久 | 超碰免费公开 | 激情综合狠狠 | 久久午夜视频 | 国产精品成人自拍 | 成年人黄色在线观看 | 久久久精品久久日韩一区综合 | 日本三级不卡 | 狠狠干夜夜操天天爽 | 国产群p视频 | 久久香蕉国产精品麻豆粉嫩av | 国产999视频在线观看 | 久久久午夜精品理论片中文字幕 | 91精品久久香蕉国产线看观看 | 日韩电影中文字幕在线 | 亚洲精品小区久久久久久 | 日韩大陆欧美高清视频区 | 人人玩人人添人人澡97 | 波多野结衣网址 | 久草影视在线观看 | 日韩欧美一区视频 | 美女黄频网站 | 日本三级久久久 | 亚洲欧美日韩在线看 | 人人躁 | 国产高清在线看 | 日日日日干 | 99精品国产福利在线观看免费 | 91福利视频网站 | 午夜视频色 | 97视频在线观看免费 | av免费在线观看网站 | 亚洲精品乱码久久 | 免费在线播放av电影 | 久久精品99| 在线观看日韩专区 | 欧美 日韩 性 | 日韩网站免费观看 | 国产不卡片 | 麻豆视频在线看 | 久久综合九色综合久久久精品综合 | 91探花在线视频 | 1024手机看片国产 | 91探花视频 | 欧美一级在线观看视频 | 日韩av手机在线观看 | 日韩理论影院 | 日韩视频图片 | 在线免费日韩 | 久久久精品电影 | 免费视频成人 | 欧美午夜久久久 | 一区二区三区韩国免费中文网站 | 国产乱对白刺激视频在线观看女王 | 日韩乱色精品一区二区 | 亚洲欧美乱综合图片区小说区 | 亚洲丁香久久久 | 亚洲第一av在线播放 | 天天干天天拍 | 伊人热 | 成人v| 人人插人人艹 | 欧美xxxxx在线视频 | 亚洲a资源| 久久久999精品视频 国产美女免费观看 | 美女网站在线播放 | 在线亚洲天堂网 | 久久视频免费观看 | 日日弄天天弄美女bbbb | 黄色软件在线看 | 丁香六月五月婷婷 | 麻豆小视频在线观看 | 粉嫩av一区二区三区四区五区 | 美女网站在线看 | 成人一区二区三区在线观看 | 在线观看成人av | 97在线观看视频 | 蜜臀aⅴ国产精品久久久国产 | 天堂视频一区 | 亚洲欧洲日韩在线观看 | a在线观看免费视频 | 日本深夜福利视频 | 99免在线观看免费视频高清 | 精品国产伦一区二区三区观看方式 | 人人草网站 | 日韩欧美高清 | 午夜在线国产 | 国产精品私人影院 | 黄色片免费看 | 国产一区二区日本 | 久久影院一区 | 久久人人爽视频 | www.com在线观看 | 国产亚洲精品久久久久久久久久久久 | 人成免费网站 | 久久精品国产久精国产 | 国产97视频 | 久久婷亚洲五月一区天天躁 | 国产精品午夜久久久久久99热 | 91麻豆精品久久久久久 | 香蕉视频久久 | 欧美成人播放 | 最近中文字幕在线中文高清版 | 欧美另类xxxxx | 激情网站免费观看 | 亚洲免费精品视频 | 91人人澡人人爽人人精品 | 91污污| 国产黄色电影 | 国产精品久久久久久久久久久久久久 | 国产精品 中文字幕 亚洲 欧美 | 国产精品一区二区在线 | 婷婷综合亚洲 | 国产精品久久99综合免费观看尤物 | 精品一区二区免费 | 天堂麻豆 | 日韩欧美第二页 | 久久a国产 | 天天干天天天天 | 五月开心综合 | 国产精品久久久久婷婷二区次 | 国产精品99久久久久的智能播放 | 国产视频网站在线观看 | 日韩在线观看a | 日韩精品一区二区三区水蜜桃 | 少妇av网 | 瑞典xxxx性hd极品 | 国产在线一线 | 国内精品久久久久影院优 | 一级黄色网址 | 欧美在线观看视频一区二区 | 欧美日韩一区二区三区在线观看视频 | 一级黄视频 | 久久草av | 天天干天天射天天爽 | 91在线看 | 成人在线观看网址 | av久久久久久 | 五月婷婷视频在线 | 天天综合网在线观看 | 久久久影院| 久久久91精品国产一区二区三区 | 日韩中文字幕a | 狠狠色狠狠色 | 欧美婷婷色 | 伊人狠狠干 | 97免费在线观看 | 狠狠色综合网站久久久久久久 | 日本激情视频中文字幕 | 国产福利在线免费 | 国产精品少妇 | 国产亚洲婷婷免费 | 日本精品一区二区 | 亚洲h在线播放在线观看h | 国产成人av电影在线 | 亚洲在线色 | 91丨九色丨91啦蝌蚪老版 | 国产精品免费观看网站 | 97精品在线观看 | www.婷婷com| 久久综合中文字幕 | 色婷婷丁香 | 久草电影免费在线观看 | 亚州中文av | av在线免费观看不卡 | 国语精品免费视频 | 不卡视频在线 | 久久国产精品一二三区 | 成人在线视频免费观看 | 香蕉国产91 | av天天在线观看 | 四虎国产精品免费观看视频优播 | 久久久免费看视频 | 99国产精品视频免费观看一公开 | 99视频国产精品免费观看 | 日韩一级片大全 | av黄色国产| 91热这里只有精品 | 天天色天天干天天 | 久久99这里只有精品 | 国产精品久久9 | 久久综合久久综合九色 | 99精品久久久久 | 欧美一级片免费观看 | 五月婷婷久草 | 国产精品永久免费视频 | 久久高清 | 一区二区三区动漫 | 韩国精品视频在线观看 | 色在线视频 | 久久久影视 | 日韩精品无 | 免费看一级一片 | 久草综合视频 | 91精品一区在线观看 | 久久久久久久久久影视 | 99综合电影在线视频 | 午夜视频在线观看网站 | 午夜久久影视 | 婷婷视频在线 | 激情丁香综合五月 | 国产伦理一区二区三区 | 国产精品一区二区三区四区在线观看 | 亚洲国产999 | 欧美日韩久久一区 | 久久久www成人免费毛片麻豆 | 国产精品乱码久久久久久1区2区 | 欧美日韩综合在线 | 欧美精品午夜 | 成人午夜片av在线看 | 午夜精品导航 | 中文av在线免费观看 | 亚洲国产69 | 国产精久久 | 欧美黄色高清 | av在线小说 | 日韩在线二区 | 久久久久久久综合色一本 | 97超碰人人 | 91热这里只有精品 | 国产高清视频在线观看 | 国产精品美女久久久久久免费 | 国产麻豆电影在线观看 | 五月婷婷六月丁香 | 九九热只有这里有精品 | 国产黄色免费观看 | 超碰个人在线 | 日本中文字幕网址 | 亚洲综合丁香 | 国产精品欧美日韩在线观看 | 国产日韩欧美综合在线 | 久久久久一区二区三区 | 亚洲第一av在线播放 | 久久污视频 | 手机在线中文字幕 | 免费av在 | 成年人免费观看在线视频 | 天天拍天天草 | 日韩av成人在线观看 | 午夜视频在线观看一区二区三区 | 69精品人人人人 | 五月天网页 | 日日婷婷夜日日天干 | 亚洲高清国产视频 | av成人免费观看 | 色资源在线 | 日本少妇高清做爰视频 | 九草视频在线观看 | 狠狠色丁香婷婷综合欧美 | 久久黄视频 | 97日日碰人人模人人澡分享吧 | 欧美日韩在线观看视频 | 中文字幕欧美日韩va免费视频 | 国产成人一区二区啪在线观看 | 丁香六月综合网 | 国产色视频网站 | 日日操网站 | 国产精品一区二区三区视频免费 | 色中射| 狠狠狠狠狠狠天天爱 | 久久精品3 | 日韩久久片 | 麻豆免费视频观看 | 国产成人免费在线观看 | 国产专区免费 | 久久综合狠狠综合 | 999久久国产精品免费观看网站 | 色婷婷激婷婷情综天天 | 91精品久久久久久久久久入口 | 91大神免费视频 | 亚洲午夜久久久久久久久电影网 | 在线观看一区视频 | 亚洲 中文字幕av | 婷婷夜夜 | 热久久视久久精品18亚洲精品 | 成人久久免费视频 | 国产中文字幕在线观看 | 五月天丁香亚洲 | 一级做a视频 | 免费看成人a | 婷婷五月色综合 | 99热这里有精品 | 久久成人毛片 | 午夜91视频 | 精品亚洲免费 | 波多野结衣视频一区二区 | 99热亚洲精品 | 天天色中文 | 成人在线观看影院 | 亚洲午夜精品在线观看 | 久久精品激情 | 国产精品久久久精品 | a国产精品 | 精品视频国产一区 | 一区二区三区四区免费视频 | 综合网久久| 欧美特一级 | 日韩一区二区三区不卡 | 亚洲精品白浆高清久久久久久 | 激情综合网色播五月 | av在线免费播放网站 | 国产精品久久久久久久久久久久冷 | 亚洲精品小视频 | 97人人看| 久久久视频在线 | 偷拍精偷拍精品欧洲亚洲网站 | 天堂av影院 | 国产精品乱码久久 | 精品国产视频在线 | 国产一区二区在线免费播放 | 欧美成人在线免费观看 | 亚洲h在线播放在线观看h | 夜夜操网站 | 69欧美视频| 亚洲91av| 最近中文字幕免费大全 | 日日操天天操夜夜操 | 98涩涩国产露脸精品国产网 | 亚洲视频在线观看免费 | 久久九九影院 | 骄小bbw搡bbbb揉bbbb | 亚洲精品国产自产拍在线观看 | 中文字幕第一页在线播放 | 久久精品草 | 日韩精品极品视频 | 蜜桃麻豆www久久囤产精品 | 久久综合9988久久爱 | 国产精品一区二区三区在线免费观看 | 国产流白浆高潮在线观看 | 久久色视频 | 久久深夜 | 美女国产网站 | 欧美 日韩 国产 中文字幕 | 久久精品亚洲综合专区 | 国产91精品一区二区 | 国产精品一区二区在线观看 | 91精品国产福利在线观看 | 97视频在线免费播放 | 欧美一区二区三区在线视频观看 | 久久久久欠精品国产毛片国产毛生 | 精品999 | 在线视频日韩一区 | 国产一区电影在线观看 | 午夜精品一区二区三区免费 | 国产视频精品久久 | 中文字幕二区三区 | 久久精品综合 | 中文字幕在线国产 | 国产亚洲精品久久久久久网站 | 中国一级片在线观看 | 三级黄色免费 | 久久国产精品电影 | 国产精品视频区 | 最新日韩精品 | 久久精品视频免费 | 日韩videos高潮hd | 中文字幕婷婷 | 欧美一区二区三区在线 | 色综合天天天天做夜夜夜夜做 | 亚洲天天草 | 欧美另类人妖 | 久久综合给合久久狠狠色 | 99视 | 亚洲区另类春色综合小说校园片 | 欧美狠狠色 | 亚洲狠狠婷婷综合久久久 | 日日夜夜人人精品 | 成人精品视频久久久久 | 色视频网站在线观看一=区 a视频免费在线观看 | 五月婷婷丁香网 | 久久亚洲欧美 | 日韩欧美精品免费 | 欧美精品三级 | 丁香激情视频 | 人人爱在线视频 | 亚洲视频电影在线 | 国产亚洲精品久久久久久电影 | 在线免费黄色av | 日韩欧美视频一区 | 天天曰视频 | 国产在线观看免费 | 人人干人人上 | 人人超在线公开视频 | 免费又黄又爽视频 | 色欧美综合 | 中文字幕电影在线 | 中文字幕色在线 | 国产四虎在线 | 欧美精品一区在线发布 | 日韩精品免费一区二区在线观看 | 九色福利视频 | 91成人精品视频 | 婷婷在线播放 | 三级av在线免费观看 | 香蕉久草| 欧美日韩视频一区二区三区 | 人人爽人人av| 片网站 | 久久99精品国产麻豆婷婷 | 手机在线黄色网址 | 色夜影院 | 欧美日韩91 | 国产丝袜网站 | 在线观看视频一区二区三区 | 日韩精品综合在线 | 久草视频免费在线播放 | 在线欧美日韩 | 国产成人精品免费在线观看 | 麻豆精品国产传媒 | 免费福利视频网 | 国产999视频 | 欧美激情视频一区 | 久久字幕网| 成年人在线播放视频 | sesese图片| 亚洲一区二区三区91 | 99激情网 | 亚洲电影成人 | 亚洲婷婷综合色高清在线 | 在线观看日韩专区 | 九九九热精品免费视频观看 | sesese图片| 久久综合电影 | 日日夜夜免费精品 | 久久久久高清毛片一级 | 三级在线播放视频 | 成人91在线 | 波多野结衣电影一区二区三区 | 久久视| 国产免费资源 | 国产不卡精品视频 | 日韩在线观看不卡 | 成人国产精品一区 | 午夜精品婷婷 | 欧美性另类 | 久久免费黄色网址 | 久久久久这里只有精品 | 天天操天天操天天爽 | 欧美中文字幕久久 | 私人av| 亚洲一区二区高潮无套美女 | 日日夜夜人人精品 | 国产最顶级的黄色片在线免费观看 | 日日干网| 天躁狠狠躁 | 在线日韩视频 | 欧美精品在线观看免费 | 欧美日韩国产亚洲乱码字幕 | 国产 日韩 欧美 在线 | 久草在线中文888 | 久久久久麻豆v国产 | 亚洲精品午夜久久久 | 久久久国产精品成人免费 | 国产一区在线视频观看 | 午夜精品一区二区三区四区 | 深夜免费小视频 | 最近中文字幕高清字幕在线视频 | 中文字幕日韩免费视频 | 6080yy午夜一二三区久久 | 国产又粗又猛又黄又爽 | 欧美成人一二区 | 中文字幕刺激在线 | 麻豆视屏 | 国产精品一区二区三区99 | 欧美精品久久久久久 | 日韩欧美在线中文字幕 | 国产美女精品 | 国产精品久久久久久久av大片 | 色综合久久久久综合 | 亚洲成年人免费网站 | 黄色三级免费网址 | 99免费在线 | 亚洲激情网站免费观看 | 少妇av片 | 最新成人av| 97精品超碰一区二区三区 | 97国产电影| 国产亚洲综合在线 | 成人免费在线播放视频 | 婷婷5月色 | 国产99在线播放 | 18+视频网站链接 | 日本激情动作片免费看 | 91爱爱免费观看 | 日韩视频一区二区 | 超碰av在线播放 | 天天操天天色天天射 | 在线不卡视频 | 国产一性一爱一乱一交 | 综合亚洲视频 | 亚洲国产中文在线观看 | 视频高清| 国产男女无遮挡猛进猛出在线观看 | 97在线视频观看 | 久久免费精品 | 久久不卡国产精品一区二区 | 性色av免费看 | 国产精品久久一区二区三区, | 国产人免费人成免费视频 | a成人在线| 黄色a在线| 欧美日韩精品在线观看视频 | 视频在线播放国产 | 国产视频精品免费 | 人人艹人人 | 国产视频在 | 中文字幕 国产精品 | 91免费日韩 | 久久国产精品成人免费浪潮 | 亚洲日本一区二区在线 | 91精品国产网站 | aaa日本高清在线播放免费观看 | 中文字幕 二区 | 天天天干天天射天天天操 | 日韩剧情 | 日韩理论视频 | 操高跟美女| 免费美女av| 日韩一区二区三区高清在线观看 | 精品乱码一区二区三四区 | 日韩成人免费在线观看 | 粉嫩aⅴ一区二区三区 | 日韩网站在线 | 中文字幕人成一区 | 丁香午夜婷婷 | 色综合久久久久 | 精品视频免费看 | 97av视频在线观看 | 亚洲欧洲日韩在线观看 | 欧美日本在线视频 | 国产精品视频全国免费观看 | 国产专区一 | av黄色免费网站 | 五月天免费网站 | 久久久99精品免费观看乱色 | 亚洲国产一二三 | 久久久久国产精品www | 中文字幕av免费 | 91国内产香蕉 | 亚洲在线看 | 五月亚洲综合 | 丁香婷婷色综合亚洲电影 | 亚洲欧美成人网 | 日韩久久久久久久久久 | 天天干天天搞天天射 | 天天综合导航 | 免费观看mv大片高清 | 久久99网 | 91麻豆免费版 | 亚洲午夜精品久久久久久久久久久久 | 人人草人人草 | 中文字幕精品www乱入免费视频 | 夜夜操狠狠操 | 精品一二三四在线 | 久久99视频免费 | 欧美精品在线一区 | 韩国av一区二区三区 | 中文字幕av有码 | 成人亚洲欧美 | 日日夜夜人人天天 | www色婷婷com| 麻豆传媒视频观看 | 在线观看一区 | 日日爱影视 | 91丝袜美腿 | 国产精品福利无圣光在线一区 | 亚洲综合欧美激情 | 黄色毛片视频免费 | 国产中的精品av小宝探花 | 久久精品在线视频 | 久久久久久看片 | 免费福利在线观看 | 天天夜夜亚洲 | 久草在线观看视频免费 | 午夜aaaa | 婷婷久久婷婷 | www.av在线.com| 日本久久高清视频 | 九九国产视频 | 91精品久久久久久久久 | 亚洲一区二区天堂 | 日韩乱色精品一区二区 | 96在线| 色婷婷综合久久久久 | 久久高清免费视频 | 水蜜桃亚洲一二三四在线 | 91精品久久久久久久久久入口 | 天天天天天天天天操 | 国产在线视频一区二区三区 | 亚洲日韩精品欧美一区二区 | 国内精品久久久久影院优 | 正在播放国产一区二区 | 成人久久18免费网站麻豆 | 免费在线黄色av | 国产精品一区二区三区视频免费 | 国产成人精品亚洲日本在线观看 | 久久精品直播 | 最近能播放的中文字幕 | 久久精品一二三 | 一区中文字幕 | 国产精品美女www爽爽爽视频 | 欧美无极色| 久草网在线 | 国产精品99久久久精品免费观看 | 午夜在线免费观看 | 日韩av成人免费看 | 天堂av最新网址 | 久久久天天操 | 黄色大全视频 | 91麻豆精品国产91久久久无需广告 | 九九精品久久久 | 在线精品一区二区 | 激情综合中文娱乐网 | 久草视频免费播放 | av福利网址导航 | 高清精品在线 | 久久久久免费精品视频 | 久久精品国产亚洲精品2020 | 国产99黄| 亚洲少妇激情 | 亚洲精品美女久久久久网站 | 一区二区三区日韩视频在线观看 | 欧美日韩不卡在线视频 | 午夜美女视频 | 久久高清片 | 日日夜夜天天射 | 麻豆视频在线免费看 | 黄色av影院| 久久一区二区三区四区 | 免费看v片网站 | 亚洲区另类春色综合小说校园片 | 亚洲成人资源在线观看 | 国产精品高清在线观看 | 五月天伊人 | 手机版av在线 | 亚洲春色奇米影视 | 亚洲色图美腿丝袜 | 日韩电影中文字幕 | 激情视频区 | 在线电影播放 | 久久三级毛片 | 免费观看福利视频 | 日韩mv欧美mv国产精品 | 色婷婷电影| 911av视频|