精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL鎖那些事兒

數(shù)據(jù)庫 MySQL
當數(shù)據(jù)庫中有多個操作需要修改同一數(shù)據(jù)時,不可避免的會產(chǎn)生數(shù)據(jù)的臟讀。這時就需要數(shù)據(jù)庫具有良好的并發(fā)控制能力,這一切在 MySQL 中都是由服務器和存儲引擎來實現(xiàn)的。

本文轉(zhuǎn)載自微信公眾號「碼蟲甲」,作者碼蟲甲。轉(zhuǎn)載本文請聯(lián)系碼蟲甲公眾號。

背景

當數(shù)據(jù)庫中有多個操作需要修改同一數(shù)據(jù)時,不可避免的會產(chǎn)生數(shù)據(jù)的臟讀。這時就需要數(shù)據(jù)庫具有良好的并發(fā)控制能力,這一切在 MySQL 中都是由服務器和存儲引擎來實現(xiàn)的。解決并發(fā)問題最有效的方案是引入了鎖的機制,鎖在功能上分為共享鎖 (shared lock) 和排它鎖 (exclusive lock) 即通常說的讀鎖和寫鎖; 鎖的粒度上分行鎖和表鎖,表級鎖MySQL 里面表級別的鎖有兩種:一種是表鎖,一種是元數(shù)據(jù)鎖(meta data lock,MDL)

行鎖種類

  • Next-Key Lock:鎖定一個范圍,并且鎖定記錄本上;
  • Gap Lock:間隙鎖,鎖定一個范圍,但不包含記錄本上;
  • Record Lock:單個行記錄上的鎖;

加鎖規(guī)則

雖然 MySQL 的鎖各式各樣,但是有些基本的加鎖原則是保持不變的,譬如:快照讀是不加鎖的,更新語句肯定是加排它鎖的,RC 隔離級別是沒有間隙鎖的等等。這些規(guī)則整理如下:

常見語句的加鎖

  • SELECT ... 語句正常情況下為快照讀,不加鎖;
  • SELECT ... LOCK IN SHARE MODE 語句為當前讀,加 S 鎖;
  • SELECT ... FOR UPDATE 語句為當前讀,加 X 鎖;
  • 常見的 DML 語句(如 INSERT、DELETE、UPDATE)為當前讀,加 X 鎖;
  • 常見的 DDL 語句(如 ALTER、CREATE 等)加表級鎖,且這些語句為隱式提交,不能回滾;

表鎖

  • 表鎖(分 S 鎖和 X 鎖)
  • 意向鎖(分 IS 鎖和 IX 鎖)
  • 自增鎖(一般見不到,只有在 innodb_autoinc_lock_mode = 0 或者 Bulk inserts 時才可能有)

行鎖分析

  • 行鎖都是加在索引上的,最終都會落在聚簇索引上;
  • 加行鎖的過程是一條一條記錄加的;

鎖沖突

  • S 鎖和 S 鎖兼容,X 鎖和 X 鎖沖突,X 鎖和 S 鎖沖突;

不同隔離級別下的鎖

  • 上面說 SELECT ... 語句正常情況下為快照讀,不加鎖;但是在 Serializable 隔離級別下為當前讀,加 S 鎖;
  • RC 隔離級別下沒有間隙鎖和 Next-key 鎖

SQL 的加鎖分析

我們使用下面這張 students 表為例,其中 id 為主鍵,no(學號)為二級唯一索引,name(姓名)和 age(年齡)為二級非唯一索引,score(學分)無索引。

