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

手把手教你分析MySQL死鎖問題

數據庫 MySQL
前幾天跟一位朋友分析了一個死鎖問題,所以有了這篇圖文詳細的博文,哈哈~

 前言

[[322079]]

前幾天跟一位朋友分析了一個死鎖問題,所以有了這篇圖文詳細的博文,哈哈~

 

發生死鎖了,如何排查和解決呢?本文將跟你一起探討這個問題

  • 準備好數據環境
  • 模擬死鎖案發
  • 分析死鎖日志
  • 分析死鎖結果

環境準備

數據庫隔離級別:

 

  1.   mysql> select @@tx_isolation; 
  2.   +-----------------+ 
  3.   | @@tx_isolation  | 
  4.   +-----------------+ 
  5.   | REPEATABLE-READ | 
  6.   +-----------------+ 
  7.   1 row in set, 1 warning (0.00 sec) 

自動提交關閉:

 

  1.   mysql> set autocommit=0; 
  2.   Query OK, 0 rows affected (0.00 sec) 
  3.    
  4.   mysql> select @@autocommit; 
  5.   +--------------+ 
  6.   | @@autocommit | 
  7.   +--------------+ 
  8.   |            0 | 
  9.   +--------------+ 
  10.  1 row in set (0.00 sec) 

表結構:

 

  1.   //id是自增主鍵,name是非唯一索引,balance普通字段 
  2.   CREATE TABLE `account` ( 
  3.    `id` int(11) NOT NULL AUTO_INCREMENT, 
  4.     `namevarchar(255) DEFAULT NULL
  5.     `balance` int(11) DEFAULT NULL
  6.     PRIMARY KEY (`id`), 
  7.     KEY `idx_name` (`name`) USING BTREE 
  8.   ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

表中的數據:

 

模擬并發

開啟兩個終端模擬事務并發情況,執行順序以及實驗現象如下:

 

 

 

 

1)事務A執行更新操作,更新成功

 

  1. mysql> update account set balance =1000 where name ='Wei'
  2. Query OK, 1 row affected (0.01 sec) 

 

2)事務B執行更新操作,更新成功

 

  1. mysql> update account set balance =1000 where name ='Eason' 
  2. Query OK, 1 row affected (0.01 sec) 

 

3)事務A執行插入操作,陷入阻塞~

 

  1. mysql> insert into account values(null,'Jay',100); 

 


這時候可以用

 

  1. select*frominformation_schema.innodb_locks; 

查看鎖情況:

 

 

 

 

 

4)事務B執行插入操作,插入成功,同時事務A的插入由阻塞變為死鎖error。

 

  1. mysql> insert into account values(null,'Yan',100);  
  2. Query OK, 1 row affected (0.01 sec) 

 

 

 

 

 

鎖介紹

在分析死鎖日志前,先做一下鎖介紹,哈哈~

 

 

主要介紹一下兼容性以及鎖模式類型的鎖:

 

 

共享鎖與排他鎖

InnoDB 實現了標準的行級鎖,包括兩種:共享鎖(簡稱 s 鎖)、排它鎖(簡稱 x 鎖)。

  • 共享鎖(S鎖):允許持鎖事務讀取一行。
  • 排他鎖(X鎖):允許持鎖事務更新或者刪除一行。

如果事務 T1 持有行 r 的 s 鎖,那么另一個事務 T2 請求 r 的鎖時,會做如下處理:

  • T2 請求 s 鎖立即被允許,結果 T1 T2 都持有 r 行的 s 鎖
  • T2 請求 x 鎖不能被立即允許

如果 T1 持有 r 的 x 鎖,那么 T2 請求 r 的 x、s 鎖都不能被立即允許,T2 必須等待T1釋放 x 鎖才可以,因為X鎖與任何的鎖都不兼容。

 

 

 

 

意向鎖

  • 意向共享鎖( IS 鎖):事務想要獲得一張表中某幾行的共享鎖
  • 意向排他鎖( IX 鎖):事務想要獲得一張表中某幾行的排他鎖

比如:事務1在表1上加了S鎖后,事務2想要更改某行記錄,需要添加IX鎖,由于不兼容,所以需要等待S鎖釋放;如果事務1在表1上加了IS鎖,事務2添加的IX鎖與IS鎖兼容,就可以操作,這就實現了更細粒度的加鎖。

InnoDB存儲引擎中鎖的兼容性如下表:

 

 

 

 

記錄鎖(Record Locks)

  • 記錄鎖是最簡單的行鎖,僅僅鎖住一行。如: SELECT c1 FROM t WHERE c1=10FOR UPDATE
  • 記錄鎖永遠都是加在索引上的,即使一個表沒有索引,InnoDB也會隱式的創建一個索引,并使用這個索引實施記錄鎖。
  • 會阻塞其他事務對其插入、更新、刪除

記錄鎖的事務數據(關鍵詞:lock_mode X locks rec butnotgap),記錄如下:

 

  1.   RECORD LOCKS space id 58 page no 3 n bits 72 index `PRIMARYof table `test`.`t`  
  2.   trx id 10078 lock_mode X locks rec but not gap 
  3.   Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0 
  4.    0: len 4; hex 8000000a; asc     ;; 
  5.    1: len 6; hex 00000000274f; asc     'O;; 
  6.    2: len 7; hex b60000019d0110; asc        ;; 

間隙鎖(Gap Locks)

  • 間隙鎖是一種加在兩個索引之間的鎖,或者加在第一個索引之前,或最后一個索引之后的間隙。
  • 使用間隙鎖鎖住的是一個區間,而不僅僅是這個區間中的每一條數據。
  • 間隙鎖只阻止其他事務插入到間隙中,他們不阻止其他事務在同一個間隙上獲得間隙鎖,所以 gap x lock 和 gap s lock 有相同的作用。

間隙鎖的事務數據(關鍵詞:gap before rec),記錄如下:

 

  1.   RECORD LOCKS space id 177 page no 4 n bits 80 index idx_name of table `test2`.`account`  
  2.   trx id 38049 lock_mode X locks gap before rec 
  3.   Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  4.    0: len 3; hex 576569; asc Wei;; 
  5.    1: len 4; hex 80000002; asc     ;; 

Next-Key Locks

  • Next-key鎖是記錄鎖和間隙鎖的組合,它指的是加在某條記錄以及這條記錄前面間隙上的鎖。

插入意向鎖(Insert Intention)

  • 插入意向鎖是在插入一行記錄操作之前設置的一種間隙鎖,這個鎖釋放了一種插入方式的信號,亦即多個事務在相同的索引間隙插入時如果不是插入間隙中相同的位置就不需要互相等待。
  • 假設有索引值4、7,幾個不同的事務準備插入5、6,每個鎖都在獲得插入行的獨占鎖之前用插入意向鎖各自鎖住了4、7之間的間隙,但是不阻塞對方因為插入行不沖突。

事務數據類似于下面:

 

  1.   RECORD LOCKS space id 31 page no 3 n bits 72 index `PRIMARYof table `test`.`child` 
  2.   trx id 8731 lock_mode X locks gap before rec insert intention waiting 
  3.   Record lock, heap no 3 PHYSICAL RECORD: n_fields 3; compact format; info bits 0 
  4.    0: len 4; hex 80000066; asc    f;; 
  5.    1: len 6; hex 000000002215; asc     " ;; 
  6.    2: len 7; hex 9000000172011c; asc     r  ;;... 

鎖模式兼容矩陣(橫向是已持有鎖,縱向是正在請求的鎖):

 

 

 

 

如何讀懂死鎖日志?

show engine innodb status

可以用 show engine innodb status,查看最近一次死鎖日志哈~,執行后,死鎖日志如下:

 

  1.   0x243c 
  2.   *** (1) TRANSACTION
  3.   TRANSACTION 38048, ACTIVE 92 sec inserting 
  4.   mysql tables in use 1, locked 1 
  5.   LOCK WAIT 4 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 2 
  6.   MySQL thread id 53, OS thread handle 2300, query id 2362 localhost ::1 root update 
  7.   insert into account values(null,'Jay',100) 
  8.   *** (1) WAITING FOR THIS LOCK TO BE GRANTED: 
  9.   RECORD LOCKS space id 177 page no 4 n bits 80 index idx_name of table `test2`.`account`  
  10.  trx id 38048 lock_mode X locks gap before rec insert intention waiting 
  11.  Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  12.   0: len 3; hex 576569; asc Wei;; 
  13.   1: len 4; hex 80000002; asc     ;; 
  14.   
  15.  *** (2) TRANSACTION
  16.  TRANSACTION 38049, ACTIVE 72 sec inserting, thread declared inside InnoDB 5000 
  17.  mysql tables in use 1, locked 1 
  18.  5 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 2 
  19.  MySQL thread id 52, OS thread handle 9276, query id 2363 localhost ::1 root update 
  20.  insert into account  values(null,'Yan',100) 
  21.  *** (2) HOLDS THE LOCK(S): 
  22.  RECORD LOCKS space id 177 page no 4 n bits 80 index idx_name of table `test2`.`account`  
  23.  trx id 38049 lock_mode X locks gap before rec 
  24.  Record lock, heap no 6 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  25.   0: len 3; hex 576569; asc Wei;; 
  26.   1: len 4; hex 80000002; asc     ;; 
  27.   
  28.  *** (2) WAITING FOR THIS LOCK TO BE GRANTED: 
  29.  RECORD LOCKS space id 177 page no 4 n bits 80 index idx_name of table `test2`.`account`  
  30.  trx id 38049 lock_mode X insert intention waiting 
  31.  Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 
  32.   0: len 8; hex 73757072656d756d; asc supremum;; 
  33.   
  34.  *** WE ROLL BACK TRANSACTION (1) 

我們如何分析以上死鎖日志呢?

第一部分

1)找到關鍵詞TRANSACTION,事務38048

 

 

 

 

2)查看正在執行的SQL

 

  1. insert into account values(null,'Jay',100) 

3)正在等待鎖釋放(WAITING FOR THIS LOCK TO BE GRANTED),插入意向排他鎖(lockmode X locks gap before rec insert intention waiting),普通索引(idxname),物理記錄(PHYSICAL RECORD),間隙區間(未知,Wei);

 

 

 

 

第二部分

1)找到關鍵詞TRANSACTION,事務38049

 

 

2)查看正在執行的SQL

 

 

 

  1. insert into account values(null,'Yan',100) 

3)持有鎖(HOLDS THE LOCK),間隙鎖(lockmode X locks gap before rec),普通索引(index idxname),物理記錄(physical record),區間(未知,Wei);

 

 

 

4)正在等待鎖釋放(waiting for this lock to be granted),插入意向鎖(lockmode X insert intention waiting),普通索引上(index idxname),物理記錄(physical record),間隙區間(未知,+∞);

 

 

 

 

5)事務1回滾(we roll back transaction 1);

查看日志結果

 

 

查看日志可得:

 

 

  • 事務A正在等待的插入意向排他鎖(事務A即日志的事務1,根據insert語句來對號入座的哈),正在事務B的懷里~
  • 事務B持有間隙鎖,正在等待插入意向排它鎖

這里面,有些朋友可能有疑惑,

  • 事務A持有什么鎖呢?日志根本看不出來。它又想拿什么樣的插入意向排他鎖呢?
  • 事務B拿了具體什么的間隙鎖呢?它為什么也要拿插入意向鎖?
  • 死鎖的死循環是怎么形成的?目前日志看不出死循環構成呢?

我們接下來一小節詳細分析一波,一個一個問題來~

死鎖分析

死鎖死循環四要素

 

 

 

 

  • 互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其它進程請求資源,則請求者只能等待,直至占有資源的進程用畢釋放。
  • 請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。
  • 不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
  • 環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。

事務A持有什么鎖呢?它又想拿什么樣的插入意向排他鎖呢?

為了方便記錄,例子用W表示Wei,J表示Jay,E表示Eason哈~

我們先來分析事務A中update語句的加鎖情況~

 

  1. update account set balance =1000 where name ='Wei'

間隙鎖:

  • Update語句會在非唯一索引的name加上左區間的間隙鎖,右區間的間隙鎖(因為目前表中只有name='Wei'的一條記錄,所以沒有中間的間隙鎖~),即(E,W) 和(W,+∞)
  • 為什么存在間隙鎖?因為這是RR的數據庫隔離級別,用來解決幻讀問題用的~

記錄鎖

  • 因為name是索引,所以該update語句肯定會加上W的記錄鎖

Next-Key鎖

  • Next-Key鎖=記錄鎖+間隙鎖,所以該update語句就有了(E,W]的 Next-Key鎖

綜上所述,事務A執行完update更新語句,會持有鎖:

  • Next-key Lock:(E,W]
  • Gap Lock :(W,+∞)

我們再來分析一波事務A中insert語句的加鎖情況

 

  1. insert into account values(null,'Jay',100); 

間隙鎖:

  • 因為Jay(J在E和W之間),所以需要請求加(E,W)的間隙鎖

插入意向鎖(Insert Intention)

  • 插入意向鎖是在插入一行記錄操作之前設置的一種間隙鎖,這個鎖釋放了一種插入方式的信號,即事務A需要插入意向鎖(E,W)

因此,事務A的update語句和insert語句執行完,它是持有了 (E,W]的 Next-Key鎖,(W,+∞)的Gap鎖,想拿到 (E,W)的插入意向排它鎖,等待的鎖跟死鎖日志是對上的,哈哈~

 

事務B擁有了什么間隙鎖?它為什么也要拿插入意向鎖?

同理,我們再來分析一波事務B,update語句的加鎖分析:

 

  1. update account set balance =1000 where name ='Eason'

間隙鎖:

  • Update語句會在非唯一索引的name加上左區間的間隙鎖,右區間的間隙鎖(因為目前表中只有name='Eason'的一條記錄,所以沒有中間的間隙鎖~),即(-∞,E)和(E,W)

記錄鎖

  • 因為name是索引,所以該update語句肯定會加上E的記錄鎖

Next-Key鎖

  • Next-Key鎖=記錄鎖+間隙鎖,所以該Update語句就有了(-∞,E]的 Next-Key鎖

綜上所述,事務B執行完update更新語句,會持有鎖:

  • Next-key Lock:(-∞,E]
  • Gap Lock :(E,W)

我們再來分析一波B中insert語句的加鎖情況

 

  1. insert into account values(null,'Yan',100); 

間隙鎖:

  • 因為Yan(Y在W之后),所以需要請求加(W,+∞)的間隙鎖

插入意向鎖(Insert Intention)

  • 插入意向鎖是在插入一行記錄操作之前設置的一種間隙鎖,這個鎖釋放了一種插入方式的信號,即事務A需要插入意向鎖(W,+∞)

所以,事務B的update語句和insert語句執行完,它是持有了 (-∞,E]的 Next-Key鎖,(E,W)的Gap鎖,想拿到 (W,+∞)的間隙鎖,即插入意向排它鎖,加鎖情況跟死鎖日志也是對上的~

 

 

 

 

 

 

 

 

死鎖真相還原

接下來呢,讓我們一起還原死鎖真相吧~哈哈~

 

 

 

  • 事務A執行完Update Wei的語句,持有(E,W]的Next-key Lock,(W,+∞)的Gap Lock ,插入成功~
  • 事務B執行完Update Eason語句,持有(-∞,E]的 Next-Key Lock,(E,W)的Gap Lock,插入成功~
  • 事務A執行Insert Jay的語句時,因為需要(E,W)的插入意向鎖,但是(E,W)在事務B懷里,所以它陷入心塞~
  • 事務B執行Insert Yan的語句時,因為需要(W,+∞) 的插入意向鎖,但是(W,+∞) 在事務A懷里,所以它也陷入心塞。
  • 事務A持有(W,+∞)的Gap Lock,在等待(E,W)的插入意向鎖,事務B持有(E,W)的Gap鎖,在等待(W,+∞) 的插入意向鎖,所以形成了死鎖的閉環~(Gap鎖與插入意向鎖會沖突的,可以看回鎖介紹的鎖模式兼容矩陣哈~)
  • 事務A,B形成了死鎖閉環后,因為Innodb的底層機制,它會讓其中一個事務讓出資源,另外的事務執行成功,這就是為什么你最后看到事務B插入成功了,但是事務A的插入顯示了Deadlock found ~

總結

最后,遇到死鎖問題,我們應該怎么分析呢?

  • 模擬死鎖場景
  • show engine innodb status;查看死鎖日志
  • 找出死鎖SQL
  • SQL加鎖分析,這個可以去官網看哈
  • 分析死鎖日志(持有什么鎖,等待什么鎖)
  • 熟悉鎖模式兼容矩陣,InnoDB存儲引擎中鎖的兼容性矩陣。

 

責任編輯:華軒 來源: 撿田螺的小男孩
相關推薦

2024-10-16 11:40:47

2021-09-18 14:26:49

Linux Linux 啟動流程Linux 系統

2011-05-03 15:59:00

黑盒打印機

2011-01-10 14:41:26

2025-05-07 00:31:30

2021-07-01 09:31:50

MySQL SQL 語句數據庫

2017-05-18 12:45:35

數據分析數據理解數據

2021-07-14 09:00:00

JavaFX開發應用

2018-03-23 20:45:23

機器學習NLP文本數據

2021-01-19 09:06:21

MysqlDjango數據庫

2011-04-21 10:32:44

MySQL雙機同步

2025-02-26 07:40:25

運營分析體系運營策略

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統

2021-02-26 11:54:38

MyBatis 插件接口

2019-10-22 14:30:11

機器學習人工智能計算機

2021-09-22 08:51:34

Android

2022-11-06 14:46:28

腳本windows文件

2023-04-26 12:46:43

DockerSpringKubernetes

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙
點贊
收藏

51CTO技術棧公眾號

男女视频免费看| 无码国产精品久久一区免费| 国产有码在线| 免费欧美日韩国产三级电影| 久久中国妇女中文字幕| av天堂一区二区| 欧美日韩五码| 亚洲精品成人悠悠色影视| 好吊色欧美一区二区三区四区| 手机看片久久久| 国产精品久久久久蜜臀| 亚洲福利在线播放| 鲁一鲁一鲁一鲁一av| 欧美一卡二卡| 国产精品女同互慰在线看| 粉嫩av四季av绯色av第一区 | 136国产福利精品导航| 国产伦精品一区二区三区四区视频 | 78m国产成人精品视频| 青青青视频在线播放| 国产欧美啪啪| 日韩欧美在线一区二区三区| 中文字幕第36页| 97久久人人超碰caoprom| 国产精品麻豆网站| 免费成人看片网址| 亚洲国产精品久久久久久6q| 久久99精品国产.久久久久久 | 看片一区二区| 色婷婷综合久久久久中文一区二区| 黄色影视在线观看| 18免费在线视频| 久久久综合视频| 国产精品国产精品国产专区蜜臀ah| 在线免费观看一级片| 亚洲综合激情| 精品久久久久久中文字幕一区奶水| 亚洲欧美日韩在线综合| 少妇av一区二区| 国产精品资源在线观看| 国产精品美女在线| 国产又粗又猛又爽又| 麻豆亚洲精品| 51色欧美片视频在线观看| 久久久久久免费观看| 亚洲最大黄网| 久久人体大胆视频| 人与动物性xxxx| 欧美第十八页| 中文字幕日韩视频| 国产在线综合视频| 性欧美lx╳lx╳| 日韩va亚洲va欧洲va国产| 人妻 丝袜美腿 中文字幕| 国产欧美88| 日韩一级片网址| 男人添女人荫蒂国产| 日韩精品一区二区三区中文在线| 51精品国自产在线| 奇米777在线| 精品视频在线播放一区二区三区 | 性欧美一区二区三区| 国产精品一品视频| 国产精品久久久对白| 日本高清视频www| 99久久精品免费看国产免费软件| 国产精品theporn88| 日本黄色不卡视频| 久久久久久久久伊人| 日韩欧美精品在线不卡| 粉嫩av在线播放| 国产精品久久精品日日| 异国色恋浪漫潭| 青草青在线视频| 无吗不卡中文字幕| 人妻丰满熟妇av无码区app| 在线一区视频观看| 欧美老肥妇做.爰bbww| 熟妇女人妻丰满少妇中文字幕| jizz性欧美23| 亚洲美女视频网| 精品在线观看一区| 欧美片第1页综合| 欧美一级大片视频| 一本到在线视频| 成人免费视频免费观看| 欧美精品人人做人人爱视频| av在线第一页| 亚洲黄色免费电影| 欧美 日韩 国产一区| 欧美爱爱视频| 亚洲第一区第二区| 美国精品一区二区| 狠狠88综合久久久久综合网| 日本精品va在线观看| 91精品国自产| 99久久久国产精品| 最新中文字幕久久| 久久电影tv| 日韩精品中午字幕| 少妇av片在线观看| 尤物网精品视频| 国产精品爽黄69天堂a| 亚洲高清精品视频| 中文字幕高清一区| 亚洲熟妇av日韩熟妇在线 | 国产精品国产精品国产专区蜜臀ah| 蜜桃免费在线| 亚洲国产精品视频| 欧美激情第3页| 西野翔中文久久精品国产| 久久成人av网站| 无码人妻久久一区二区三区不卡| 国产成人一区在线| 亚洲人成网站在线播放2019| 青青青免费在线视频| 日韩一区二区三区四区| 性欧美精品男男| 国产偷自视频区视频一区二区| 亚洲一区二区中文| 成年人在线观看| 欧美性猛交xxxx乱大交蜜桃| 美女日批在线观看| 日韩一区欧美| 国产精品99久久99久久久二8| 天堂中文在线看| 一区二区在线看| 小明看看成人免费视频| 国产一区二区三区网| 韩国三级日本三级少妇99| 国产激情视频在线播放| 国产精品久久久久aaaa| 婷婷丁香激情网| 国产亚洲电影| 欧美一区二区三区……| 污污视频在线免费看| 亚洲亚洲人成综合网络| 四虎国产精品免费| 在线观看免费一区二区| 95av在线视频| wwwav在线| 337p亚洲精品色噜噜狠狠| 手机看片国产日韩| 奇米一区二区三区| 亚洲欧洲日韩综合二区| 欧美色网在线| 在线播放国产精品| 中文字幕欧美色图| 中文字幕永久在线不卡| 天天操天天干天天做| 天天操夜夜操国产精品| 成人羞羞国产免费| 中中文字幕av在线| 日韩欧美激情一区| 精品亚洲永久免费| 99热这里都是精品| 久久久精品在线视频| 视频一区在线观看| 国产精品一二三在线| 欧美日韩欧美| 日韩欧美精品在线| 亚州国产精品视频| 久久久久久久久久电影| 欧美性猛交xxx乱久交| 水蜜桃精品av一区二区| 91在线播放国产| 丁香花在线影院| 日韩精品视频在线观看免费| 成人在线免费看视频| 国产日韩在线不卡| 色婷婷一区二区三区在线观看| 欧美 日韩 国产精品免费观看| 丁香五月网久久综合| 神马午夜在线视频| 国产一区二区三区免费视频| 国产精品一区二区av白丝下载| 亚洲美女淫视频| 黄色免费视频网站| 日日骚欧美日韩| 老司机av福利| 国产精品45p| 国产99视频在线观看| 免费在线看黄网站| 日韩av在线看| 一区二区久久精品66国产精品| 一区二区三区欧美| 中国美女乱淫免费看视频| 美腿丝袜亚洲综合| 成人精品视频在线播放| 国产精品一线天粉嫩av| 亚洲自拍偷拍区| 中文字幕在线直播| 久久久国产精品x99av| 天堂在线观看免费视频| 欧美精选午夜久久久乱码6080| 天堂资源在线播放| 国产精品网站在线观看| 国产伦精品一区二区三区精品| 久久亚洲不卡| 国产精品视频网站在线观看| 欧美日韩在线网站| 国产在线欧美日韩| 四虎影视成人精品国库在线观看| 69视频在线免费观看| 2020国产在线视频| 国产一区二区动漫| 日日躁夜夜躁白天躁晚上躁91| 欧美日韩国产一二三| 奇米影视第四色777| 亚洲免费观看视频| 国产sm调教视频| a级精品国产片在线观看| 久久久久久综合网| 玖玖国产精品视频| 久久综合色视频| 欧美日韩国产在线一区| 亚洲欧美日韩精品在线| 国产免费播放一区二区| 国产一区二区不卡视频| 国产午夜精品一区在线观看| 国产精品欧美一区二区| 日韩激情电影免费看| 欧美高清videos高潮hd| 波多野结衣黄色网址| 一区二区三区波多野结衣在线观看| 色欲狠狠躁天天躁无码中文字幕| 不卡欧美aaaaa| 久久久久亚洲av无码网站| 美国三级日本三级久久99| 国产综合免费视频| 亚洲一区二区免费看| 九九热只有这里有精品| 欧美日韩精品一本二本三本| 中文一区一区三区免费| 日韩成人a**站| 视频一区视频二区视频| 图片婷婷一区| 久久人人九九| 亚洲动漫在线观看| 久久久久久草| 亚洲电影男人天堂| 免费一区二区三区| 亚洲精品推荐| 欧美一级二级三级| 精品国产1区| 视频一区亚洲 | 老汉色影院首页| 97国产成人高清在线观看| 一区二区三区四区免费视频| 日产精品一区二区| 正在播放精油久久| 久久综合国产| 国产一级黄色录像片| 欧美伊人影院| 免费看毛片的网址| 日韩午夜在线电影| 黄色一级一级片| 蜜臀精品久久久久久蜜臀| 日日噜噜夜夜狠狠| 久久99精品国产麻豆婷婷| 久久艹这里只有精品| 国产成人aaa| 第四色在线视频| 国产亚洲精品精华液| 国产精品麻豆免费版现看视频| 国产精品国产精品国产专区不蜜| 婷婷伊人五月天| 亚洲午夜av在线| 人人妻人人爽人人澡人人精品| 欧美色区777第一页| 国产黄a三级三级看三级| 亚洲爱爱爱爱爱| 欧美18xxxxx| 色先锋资源久久综合5566| 国产剧情在线| 97人人模人人爽人人喊中文字 | 国产日韩欧美在线播放| 成人全视频免费观看在线看| 91美女片黄在线观| 美日韩黄色大片| 午夜精品一区二区三区四区| 一区二区影院| 亚洲色欲综合一区二区三区| 日精品一区二区| 免费人成视频在线播放| 91蜜桃在线免费视频| 成人无码精品1区2区3区免费看 | 伊人青青综合网站| 18+视频在线观看| 欧美一区二区三区图| 亚洲精品乱码日韩| 国语精品中文字幕| 四季av一区二区三区免费观看| 精品成在人线av无码免费看| 日韩二区三区在线观看| 岛国精品一区二区三区| 欧美国产精品劲爆| 日本少妇在线观看| 欧美日本乱大交xxxxx| 婷婷在线观看视频| 久久综合九色九九| 婷婷综合六月| 国产福利一区二区三区在线观看| 国产欧美日韩在线一区二区| www成人免费| 久久国产精品99久久久久久老狼| 中文在线观看免费视频| 中文字幕日韩av资源站| 国产成人免费看| 日韩写真欧美这视频| 91精彩视频在线播放| 91精品国产色综合久久不卡98口| 青青久久精品| 日本不卡在线观看| 日韩午夜精品| 人妻av一区二区三区| 亚洲欧洲www| 中文字幕理论片| 亚洲美女av在线播放| 国内精彩免费自拍视频在线观看网址| 亚洲xxxxx性| 色综合咪咪久久网| 99视频在线免费| 99re这里只有精品视频首页| 欧美三级日本三级| 欧美精品aⅴ在线视频| 黄色av免费在线观看| 97成人超碰免| 国产精品欧美大片| 国产精品专区在线| 国产高清成人在线| 精品国产乱码久久久久久鸭王1 | 少妇人妻一区二区| 欧美老女人xx| 亚洲成人黄色| 91成人在线视频观看| 精品一区二区在线免费观看| 天天舔天天操天天干| 欧美在线你懂得| 亚洲高清视频免费观看| 日韩av在线网| h片视频在线观看| 国产精品一区二区三区免费观看| 欧美a级片网站| 日本黄色大片在线观看| 亚洲免费看黄网站| 亚洲国产成人在线观看| 久久久久久97| 老汉色老汉首页av亚洲| 久久综合九色综合88i| 99精品一区二区| 天天干在线播放| 亚洲人成电影网站色xx| 日韩一级二级| 伊人久久99| 国产风韵犹存在线视精品| 欧美日韩激情在线观看| 欧美xxxxxxxx| 擼擼色在线看观看免费| 精品九九九九| 久久av一区二区三区| 欧美激情 一区| 538在线一区二区精品国产| 97影院秋霞午夜在线观看| 99在线热播| 宅男噜噜噜66一区二区| 少妇无套高潮一二三区| 欧美精品在线一区二区| wwwav在线| 久久草视频在线看| 肉丝袜脚交视频一区二区| 日本裸体美女视频| 日韩精品一区二区在线| 超级白嫩亚洲国产第一| 欧美三级网色| 国内精品伊人久久久久av影院 | 国产成人精品综合久久久久99 | 97超碰人人草| 久久久久久亚洲精品| 嫩草影视亚洲| 在线播放黄色av| 日韩欧美成人网| 日本不卡在线| 国产乱码一区| 青青国产91久久久久久| 免费一级肉体全黄毛片| 亚洲丝袜一区在线| 成人噜噜噜噜| 国产日韩一区二区在线| 综合久久综合久久| 日韩大片b站免费观看直播| 国产在线精品自拍| 日韩视频二区| 日本高清不卡免费| 日韩高清有码在线| 国产一区二区三区亚洲综合| av免费中文字幕| 一区二区视频在线看| 久热av在线| 国产麻豆日韩|