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

【MySQL死鎖終結者】5分鐘徹底解決數據庫"卡死"難題!

數據庫 其他數據庫 MySQL
對于讀寫事務來說,只有在它第一次對某個表執行增刪改操作時,才會為這個事務分配一個事務id,否則是不分配事務 id 的。 有時,雖然我們開啟了一個讀寫事務,但是這個事務中全是查詢語句,并沒有執行增刪改操作的語句,這也就意味著這個事務并不會被分配一個事務id。

1、找到并確定你的死鎖日志

方式1:基于MySQL錯誤日志

方式2:基于SHOW ENGINE INNODB STATUS命令查看最近發生的死鎖日志

方式3:咨詢你的DBA吧!

2、分析你的死鎖日志

  • 確定死鎖發生的時間
  • 確定死鎖發生的順序
  • 確定死鎖發生的位置以及觸發的SQL內容

3、確定死鎖原因

  • MySQL順序加鎖順序解鎖(公平鎖)
  • 死鎖日志中出現的鎖,不論是等待的鎖,還是持有的,都是每個事務已經擁有的鎖結構

4、拓展:特殊情況加鎖引起的死鎖

?? 是不是每次看到死鎖日志就頭大?

?? 明明只是簡單的INSERT操作,數據庫卻神秘"卡死"?

看完本文,讓你3步快速定位死鎖原因!

1、找到并確定你的死鎖日志

方式1:基于MySQL錯誤日志

  • 進入MySQL
  • 檢查innodb_print_all_deadlocks變量:
SHOW VARIABLES LIKE 'innodb_print_all_deadlocks';
  • 如果innodb_print_all_deadlocks變量的值為OFF,則需要將其設置為ON以開啟死鎖日志。
SET GLOBAL innodb_print_all_deadlocks = 1;
  • 退出MySQL,查看下面的日志
/usr/local/mysql/data/mysqld.local.err

方式2:基于SHOW ENGINE INNODB STATUS命令查看最近發生的死鎖日志

輸入該命令后,你需要去輸出的信息中找到如下關鍵字

------------------------ 
LATEST DETECTED DEADLOCK 
------------------------

后面的內容即是最近一次發生的死鎖的內容

方式3:咨詢你的DBA吧!

專業的事情交給專業的人來!DBA會幫你找到最近的死鎖信息的!

2、分析你的死鎖日志

現在我們已經拿到了死鎖日志

2025-04-19 13:39:45 0x3079da000
*** (1) TRANSACTION:
TRANSACTION 10047, 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 8, OS thread handle 13013229568, query id 113 localhost root updating
DELETE FROM t1 WHERE i = 1
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 44 page no 3 n bits 72 index PRIMARY of table `itsuka`.`t1` trx id 10047 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 00000000273e; asc     >;;
 2: len 7; hex ad000001210110; asc     !  ;;

*** (2) TRANSACTION:
TRANSACTION 10048, ACTIVE 21 sec starting index read
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 6, OS thread handle 13012672512, query id 114 localhost root updating
DELETE FROM t1 WHERE i = 1
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 44 page no 3 n bits 72 index PRIMARY of table `itsuka`.`t1` trx id 10048 lock mode S locks rec but not gap
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 00000000273e; asc     >;;
 2: len 7; hex ad000001210110; asc     !  ;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 44 page no 3 n bits 72 index PRIMARY of table `itsuka`.`t1` trx id 10048 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 00000000273e; asc     >;;
 2: len 7; hex ad000001210110; asc     !  ;;

*** WE ROLL BACK TRANSACTION (1)

通常我們拿到的死鎖日志如上所示

接下來我們要做的事情包括:

(1)確定死鎖發生的時間

2025-04-19 13:39:45 0x3079da000
*** (1) TRANSACTION:

首先,我們基于死鎖日志了解到死鎖發生在2025-04-19 13:39:45分。再根據我們的業務日志,即可確定本次死鎖的日志內容。

(2)確定死鎖發生的順序

在上面的例子中,發生死鎖的兩個事務分別是10047號事務 (1) TRANSACTION

*** (1) TRANSACTION:
TRANSACTION 10047, ACTIVE 10 sec starting index read