我們只分析最簡單的一種 SQL,它只包含一個 WHERE 條件,等值查詢或范圍查詢。雖然 SQL 非常簡單,但是針對不同類型的列,我們還是會面對各種情況:

  • 聚簇索引,查詢命中:UPDATE students SET score = 100 WHERE id = 15;
  • 聚簇索引,查詢未命中:UPDATE students SET score = 100 WHERE id = 16;
  • 二級非唯一索引,查詢命中:UPDATE students SET score = 100 WHERE name = 'Tom';
  • 二級非唯一索引,查詢未命中:UPDATE students SET score = 100 WHERE name = 'John';
  • 無索引:UPDATE students SET score = 100 WHERE score = 22;
  • 聚簇索引,范圍查詢:UPDATE students SET score = 100 WHERE id <= 20;
  • 二級索引,范圍查詢:UPDATE students SET score = 100 WHERE age <= 23;

聚簇索引,查詢命中

語句 UPDATE students SET score = 100 WHERE id = 15 在 RC 和 RR 隔離級別下加鎖情況一樣,都是對 id 這個聚簇索引加 X 鎖,如下:

聚簇索引,查詢未命中

如果查詢未命中記錄,在 RC 和 RR 隔離級別下加鎖是不一樣的,因為 RR 有 GAP 鎖。語句 UPDATE students SET score = 100 WHERE id = 16 在 RC 和 RR 隔離級別下的加鎖情況如下(RC 不加鎖):

二級非唯一索引,查詢命中

如果查詢命中的是二級非唯一索引,在 RR 隔離級別下,還會加 GAP 鎖。語句 UPDATE students SET score = 100 WHERE name = 'Tom' 加鎖如下:

數(shù)一數(shù)上方右圖中的鎖你可能會覺得一共加了 7 把鎖,實際情況不是,要注意的是 (Tom, 37) 上的記錄鎖和它前面的 GAP 鎖合起來是一個 Next-key 鎖,這個鎖加在 (Tom, 37) 這個索引上,另外 (Tom, 49) 上也有一把 Next-key 鎖。那么最右邊的 GAP 鎖加在哪呢?右邊已經(jīng)沒有任何記錄了啊。其實,在 InnoDB 存儲引擎里,每個數(shù)據(jù)頁中都會有兩個虛擬的行記錄,用來限定記錄的邊界,分別是:Infimum Record 和 Supremum Record,Infimum 是比該頁中任何記錄都要小的值,而 Supremum 比該頁中最大的記錄值還要大,這兩條記錄在創(chuàng)建頁的時候就有了,并且不會刪除。上面右邊的 GAP 鎖就是加在 Supremum Record 上。所以說,上面右圖中共有 2 把 Next-key 鎖,1 把 GAP 鎖,2 把記錄鎖,一共 5 把鎖。

二級非唯一索引,查詢未命中

如果查詢未命中記錄,RR 隔離級別會加 GAP 鎖,RC 無鎖。語句 UPDATE students SET score = 100 WHERE name = 'John' 加鎖情況如下:

無索引

如果 WHERE 條件不能走索引,MySQL 會如何加鎖呢?有的人說會在表上加 X 鎖,也有人說會根據(jù) WHERE 條件將篩選出來的記錄在聚簇索引上加上 X 鎖,那么究竟如何,我們看下圖:

在沒有索引的時候,只能走聚簇索引,對表中的記錄進行全表掃描。在 RC 隔離級別下會給所有記錄加行鎖,在 RR 隔離級別下,不僅會給所有記錄加行鎖,所有聚簇索引和聚簇索引之間還會加上 GAP 鎖。

語句 UPDATE students SET score = 100 WHERE score = 22 滿足條件的雖然只有 1 條記錄,但是聚簇索引上所有的記錄,都被加上了 X 鎖。那么,為什么不是只在滿足條件的記錄上加鎖呢?這是由于 MySQL 的實現(xiàn)決定的。如果一個條件無法通過索引快速過濾,那么存儲引擎層面就會將所有記錄加鎖后返回,然后由 MySQL Server 層進行過濾,因此也就把所有的記錄都鎖上了。

聚簇索引,范圍查詢

上面所介紹的各種情況其實都是非常常見的 SQL,它們有一個特點:全部都只有一個 WHERE 條件,并且都是等值查詢。那么問題來了,如果不是等值查詢而是范圍查詢,加鎖情況會怎么樣呢?

SQL 語句為 UPDATE students SET score = 100 WHERE id <= 20,按理說我們只需要將 id = 20、18、15 三條記錄鎖住即可,但是看右邊的圖,在 RR 隔離級別下,我們還把 id = 30 這條記錄以及 (20, 30] 之間的間隙也鎖起來了,很顯然這是一個 Next-key 鎖。

二級索引,范圍查詢

然后我們把范圍查詢應用到二級非唯一索引上來,SQL 語句為:UPDATE students SET score = 100 WHERE age <= 23,加鎖情況如下圖所示:

可以看出和聚簇索引的范圍查詢一樣,除了 WHERE 條件范圍內(nèi)的記錄加鎖之外,后面一條記錄也會加上 Next-key 鎖,這里有意思的一點是,盡管滿足 age = 24 的記錄有兩條,但只有第一條被加鎖,第二條沒有加鎖,并且第一條和第二條之間也沒有加鎖。

metadata lock

元數(shù)據(jù)鎖(meta data lock,MDL)不需要顯式使用,在訪問一個表的時候會被自動加上。MDL 的作用是,保證讀寫的正確性。可以想象一下,如果一個查詢正在遍歷一個表中的數(shù)據(jù),而執(zhí)行期間另一個線程對這個表結(jié)構(gòu)做變更,刪了一列,那么查詢線程拿到的結(jié)果跟表結(jié)構(gòu)對不上,肯定是不行的。因此,在 MySQL 5.5 版本中引入了 MDL,當對一個表做增刪改查操作的時候,加 MDL 讀鎖;當要對表做結(jié)構(gòu)變更操作的時候,加 MDL 寫鎖。讀鎖之間不互斥,因此可以有多個線程同時對一張表增刪改查。讀寫鎖之間、寫鎖之間是互斥的,用來保證變更表結(jié)構(gòu)操作的安全性,因此,如果有兩個線程要同時給一個表加字段,其中一個要等另一個執(zhí)行完才能開始執(zhí)行。

雖然 MDL 鎖是系統(tǒng)默認會加的,但卻是你不能忽略的一個機制,比如下面這個例子,經(jīng)常看到有人掉到這個坑里:給一個小表加個字段,導致整個庫掛了。你肯定知道,給一個表加字段,或者修改字段,或者加索引,需要掃描全表的數(shù)據(jù)。在對大表操作的時候,需要特別小心,以免對線上服務造成影響。而實際上,即使是小表操作不慎也會出問題。

我們來看一下下面的操作序列,假設表 t2 是一個小表。備注:這里的實驗環(huán)境是 MySQL 5.7

Session a

Session b

Session c

Session d

begin;

 select * from t2 limit 1;





 select * from t2 limit 1;





alter table t2 add f int;(blocked)





select * from t2 limit 1;(blocked)

我們可以看到 session A 先啟動,這時候會對表 t加一個 MDL 讀鎖。由于 session B 需要的也是MDL 讀鎖,因此可以正常執(zhí)行

之后 session C 會被 blocked,是因為 session A 的 MDL 讀鎖還沒有釋放,而 session C 需要 MDL 寫鎖,因此只能被阻塞。

如果只有 session C 自己被阻塞還沒什么關(guān)系,但是之后所有要在表 t 上新申請 MDL 讀鎖的請求也會被session C 阻塞。前面我們說了,所有對表的增刪改查操作都需要先申請 MDL 讀鎖,就都被鎖住,等于這個表現(xiàn)在完全不可讀寫了。

如果某個表上的查詢語句頻繁,而且客戶端有重試機制,也就是說超時后會再起一個新 session 再請求的話,這個庫的線程很快就會爆滿。

解決長事務,事務不提交,就會一直占著 MDL 鎖;

Online DDL的過程是這樣的:

1. 拿MDL寫鎖

2. 降級成MDL讀鎖

3. 真正做DDL