發生死鎖時, (1) TRANSACTION已經進行了10秒的索引查詢動作。

以及10048號事務(2) TRANSACTION

*** (2) TRANSACTION:
TRANSACTION 10048, ACTIVE 21 sec starting index read

發生死鎖時,(2) TRANSACTION已經進行了21秒的索引查詢動作。

我們知道,事務ID是順序增加的,更大的事務ID意味著更晚分配事務ID。

那么有的同學就有疑問了,為什么 (2) TRANSACTION后于 (1) TRANSACTION創建,線程的執行時間卻更長呢。

那是因為,對于讀寫事務來說,只有在它第一次對某個表執行增刪改操作時,才會為這個事務分配一個事務id,否則是不分配事務 id 的。 有時,雖然我們開啟了一個讀寫事務,但是這個事務中全是查詢語句,并沒有執行增刪改操作的語句,這也就意味著這個事務并不會被分配一個事務id。 因此,雖然有時運行的時間長,反而后分配了事務ID。

基于事務ID的大小,我們可以確定, (2) TRANSACTION后于 (1) TRANSACTION:分配事務ID,但是(2) TRANSACTION更早運行。

(3)確定死鎖發生的位置以及觸發的SQL內容

我們現在回到死鎖日志。

MySQL thread id 8, OS thread handle 13013229568, query id 113 localhost root updating
DELETE FROM t1 WHERE i = 1

這兩行提示了死鎖發生時當前事務執行的sql內容。

死鎖發生時正在執行一條delete語句。

接著往下看。

*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 44 page no 3 n bits 72 index PRIMARY of table `itsuka`.`t1` trx id 10047 lock_mode X locks rec but not gap waiting

這里展示了死鎖發生時等待的鎖的位置與內容 本次死鎖發生在PRIMARY即主鍵索引行,死鎖的表為‘itsuka’庫的‘t1’表,并且正在等待一個‘lock_mode X locks rec but not gap waiting’鎖。

那么‘lock_mode X locks rec but not gap waiting’鎖是一個什么東西呢?

數據庫中鎖的類型大家都很熟悉,這里就不做介紹。只給出日志中各種鎖對應的關鍵字:

鎖類型

關鍵字

記錄鎖(LOCK_REC_NOT_GAP)

lock_mode X locks rec but not gap

間隙鎖(LOCK_GAP)

lock_mode X locks gap before rec

Next-key 鎖(LOCK_ORNIDARY)

lock_mode X

插入意向鎖(LOCK_INSERT_INTENTION)

lock_mode X locks gap before rec insert intention

基于此,我們可以確定,死鎖發生時,10047號事務 (1) TRANSACTION,正在等待一個主鍵索引上的排他記錄鎖

那么等待的鎖的具體內容是什么呢,或者說,他正在等待誰呢,我們接著往下看

Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 00000000273e; asc     '>;;
 2: len 7; hex ad000001210110; asc     !  ;;

這一段,表示等待的鎖的具體信息,包括一些行的物理存儲位置信息。

  • 針對主鍵索引來著,這里保存的內容是

列編號

內容

0

主鍵值

1

事務ID

2

回滾段指針

3

第二列值

4

第三列值

5

第四列值

.....

以此類推

對應到上面的案例只有0、1、2的原因是,我的測試表的結構為

CREATE TABLE `t1`(
    `i` int(11) NOT NULL,
    PRIMARY KEY (`i`)
) ENGINE = InnoDB

因為只有主鍵列,自然就沒有后續的其他內容。對于更加復雜的表,我們也許會看到類似如下的信息:

imageimage

原理是一樣的,事務ID 和 回滾段指針 列不需要過多關注,這里不展開說明。

那么,我們如何把其中對應的數值解析出來呢。

針對有符號數值型存儲,MySQL為了確保正數的數值一定大于負數,因此會將每一個數值拆成單個字節,再對最高位字節(最高的8個二進制位)的最高位與128(1000,0000)進行異或操作,相當于將正數和負數的符號位反過來。

我們找一條相對復雜的日志為例

0: len 8; hex 85558556e13000e1; asc  U V 0  ;;

將16進制值85558556e13000e1貼入計算器

imageimage