4. 升級成MDL寫鎖

5. 釋放MDL鎖

1、2、4、5如果沒有鎖沖突,執(zhí)行時間非常短。第3步占用了DDL絕大部分時間,這期間這個表可以正常讀寫數(shù)據(jù),是因此稱為“online ”

我們上面的例子,是在第一步就堵住了,拿不到MDL寫鎖

在MySQL中使用 create table2 as select * from table1時,語句執(zhí)行完成之前 table1的mdl鎖不會釋放,且因持續(xù)持有S鎖造成阻塞table1寫操作;

insert into table1 select * from table2

在MySQL中使用insert into table1 select * from table2時,會對table2進行加鎖,這個加鎖分以下幾種情況:

1.后面不帶查詢條件,不帶排序方式

insert into table1 select * from table2: 此時MySQL是逐行加鎖,每一行都鎖

2.查詢使用主鍵排序

insert into table1 select * from table2 order by id: 使用主鍵排序時,MySQL逐行加鎖,每一行都鎖

3.使用非主鍵排序

insert into table1 select * from table2 order by modified_date:使用非主鍵排序時,MySQL鎖整個表

4.在查詢條件中使用非主鍵篩選條件,

insert into table1 select * from table2 where modified_date>='2017-10-01 00:00:00'

使用非主鍵篩選條件時,MySQL逐行加鎖,每一行都鎖

結(jié)論:該句式導致寫阻塞

建議:select ...outfile是不阻塞dml操作的,可以用select...into outfile 和 load data infile 的組合來代替insert...select完成插入操作。

實際場景中如何避免鎖的資源競爭

讓 SELECT 速度盡量快,盡量減少大的復雜的Query,將復雜的Query分拆成幾個小的Query分步進行;

盡可能地建立足夠高效的索引,讓數(shù)據(jù)檢索更迅速;

使用EXPLAIN SELECT來確定對于你的查詢中使用的索引跟預期一致

死鎖案例

案例1

Session a

Session b

update students set score=100 where id=20;



 pdate students set score=100 where id=30;

 update students set score=100 where id=30;



 update students set score=100 where id=20;

死鎖的根本原因是有兩個或多個事務之間加鎖順序的不一致導致的,這個死鎖案例其實是最經(jīng)典的死鎖場景。

首先,事務 A 獲取 id = 20 的鎖(lock_mode X locks rec but not gap),事務 B 獲取 id = 30 的鎖;然后,事務 A 試圖獲取 id = 30 的鎖,而該鎖已經(jīng)被事務 B 持有,所以事務 A 等待事務 B 釋放該鎖,然后事務 B 又試圖獲取 id = 20 的鎖,這個鎖被事務 A 占有,于是兩個事務之間相互等待,導致死鎖。

案例2

Session aSession b

update students set score=100 where id<30; update students set score=100 where age>23;

這個案例里每個事務都只有一條 SQL 語句,但可能會導致死鎖問題,其實說起來,這個死鎖和案例一并沒有什么區(qū)別,只不過理解起來要更深入一點。要知道在范圍查詢時,加鎖是一條記錄一條記錄挨個加鎖的,所以雖然只有一條 SQL 語句,如果兩條 SQL 語句的加鎖順序不一樣,也會導致死鎖。

在案例一中,事務 A 的加鎖順序為:id = 20 -> 30,事務 B 的加鎖順序為:id = 30 -> 20,正好相反,所以會導致死鎖。這里的情景也是一樣,事務 A 的范圍條件為 id < 30,加鎖順序為:id = 15 -> 18 -> 20,事務 B 走的是二級索引 age,加鎖順序為:(age, id) = (24, 18) -> (24, 20) -> (25, 15) -> (25, 49),其中,對 id 的加鎖順序為 id = 18 -> 20 -> 15 -> 49。可以看到事務 A 先鎖 15,再鎖 18,而事務 B 先鎖 18,再鎖 15,從而形成死鎖。