可以觀察到最高位二進制數字為1,說明在進行異或計算前這一位為0,我們將其高位修改為0。

imageimage

于是我們得到16進制數字0x5558556E13000E1,再將其轉為10進制。

imageimage

這樣一來我們就解析到了得到真正存儲的數據:384359951401746657。

如法炮制,我們同樣得到本次案例中的主鍵數據

0: len 4; hex 80000001; asc     ;;

解析后得到1。即,鎖加在了主鍵為1的這一條記錄上

如果是字符類型,只需要按照對應的字符集切分成相同大小的字節塊,每個字節塊單獨映射即可

通常針對字符類型的反算就是deepseek出場的時候了,但是數值類型還是我們手動來比較好,deepseek似乎算不太明白。

上面重點講述了主鍵索引在死鎖日志中的日志結構,二級索引結構很類似。

  • 針對二級索引來說,這里保存的內容是

列編號

內容

0

二級索引列1

1

二級索引列2

2

二級索引列3

.....

以此類推

最后一行

主鍵值

現在回到案例上來,我們現在已經確定了,事務1的死鎖發生在‘itsuka’庫的‘t1’表的主鍵索引上,死鎖發生時正在等待自己的排他記錄鎖的獲取,鎖的位置位于主鍵索引上主鍵為1(80000001)那條記錄

事務2的死鎖日志大部分與事務1相同,只是多了如下內容

*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 44 page no 3 n bits 72 index PRIMARY of table `itsuka`.`t1` trx id 10048 lock mode S locks rec but not gap
Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 4; hex 80000001; asc     ;;
 1: len 6; hex 00000000273e; asc     '>;;
 2: len 7; hex ad000001210110; asc     !  ;;

這段表明,死鎖發生時,事務2已經持有一把鎖,鎖的類型是共享記錄鎖,鎖的位置為主鍵索引上主鍵為1

( 0: len 4; hex 80000001; asc     ;;)

的那條記錄。

同時,事務2的死鎖發生時還在等待自己的排他記錄鎖的獲取,鎖的位置位于主鍵索引上主鍵為1

( 0: len 4; hex 80000001; asc     ;;)

的那條記錄

至此,我們的死鎖日志就分析就全部結束了。

3、確定死鎖原因

基于上一節我們知道了,死鎖發生時我們收集到了兩個事務的信息。

事務1的事物ID為10047,事務執行的時間較短為10秒鐘,死鎖時正在等待獲取一把獨占型記錄鎖,這把鎖加在了‘itsuka’庫的‘t1’表的主鍵索引上主鍵為1的那條記錄上。

事務2的事物ID為10048,事務執行的時間較長為21秒鐘,死鎖時正持有一把共享型記錄鎖,這把鎖加在了‘itsuka’庫的‘t1’表的主鍵索引上主鍵為1的那條記錄上,同時事務2又嘗試獲取一把獨占型記錄鎖,這把鎖加在了‘itsuka’庫的‘t1’表的主鍵索引上主鍵為1的那條記錄上。

在開始我們下一階段的思考之前,我們需要明確幾個問題。

(1)InnoDB順序加鎖順序解鎖(公平鎖)

imageimage

基于MySQL的官方文檔,我們可以知道。一個事務成功加鎖的前提是:這條記錄的鎖等待隊列中,當前事務前面所有不兼容的加鎖請求都已釋放(提交或回滾)

(2)死鎖日志中出現的鎖,不論是等待的鎖,還是持有的,都是每個事務已經擁有的鎖結構

有別于java中的鎖,例如ReentrantLock。不管有幾個線程來爭搶這把鎖,自始至終都只有一個鎖結構,拿到鎖的線程擁有這把鎖,沒拿到鎖的線程不擁有這把鎖。

而MySQL每次加鎖都會在內存中生成一個獨屬于這個事務的鎖結構,只不過鎖結構里有一個等待狀態的標志,表示這個鎖獲取成功還是失敗。

在進行MySQL的加鎖分析時,一定要明白,不論當前事務有沒有成功獲取到鎖,都已經建立了鎖結構。

因此,上述案例中的鎖結構示意圖如下所示。

imageimage