如何避免死鎖

如上面的案例一和案例二所示,對索引加鎖順序的不一致很可能會導致死鎖,所以如果可以,盡量以相同的順序來訪問索引記錄和表。在程序以批量方式處理數(shù)據(jù)的時候,如果事先對數(shù)據(jù)排序,保證每個線程按固定的順序來處理記錄,也可以大大降低出現(xiàn)死鎖的可能;

為表添加合理的索引,如果不走索引將會為表的每一行記錄加鎖,死鎖的概率就會大大增大;

避免大事務,盡量將大事務拆成多個小事務來處理;因為大事務占用資源多,耗時長,與其他事務沖突的概率也會變高;

避免在同一時間點運行多個對同一表進行讀寫的腳本,特別注意加鎖且操作數(shù)據(jù)量比較大的語句;我們經(jīng)常會有一些定時腳本,避免它們在同一時間點運行;

設置鎖等待超時參數(shù):innodb_lock_wait_timeout(默認50s),這個參數(shù)并不是只用來解決死鎖問題,在并發(fā)訪問比較高的情況下,如果大量事務因無法立即獲得所需的鎖而掛起,會占用大量計算機資源,造成嚴重性能問題,甚至拖跨數(shù)據(jù)庫。我們通過設置合適的鎖等待超時閾值,可以避免這種情況發(fā)生。


責任編輯:武曉燕 來源: 碼蟲甲
相關(guān)推薦

2021-04-29 10:30:58

MySQL數(shù)據(jù)遷移

2011-02-25 14:35:00

2018-09-26 06:50:19

2021-06-02 08:33:31

TPCTPC-H系統(tǒng)

2013-12-26 14:23:03

定位系統(tǒng)GPS監(jiān)測

2021-06-09 13:28:40

密碼安全身份認證數(shù)據(jù)安全

2022-06-20 05:40:25

數(shù)據(jù)庫MySQL查詢

2012-03-12 13:55:22

交互設計

2022-05-23 08:34:08

微前端微服務開發(fā)

2022-05-13 14:36:12

網(wǎng)絡犯罪網(wǎng)絡攻擊密碼

2017-08-21 17:00:55

2017-05-18 16:30:29

Linux內(nèi)存管理

2010-09-14 11:36:24

上網(wǎng)行為管理網(wǎng)絡安全網(wǎng)康科技

2022-04-13 10:03:59

性能優(yōu)化性能分析工具JVM

2022-10-08 00:02:00

CSS工具系統(tǒng)

2016-03-02 09:34:03

runtime消息ios開發(fā)

2022-04-08 09:47:55

性能優(yōu)化開發(fā)

2019-11-20 10:00:56

開源侵權(quán)版權(quán)

2022-02-18 19:24:15

性能優(yōu)化代碼

2023-04-11 07:34:40

分布式系統(tǒng)算法
點贊
收藏

51CTO技術(shù)棧公眾號