接下來我們要做的就是逐個分析鎖結構,判斷他的來源以及為什么沒能成功獲取。

所以,該案例的死鎖原因就找到了:

T2事務先獲取了了S型記錄鎖T1事務再嘗試獲取X型記錄鎖,與S型記錄鎖沖突,因此T1事務陷入等待。此時T2事務再嘗試獲取這條記錄的X型記錄鎖根據請求鎖的原則:這條記錄的鎖等待隊列中,與T2事務的加鎖請求沖突的鎖都已釋放(提交或回滾),T2事務才能加鎖成功。因此T2事務也陷入等待,并且T2事務需要等待T1事務先獲取鎖,但T1事務要等待T2事務的S型記錄鎖釋放,死鎖因此產生。

再結合我們的sql,我們就可以完整還原現場:

時間

事務1

事務2

T1


begin;select * from t1 where i=1 LOCK IN SHARE MODE;

T2

begin;DELETE FROM t1 WHERE i = 1;


T3


DELETE FROM t1 WHERE i = 1;

4、拓展:特殊情況加鎖引起的死鎖

當然,很多時候死鎖的產生并不完全是由兩條 SQL 顯式加鎖導致的。MySQL 可能會背著我們偷偷的加一些鎖,從而引發死鎖。但是不論是如何加鎖,我們都要先找到死鎖發生時,每個事務都涉及到了哪些鎖結構,這些鎖加在了哪里。然后再逐個分析,或者說‘猜’,這些鎖是如何產生的。

例如,當MySQL在插入或者更新記錄時出現唯一鍵沖突,那么會對重復的key加S類型的next-key鎖。因為對于 MySQL 來說,不能直接報錯,要先檢查當前沖突記錄是否為有效記錄,如果發現沖突的記錄被標記刪除了,說明他不是有效記錄,新紀錄可以插入,否則要報錯。為了防止其它事務更新或者刪除這條記錄、或者往這條記錄前面的間隙里插入記錄,開始檢查工作之前,MySQL 會對這條記錄加共享鎖。

而當insert 語句帶上on duplicate key update這個小尾巴時,這個小尾巴的作用是發現沖突記錄時執行更新操作,既然是更新操作則需要加排他鎖,所以這種情況下發生唯一鍵沖突,就直接加排他鎖。

更多加鎖情況這里不展開講,大家可以自行查閱官方文檔,針對每種加鎖場景都有明確的描述:https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html

關于作者

黃敬乾   俠客匯Java開發工程師

責任編輯:武曉燕 來源: 轉轉技術
相關推薦

2021-08-28 09:04:54

死鎖順序鎖輪詢鎖

2015-12-09 10:41:51

2021-02-18 08:22:26

KubernetesDocker鏡像

2021-05-18 09:06:19

零信任郵件安全安全威脅

2018-05-06 16:52:51

2012-09-10 09:28:51

2009-11-20 18:08:37

Oracle數據庫

2011-11-28 10:03:29

HTML5移動應用

2015-07-21 20:49:14

浪潮

2009-12-03 16:33:02

路由交換設備

2025-06-27 07:17:52

2019-11-20 10:38:59

MySQLSQL數據庫

2011-09-06 14:36:34

觸摸菜單ipad應用電子點菜

2013-11-15 10:15:55

HA系統張振倫HypervisorH

2021-06-18 07:34:12

Kafka中間件微服務

2017-03-02 11:49:51

OPPO

2018-06-26 09:37:07

時序數據庫FacebookNoSQL

2009-11-02 18:07:58

Oracle數據庫

2014-08-29 16:43:58

GitHubLinux

2013-12-30 10:37:59

點贊
收藏

51CTO技術棧公眾號

91成人免费观看| 亚洲国产成人在线视频| 亚洲成人在线视频网站| 中文字幕丰满人伦在线| 欧美成人日本| 亚洲摸下面视频| 亚洲一区二区中文字幕在线观看| 神马午夜伦理不卡| 久久久久久久久99精品| 91精品国产综合久久久久久蜜臀 | 国产精品嫩草久久久久| 99理论电影网| 高潮毛片又色又爽免费 | 久久精品人人爽人人爽| 成人免费网站在线观看| 特一级黄色大片| 天堂美国久久| 亚洲乱码av中文一区二区| 国产福利精品一区二区三区| 黄色漫画在线免费看| 国产精品国产自产拍在线| 久久精品国产一区二区三区日韩 | 国产精品一线二线三线| 午夜在线视频| 97久久人人超碰| 亚洲自拍偷拍第一页| 色av性av丰满av| 狠狠久久婷婷| 米奇精品一区二区三区在线观看| 欧洲女同同性吃奶| 超碰成人在线观看| 91精品国产综合久久久久| 日日碰狠狠丁香久燥| 国产精品一品| 亚洲欧美日韩成人高清在线一区| 欧洲久久久久久| 污视频在线免费观看| 国产大陆a不卡| 国产又爽又黄的激情精品视频| 亚洲天堂一区在线观看| 伊人久久婷婷| 欧美激情欧美狂野欧美精品| 国产成人自拍网站| 99久久婷婷这里只有精品| 一区二区三区动漫| 国产手机在线观看| 免费久久精品| 亚洲免费精彩视频| 日本黄色特级片| 小说区图片区色综合区| 日韩精品一二三四区| 9.1成人看片| 亚洲伊人春色| 亚洲日韩第一页| 精品国产av无码| 欧美欧美黄在线二区| 国产亚洲福利一区| 亚洲最大成人综合网| 成人6969www免费视频| 在线播放日韩欧美| 日本伦理一区二区三区| 欧美黄色大片在线观看| 欧美乱大交xxxxx另类电影| 欧美极品aaaaabbbbb| 国产精品hd| 国内偷自视频区视频综合| 国产精品自拍视频一区| 国产欧美二区| 国产精品成人在线| 91亚洲欧美激情| 国产精品一区二区不卡| 国产二区一区| 亚洲欧美综合一区二区| 久久精品人人爽人人爽| 自拍偷拍亚洲色图欧美| 91精选在线| 婷婷综合在线观看| 成人性生生活性生交12| 狂野欧美性猛交xxxx| 91精品国产一区二区三区| 国产精品久久久久久亚洲色| 婷婷综合福利| 深夜精品寂寞黄网站在线观看| 成人一级黄色大片| 亚洲黄色成人| 国产精品欧美亚洲777777| 精品国产av鲁一鲁一区 | 国产欧美一区二区三区另类精品| 亚洲av成人无码久久精品老人| 国产婷婷色一区二区三区在线| 一区二区三区国产福利| 欧美xxxxhdvideosex| 欧美午夜影院在线视频| 国产永久免费网站| 美女视频亚洲色图| 久久精品久久久久久国产 免费| 久久精品无码人妻| 免费成人在线影院| 国产伦精品一区二区三区照片| 国产视频三级在线观看播放| 伊人婷婷欧美激情| 亚洲精品中文字幕无码蜜桃| 精品国产一区二区三区2021| 日韩高清不卡av| 日本一级特级毛片视频| 欧美亚洲一区| 成人免费看片网站| 日韩毛片久久久| 精品久久久久久久久国产字幕| 日韩中文字幕a| 色综合久久中文| 久国内精品在线| 毛片在线免费播放| 97久久久精品综合88久久| 一区二区三区我不卡| 天堂中文av在线资源库| 日韩欧美在线影院| 国产一区在线观看免费| 美女视频一区免费观看| 国产精品theporn88| 日韩精品毛片| 欧亚一区二区三区| 成人免费毛片日本片视频| 欧美99在线视频观看| 国产精品男女猛烈高潮激情| 五月天婷婷视频| 亚洲一区二区三区四区不卡 | 国产91精品露脸国语对白| 亚洲欧美日韩精品综合在线观看| 夜鲁夜鲁夜鲁视频在线播放| 日韩精品专区在线影院重磅| 国精产品一区一区二区三区mba| 日韩综合在线视频| 麻豆蜜桃91| 草草在线视频| 亚洲国产欧美自拍| 豆国产97在线 | 亚洲| 国内一区二区视频| 伊人情人网综合| 偷拍自拍亚洲| 北条麻妃久久精品| 一二三四区视频| 欧美国产日韩精品免费观看| 日韩中文字幕二区| 久久不见久久见国语| 清纯唯美日韩制服另类| 日韩av视屏| 亚洲男人的天堂在线观看| 日韩在线一区视频| 在线精品视频在线观看高清| 成人激情视频小说免费下载| 免费黄色在线看| 欧美精品在线视频| 日韩在线视频网址| 国产精品66部| 阿v天堂2018| 少妇一区二区三区| 国产精品ⅴa在线观看h| 久久久久国产精品嫩草影院| 色老汉av一区二区三区| 欧美三级视频网站| 麻豆视频一区二区| 中文字幕成人一区| 婷婷视频一区二区三区| 久久久久久国产精品三级玉女聊斋 | 激情自拍一区| 久久96国产精品久久99软件| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 热久久免费视频精品| 久久久久久青草| 欧美伦理视频网站| 久久久国产成人| www.成人在线| 99久久国产宗和精品1上映| 青青草国产成人a∨下载安卓| 国产欧美日韩中文字幕在线| 国产原创在线观看| 亚洲国产精品久久久久秋霞蜜臀 | 久久久国产亚洲精品| 日韩资源av在线| 成人噜噜噜噜| 97不卡在线视频| jizz视频在线观看| 91精品国产色综合久久久蜜香臀| 久久老司机精品视频| www精品美女久久久tv| 日本肉体xxxx裸体xxx免费| 欧美福利网址| 欧美精品一区二区视频| 羞羞视频在线观看一区二区| 国内精久久久久久久久久人| 国产在线视频资源| 日韩亚洲欧美一区| 99超碰在线观看| 亚洲曰韩产成在线| 成人黄色a级片| 99视频在线精品| 色天使在线观看| 国产欧美亚洲一区| 91香蕉视频网址| 一区二区三区日本久久久 | 中文av一区二区三区| 在线日本成人| 在线看无码的免费网站| 任你弄精品视频免费观看| 91精品久久久久久久久久入口| a国产在线视频| 久久中国妇女中文字幕| 免费福利在线观看| 精品精品国产高清a毛片牛牛 | 精品国产黄a∨片高清在线| 久久久久久欧美| 色网站在线看| 一本色道久久88精品综合| 成人午夜免费福利| 欧美高清一级片在线| www.色国产| 黄色一区二区三区| 五月婷婷一区二区| 国产精品国产成人国产三级 | 日韩av电影免费观看高清| 欧美家庭影院| 久久不射热爱视频精品| www视频在线观看免费| 亚洲老头同性xxxxx| 老熟妇高潮一区二区高清视频| 欧美电影在线免费观看| 久久久久久av无码免费看大片| 狠狠综合久久av一区二区小说| 久久久久成人网站| 亚洲男人都懂的| 国产精品 欧美激情| 国产精品黄色在线观看| 少妇精品无码一区二区免费视频| 91在线精品一区二区三区| 人妻激情偷乱频一区二区三区| 国产一区二区在线视频| av亚洲天堂网| 久久精品久久精品| 国产一级做a爰片久久| 可以看av的网站久久看| 成人三级视频在线播放| 久久精选视频| 国产激情在线观看视频| 日韩av电影免费观看高清完整版| 日日碰狠狠丁香久燥| 日韩电影网1区2区| 日本成人在线免费视频| 蜜桃精品视频在线观看| 色噜噜狠狠一区二区| 老汉av免费一区二区三区| 日本黄色的视频| 国产一区二区精品久久| 亚洲免费在线播放视频| 国产激情91久久精品导航| 国产精品欧美性爱| kk眼镜猥琐国模调教系列一区二区| 国产香蕉精品视频| 97精品久久久久中文字幕| 精品人妻无码一区二区三区| 国产亚洲一二三区| 国产精品久久国产精麻豆96堂| 国产精品卡一卡二| 疯狂试爱三2浴室激情视频| 亚洲蜜臀av乱码久久精品| 免费中文字幕在线观看| 欧美日韩国产黄| 日韩综合在线观看| 欧美日韩国产一区二区三区地区| 一区二区三区免费在线| 日韩欧美一区在线| 午夜18视频在线观看| 尤物yw午夜国产精品视频明星| 欧美a免费在线| 欧美激情一级精品国产| 理论片午夜视频在线观看| 国产91免费观看| 国产精品1区| 狠狠干一区二区| 成人在线免费小视频| 欧美人与动牲交xxxxbbbb| 国产农村妇女精品一区二区| 亚洲欧美国产日韩综合| 风间由美性色一区二区三区 | 精品国产一区一区二区三亚瑟| 色撸撸在线观看| 国产精品一区毛片| 黄色小视频免费网站| 99精品欧美一区二区三区综合在线| 国产真实乱人偷精品人妻| 亚洲色图制服诱惑| 天天操天天操天天操天天| 欧美猛男男办公室激情| 三级网站在线看| www.国产一区| 色戒汤唯在线观看| 亚洲www在线| 激情五月色综合国产精品| 欧美黄色免费网址| 免费久久99精品国产| 免费不卡的av| 国产精品久久久久aaaa樱花 | 香蕉成人久久| 日韩久久久久久久久久久| 久久综合九色综合欧美就去吻| 中国毛片直接看| 91福利视频久久久久| 亚洲第一色网站| 色偷偷噜噜噜亚洲男人| 北岛玲heyzo一区二区| 99久久精品免费看国产四区| 欧美日韩激情在线一区二区三区| 免费一级特黄特色毛片久久看| 久久99热这里只有精品| 成人片黄网站色大片免费毛片| 亚洲一区二区三区四区在线观看| 中文永久免费观看| 亚洲男人天堂古典| 538在线视频| 91成人伦理在线电影| 欧美高清视频在线观看mv| 久久精品视频91| 91啪亚洲精品| 国偷自拍第113页| 精品国产乱码久久久久久老虎| 91xxx在线观看| 国产精品观看在线亚洲人成网| 美女主播精品视频一二三四| 国产黄色激情视频| 国产乱码一区二区三区| 四虎地址8848| 欧美日韩免费一区二区三区| 黄色免费在线播放| 国产91精品久久久久久久| 精品国内亚洲2022精品成人| 国产青草视频在线观看| 国产精品一区二区在线观看网站| 天天色天天综合| 欧美日韩高清影院| 日本福利专区在线观看| 国产欧美日韩亚洲精品| 国产精品99久久精品| 天天影视色综合| 亚洲日穴在线视频| 国产人妻精品一区二区三区| 久久亚洲精品一区二区| 国产亚洲久久| 成人毛片100部免费看| 国产成人在线免费观看| 久久久精品一区二区涩爱| 亚洲第一精品夜夜躁人人躁| 阿v视频在线| 精品无人区一区二区三区| 亚洲一区一卡| 日本欧美一区二区三区不卡视频| 欧洲av一区二区嗯嗯嗯啊| 欧美日本一道| 999国内精品视频在线| 欧美日韩1区2区3区| 性色av蜜臀av浪潮av老女人| 天天爽夜夜爽夜夜爽精品视频| 日韩偷拍自拍| 国产精品国产福利国产秒拍| 外国成人免费视频| 极品白嫩少妇无套内谢| 偷拍亚洲欧洲综合| 国产美女性感在线观看懂色av| 国产精品美女www爽爽爽视频| 国产精品成久久久久| 麻豆免费在线观看视频| 精品人伦一区二区三区蜜桃免费 | 欧美日韩夜夜| 我看黄色一级片| 一二三四社区欧美黄| 日韩精品系列| 成人av番号网| 99国产精品99久久久久久粉嫩| 蜜乳av中文字幕| 欧美一区二区精品| 国产理论在线| 亚洲欧洲精品一区| 国产91在线看| 波多野结衣午夜| 欧美黑人国产人伦爽爽爽| 亚洲盗摄视频| 日本一二三区在线| 欧美性黄网官网| av网址在线看| 欧洲在线视频一区| 亚洲福利视频三区| 青青免费在线视频| 91精品久久久久久久久久另类 | 在线观看日韩专区| 日韩在线精品强乱中文字幕| 日本午夜激情视频| 国产精品高潮呻吟久久| 神马午夜精品95| 91在线观看免费观看| 国产农村妇女毛片精品久久莱园子| 多男操一女视频|