1区2区3区在线视频| 乐播av一区二区三区| 日本在线视频站| 国产高清不卡一区| 久久视频一区二区| 欧美日韩激情在线| 中文字幕人成一区| 熟妇人妻一区二区三区四区| 国产精品婷婷| 久久亚洲春色中文字幕| 国外成人免费在线播放| 日韩av影视大全| 91色在线看| 中文字幕日韩av资源站| 极品尤物一区二区三区| 在线免费观看高清视频| 一区二区三区导航| 久久精品中文字幕电影| 在线观看日韩精品视频| 国产 日韩 欧美| 91黄色激情网站| 久久综合久久网| 久久久久久国产精品免费无遮挡 | 好吊妞视频这里有精品| 欧美日韩国产综合一区二区| 欧日韩免费视频| 欧美激情黑人| 国产日韩欧美精品一区| 精品国产_亚洲人成在线| 国产精品欧美激情在线| 日欧美一区二区| 欧美在线视频免费| 四虎成人精品永久免费av| 婷婷六月综合| 色偷偷888欧美精品久久久| 久久精品国产亚洲AV熟女| 香港久久久电影| 91精品国产麻豆| 一区二区三区 欧美| 欧美性猛交xxx高清大费中文| 亚洲伊人色欲综合网| 中文字幕日韩一区二区三区不卡| 精彩国产在线| 久久久精品tv| 欧美不卡三区| 欧美孕妇性xxxⅹ精品hd| 成年人国产精品| 国产色综合一区二区三区| 亚洲免费国产视频| 成人中文字幕在线| 国产精成人品localhost| 国产高清免费观看| 素人啪啪色综合| 欧美天天综合色影久久精品| 男人添女荫道口图片| 欧美xxxx免费虐| 亚洲影视资源网| 亚洲 自拍 另类小说综合图区| 少妇av在线播放| 豆花视频一区二区| 精品国产自在久精品国产| 亚洲图片 自拍偷拍| 95精品视频| 欧美一区二区成人6969| 欧美视频亚洲图片| 亚洲欧美日本国产| 亚洲大胆人体在线| 波多野结衣av在线免费观看| 香蕉久久夜色精品国产更新时间| 精品视频在线观看日韩| 色哟哟精品观看| 99成人超碰| 欧美激情欧美激情| 欧美激情黑白配| 日产国产欧美视频一区精品| 国产精品影院在线观看| 国产亲伦免费视频播放| 成人性视频免费网站| 久久福利电影| 99视频在线看| 国产精品亚洲视频在线观看| 美国av在线播放| 黄色免费在线观看| 亚洲综合久久久| 国产中文字幕二区| 97成人超碰| 日韩欧美中文一区二区| 捆绑裸体绳奴bdsm亚洲| 国产精品最新| 欧美成在线观看| 在线能看的av| 久久福利视频一区二区| 国产精品国产三级国产专区53| 色视频在线观看福利| 中文字幕亚洲一区二区va在线| 喜爱夜蒲2在线| 中文字幕高清在线播放| 欧美挠脚心视频网站| 中文字幕第3页| 日韩欧美国产精品综合嫩v| 国产精品欧美一区二区三区| 中文字幕欧美日韩一区二区| 97人澡人人添人人爽欧美| 日本福利一区二区| 国内精品免费视频| 日韩在线观看电影完整版高清免费悬疑悬疑| 久久福利网址导航| 日韩免费av网站| 国产91在线看| 一区二区三区电影| 蜜桃视频www网站在线观看| 欧美日韩另类一区| a级在线观看视频| 午夜精品免费| 国产欧美一区二区三区视频| 手机看片国产1024| 国产精品久久久久影院色老大| 婷婷无套内射影院| 国产精品欧美一区二区三区不卡| 日韩av有码在线| 欧美黑人一级片| 美国十次了思思久久精品导航| 精品日本一区二区| 欧美videosex性欧美黑吊| 欧美日韩一区国产| 精品人妻无码一区二区三区| 狠狠综合久久av一区二区老牛| 国产精品久久久久影院日本| 五月天婷婷社区| 亚洲一区二区av在线| 手机免费看av网站| 日韩久久电影| 国产精品青青在线观看爽香蕉| 天天爽夜夜爽夜夜爽| 一区二区三区不卡在线观看| 91 在线视频观看| 日韩国产综合| 国产精品成人aaaaa网站| 四虎在线免费观看| 欧美日韩另类视频| 精品夜夜澡人妻无码av| 亚洲一区观看| 久久精品丝袜高跟鞋| 波多野一区二区| 亚洲国模精品一区| 日本一区二区欧美| 成人午夜激情影院| 丝袜人妻一区二区三区| 国产精品xxxav免费视频| 欧美高清在线播放| 亚洲经典一区二区三区| 亚洲国产综合人成综合网站| 美女日批在线观看| 黄色亚洲精品| 好看的日韩精品| 中文字幕在线视频网站| 亚洲欧美国产日韩中文字幕| 亚洲欧美一区二区三区在线观看| 久久亚洲综合av| 91av在线免费播放| 日韩精品看片| 亚洲永久在线观看| 2021天堂中文幕一二区在线观| 亚洲成人网在线观看| 久久青青草视频| 欧美激情一区二区三区四区| www午夜视频| 综合亚洲视频| 久久精品人成| 成人做爰视频www| 超薄丝袜一区二区| 色婷婷av一区二区三区之红樱桃| 欧美性生交xxxxx久久久| 精品无码国产污污污免费网站 | 国产日韩欧美精品在线观看| 激情视频极品美女日韩| 欧美综合激情网| 午夜激情视频在线观看| 日韩欧美一卡二卡| 免费在线不卡视频| 国产精品毛片大码女人| 性生活在线视频| 亚洲一区二区三区免费在线观看| 色涩成人影视在线播放| 欧美视频二区欧美影视| 18性欧美xxxⅹ性满足| 天天综合视频在线观看| 欧美va亚洲va在线观看蝴蝶网| 国产成人无码精品久久久久| 一区二区三区四区视频免费观看| 欧美日韩电影在线观看| 外国精品视频在线观看 | 91精品xxx在线观看| 国产亚洲综合久久| 国产成人精品一区二三区四区五区 | 91精品国产一区二区人妖| 久久国产精品系列| 中文字幕一区三区| 真人bbbbbbbbb毛片| 国产一区二区三区久久久| 国产男女无遮挡| 亚洲一区欧美| 视频三区二区一区| 国产91精品入| 97超碰资源| 992tv国产精品成人影院| 性欧美亚洲xxxx乳在线观看| 欧美尤物美女在线| 亚洲欧美激情视频| 亚洲AV无码乱码国产精品牛牛 | 永久免费黄色片| 免费在线观看视频一区| 你真棒插曲来救救我在线观看| 日韩三级在线| 欧美高清视频一区| 国产精伦一区二区三区| 亚洲tv在线观看| 黄色精品视频网站| 日本乱人伦a精品| √最新版天堂资源网在线| 色黄久久久久久| 亚洲日本va中文字幕| 欧美视频在线一区二区三区| 欧美黑人一级片| 中文字幕在线观看不卡| 18禁裸乳无遮挡啪啪无码免费| 在线天堂新版最新版在线8| 国产亚洲精品美女| 青青草超碰在线| 亚洲二区中文字幕| 亚洲经典一区二区三区| 日韩亚洲电影在线| 国产手机视频在线| 制服丝袜日韩国产| 91成品人影院| 欧美丰满美乳xxx高潮www| 成人小视频在线播放| 一本在线高清不卡dvd| 99热在线观看免费精品| 亚洲电影在线免费观看| 久久久久久国产精品免费播放| 最新国产精品久久精品| 农村老熟妇乱子伦视频| 国产精品美女久久久久久| 日本理论中文字幕| 国产精品美女久久久久高潮| 亚洲欧美卡通动漫| 综合网在线视频| 色哟哟免费网站| 欧美78videosex性欧美| 日韩有码在线播放| 美女黄视频在线观看| 日韩在线观看你懂的| 中文字幕欧美人妻精品一区| 性8sex亚洲区入口| av天堂永久资源网| 久久伊人亚洲| 粉色视频免费看| 国产一区二区三区视频在线播放| 中文字幕精品一区二区三区在线| 亚洲电影男人天堂| 久久国产精品-国产精品| 日韩精选在线| 日韩欧美精品在线不卡| 久久激情电影| 精品欧美一区二区在线观看| 亚洲精品久久久久久动漫器材一区| 日韩精品一区二区三区蜜臀 | 欧美乱妇15p| 99精品久久久久久中文字幕| 欧美不卡一区二区三区四区| 色网站免费观看| 亚洲天堂av综合网| 免费在线观看黄| 欧美交受高潮1| 成人影院大全| 成人性生交xxxxx网站| 成人h动漫免费观看网站| 久久久久久国产精品mv| 久久精品国产大片免费观看| 草草草视频在线观看| 国产精品毛片一区二区三区| 五月婷婷丁香综合网| 国产69精品久久久久777| 国产精品无码一区二区三区免费 | 中文字幕在线观看精品| 日韩欧美你懂的| 黄色av网址在线免费观看| 久久香蕉国产线看观看av| 国产社区精品视频| 国产欧美精品一区二区三区介绍| 9l视频自拍九色9l视频成人| 日本高清不卡三区| 亚洲精品一区| 成人激情视频在线| 西野翔中文久久精品字幕| 激情视频小说图片| 玖玖精品视频| 性高潮免费视频| 中文字幕制服丝袜成人av| 日韩免费不卡视频| 91麻豆精品国产| 国产免费av高清在线| 午夜精品久久久久久久久久久久久| 69堂精品视频在线播放| 国模精品娜娜一二三区| 亚洲最大av| 91激情视频在线| av爱爱亚洲一区| 免费看一级一片| 欧美久久久一区| 国产在线一二| 2020国产精品视频| 国模精品视频| 92国产精品视频| 99国产精品免费视频观看| 50路60路老熟妇啪啪| 北条麻妃国产九九精品视频| www.xxxx日本| 欧美日韩亚州综合| 久草视频视频在线播放| 91产国在线观看动作片喷水| 日韩高清一区| 一区二区三区视频| 奇米影视在线99精品| 四虎永久免费在线观看| 福利微拍一区二区| a在线播放不卡| 久久人妻少妇嫩草av蜜桃| 国产女主播一区| 色屁屁影院www国产高清麻豆| 精品少妇一区二区三区在线视频| 欧美三级黄网| 国产精品久久久久免费a∨大胸| 日韩最新在线| 人妻熟妇乱又伦精品视频| 国产成人无遮挡在线视频| 午夜精品一区二区三级视频| 欧美日韩一区二区三区不卡| 欧美激情麻豆| 国产大尺度在线观看| 肉色丝袜一区二区| 久久久久久亚洲中文字幕无码| 激情av一区二区| 婷婷久久久久久| 欧美一级高清免费| 午夜激情在线观看| 国产91在线播放| 蜜桃国内精品久久久久软件9| 国产欧美日韩网站| 99视频国产精品| 国产污污视频在线观看| 精品亚洲一区二区三区在线播放| 日韩伦理精品| 日韩aⅴ视频一区二区三区| 级毛片内射视频| 国产精品久久久久久久裸模| 波多野结衣爱爱| 国产一区二区三区在线视频| 自拍偷拍亚洲视频| 日本一区二区三区精品视频| 丝袜美腿亚洲综合| 69xxx免费| 91精品国产一区二区三区| 女同一区二区免费aⅴ| 国产二区一区| 一区二区三区**美女毛片| 国产成人无码一区二区在线观看| 亚洲线精品一区二区三区八戒| 懂色av一区二区三区四区| 性视频1819p久久| 亚洲自拍电影| 日本在线播放一区二区| 亚洲视频免费在线| 少妇av在线播放| 国产精品久久久久久影视| 欧美777四色影| 精品夜夜澡人妻无码av| 欧美日韩国产中文| 日本在线视频中文有码| 免费h精品视频在线播放| 久久精品国产一区二区三| 无码人妻精品一区二区三区夜夜嗨| 日韩视频在线你懂得| 中文字幕在线高清| 熟妇熟女乱妇乱女网站| 99久久精品国产导航| 中文字幕777| 欧美精品videos性欧美| 国产精品自拍区| 香蕉视频免费网站| 欧美亚洲一区二区在线观看| 日本高清成人vr专区| 日韩精品在线私人| 午夜av不卡| 青草全福视在线| 久久精品视频在线免费观看| 国产91视频在线| 欧洲成人免费视频| 国内精品福利|