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

線上BUG:MySQL死鎖分析實戰

數據庫 MySQL
我們不需要關注截圖中得其他信息,只要能看到打印得org.springframework.dao.DeadlockLoserDataAccessException就足夠了,就是MySQL發生死鎖導致服務拋異常。

 [[409159]]

本文轉載自微信公眾號「不送花的程序猿」,作者Howinfun 。轉載本文請聯系不送花的程序猿公眾號。  

1 線上告警

我們不需要關注截圖中得其他信息,只要能看到打印得org.springframework.dao.DeadlockLoserDataAccessException就足夠了,就是MySQL發生死鎖導致服務拋異常。

關于接口的邏輯,可以大概描述為:C端調用接口查詢店鋪的追蹤事件列表,如果查詢為空列表則順便給初始化,這里的初始化是批量插入一批事件追蹤列表,然后再返回,這里要給到一個關于表的信息點:這個表有主鍵索引和唯一索引。

1.1 云日志&死鎖日志

不管是云日志還是死鎖日志,都是顯示著是并發重復插入導致的死鎖,下面我就簡單放一下云日志的截圖,關于死鎖的日志就不放了,因為下面將自己弄個demo來仿造并發重復請求導致批量插入發生死鎖。

2 相關鎖概念

2.1 INSERT語句如何加鎖

首先我們得先知道在執行 INSERT 語句時,引擎(默認InnoDb)是如何加鎖的。

默認情況下,執行 INSERT 語句是不用加鎖的,

不過如果事務中執行一條 INSERT 語句,會先定位到該記錄在 B+ 樹的位置時,接著判斷該位置的下一條記錄被加了 grap 鎖;如果是的話會在記錄上加上一種類型為插入意向鎖的鎖,最后事務進入等待狀態。

插入意向鎖是行級別的,也是一種間隙鎖。插入意向鎖之間互相兼容,多個事務可以同時對同一區間加上插入意向鎖;還有在事務中,如果成功插入記錄并且還未提交事務,那么當前事務還會持有插入記錄的行鎖。

2.2 鍵發生重復沖突

如果當插入記錄時遇到重復鍵,當前事務會在生成錯誤信息前,對記錄加上S鎖,如果是唯一索引發生的重復鍵,會加上S型的next-key鎖。

3 實踐出真知

下面我們開始上例子了。

3.1 表信息

使用現有的表:

  • 用戶表
  • 字段有:id、name、gender、user_type
  • id為主鍵,name加了唯一索引;這里加唯一索引是要和上面的告警對齊。
  1. CREATE TABLE `user` ( 
  2.   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(20) NOT NULL
  4.   `gender` char(1) NOT NULL
  5.   `user_type` varchar(2) NOT NULL
  6.   PRIMARY KEY (`id`), 
  7.   UNIQUE KEY `uk_name` (`name`) 
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

3.2 單元測試

接著是單元測試:

entity、mapper和service就直接省略過了。

單元測試主要是為了模擬線上的場景,前端并發發起請求,導致發生并發批量插入同一批數據。

3.2.1 代碼如下

模擬并發數3:

  1. @SpringBootTest(classes = MysqlInActionApplication.class) 
  2. @RunWith(SpringRunner.class) 
  3. public class MysqlInActionApplicationTests { 
  4.  
  5.   @Autowired 
  6.   private UserService userService; 
  7.    
  8.   /** 
  9.    * 線程數 
  10.    */ 
  11.   private static final int threadNum = 3; 
  12.   /** 
  13.    * 控制同時請求 
  14.    */ 
  15.   private static final CountDownLatch countDownLatch = new CountDownLatch(threadNum); 
  16.  
  17.   /** 
  18.    * 用戶請求 
  19.    */ 
  20.   class UserRequest implements Runnable{ 
  21.  
  22.     @Override 
  23.     public void run() { 
  24.       try { 
  25.         // 等待 
  26.         countDownLatch.await(); 
  27.       } catch (InterruptedException e) { 
  28.         e.printStackTrace(); 
  29.       } 
  30.       // 批量插入用戶,插入數據不變 
  31.       saveUserList(); 
  32.     } 
  33.   } 
  34.  
  35.   @Test 
  36.   public void contextLoads() { 
  37.     for (int i = 0; i < threadNum; i++) { 
  38.       new Thread(new UserRequest()).start(); 
  39.       // 計數減一 
  40.       countDownLatch.countDown(); 
  41.     } 
  42.     try { 
  43.       Thread.currentThread().join(); 
  44.     } catch (InterruptedException e) { 
  45.       e.printStackTrace(); 
  46.     } 
  47.   } 
  48.  
  49.   /** 
  50.    * 批量插入用戶 
  51.    */ 
  52.   public void saveUserList(){ 
  53.     List<User> userList = new ArrayList<>(); 
  54.     userList.add(new User().setName("winfun").setGender("m").setUserType("1")); 
  55.     userList.add(new User().setName("fenghao").setGender("w").setUserType("2")); 
  56.     userList.add(new User().setName("luff").setGender("m").setUserType("1")); 
  57.     this.userService.saveBatch(userList); 
  58.   } 

3.2.2 運行結果

我們可以看到,基本和上面的告警信息是保持一致的了,直接拋出死鎖的異常。

3.3 MySQL 日志

我們再看看mysql的死鎖日志:

  1. show engine innodb status; 
  1. ------------------------ 
  2. LATEST DETECTED DEADLOCK 
  3. ------------------------ 
  4. 2021-07-03 12:36:02 0x7000082df000 
  5. *** (1) TRANSACTION
  6. TRANSACTION 25374, ACTIVE 0 sec inserting 
  7. mysql tables in use 1, locked 1 
  8. LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 1 
  9. MySQL thread id 17, OS thread handle 123145438982144, query id 356 localhost 127.0.0.1 root update 
  10. INSERT INTO user  ( gender, 
  11. name
  12. user_type )  VALUES  ( 'm'
  13. 'winfun'
  14. '1' ) 
  15. *** (1) WAITING FOR THIS LOCK TO BE GRANTED: 
  16. RECORD LOCKS space id 62 page no 4 n bits 72 index uk_name of table `test`.`user` trx id 25374 lock mode S waiting 
  17. Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  18.  0: len 6; hex 77696e66756e; asc winfun;; 
  19.  1: len 8; hex 0000000000000001; asc         ;; 
  20.  
  21. *** (2) TRANSACTION
  22. TRANSACTION 25373, ACTIVE 0 sec inserting 
  23. mysql tables in use 1, locked 1 
  24. 3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 2 
  25. MySQL thread id 19, OS thread handle 123145439539200, query id 369 localhost 127.0.0.1 root update 
  26. INSERT INTO user  ( gender, 
  27. name
  28. user_type )  VALUES  ( 'w'
  29. 'fenghao'
  30. '2' ) 
  31. *** (2) HOLDS THE LOCK(S): 
  32. RECORD LOCKS space id 62 page no 4 n bits 72 index uk_name of table `test`.`user` trx id 25373 lock_mode X locks rec but not gap 
  33. Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  34.  0: len 6; hex 77696e66756e; asc winfun;; 
  35.  1: len 8; hex 0000000000000001; asc         ;; 
  36.  
  37. *** (2) WAITING FOR THIS LOCK TO BE GRANTED: 
  38. RECORD LOCKS space id 62 page no 4 n bits 72 index uk_name of table `test`.`user` trx id 25373 lock_mode X locks gap before rec insert intention waiting 
  39. Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  40.  0: len 6; hex 77696e66756e; asc winfun;; 
  41.  1: len 8; hex 0000000000000001; asc         ;; 
  42.  
  43. *** WE ROLL BACK TRANSACTION (1) 

3.3.1 事務一信息

  1. *** (1) TRANSACTION
  2. TRANSACTION 25374, ACTIVE 0 sec inserting 
  3. mysql tables in use 1, locked 1 
  4. LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 1 
  5. MySQL thread id 17, OS thread handle 123145438982144, query id 356 localhost 127.0.0.1 root update 
  6. INSERT INTO user  ( gender, 
  7. name
  8. user_type )  VALUES  ( 'm'
  9. 'winfun'
  10. '1' ) 

事務一的trascationId為25374,存活0秒

事務一執行的SQL為:INSERT INTO user ( gender,name,user_type ) VALUES ( 'm','winfun','1' )語句

  1. INSERT INTO user ( gender,name,user_type ) VALUES ( 'm','winfun','1' ) 

3.3.2 事務一正在等待的鎖

  1. *** (1) WAITING FOR THIS LOCK TO BE GRANTED: 
  2. RECORD LOCKS space id 62 page no 4 n bits 72 index uk_name of table `test`.`user` trx id 25374 lock mode S waiting 
  3. Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  4.  0: len 6; hex 77696e66756e; asc winfun;; 
  5.  1: len 8; hex 0000000000000001; asc         ;; 

事務一正在等待插入記錄的S型的next-key鎖。

3.3.3 事務二的信息

  1. *** (2) TRANSACTION
  2. TRANSACTION 25373, ACTIVE 0 sec inserting 
  3. mysql tables in use 1, locked 1 
  4. 3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 2 
  5. MySQL thread id 19, OS thread handle 123145439539200, query id 369 localhost 127.0.0.1 root update 
  6. INSERT INTO user  ( gender, 
  7. name
  8. user_type )  VALUES  ( 'w'
  9. 'fenghao'

事務二的事務ID為25373,存活0秒

事務一執行的SQL為:INSERT INTO user ( gender,name,user_type ) VALUES ( 'w','fenghao','2' )語句

  1. INSERT INTO user ( gender,name,user_type ) VALUES ( 'w','fenghao','2' ) 

3.3.4 事務二持有鎖信息

  1. *** (2) HOLDS THE LOCK(S): 
  2. RECORD LOCKS space id 62 page no 4 n bits 72 index uk_name of table `test`.`user` trx id 25373 lock_mode X locks rec but not gap 
  3. Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  4.  0: len 6; hex 77696e66756e; asc winfun;; 
  5.  1: len 8; hex 0000000000000001; asc         ;; 

事務二持有 name 為 winfun 這一行唯一二級索引的X鎖,但不是gap鎖。

3.3.5 事務二等待的鎖

  1. *** (2) WAITING FOR THIS LOCK TO BE GRANTED: 
  2. RECORD LOCKS space id 62 page no 4 n bits 72 index uk_name of table `test`.`user` trx id 25373 lock_mode X locks gap before rec insert intention waiting 
  3. Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 
  4.  0: len 6; hex 77696e66756e; asc winfun;; 
  5.  1: len 8; hex 0000000000000001; asc         ;; 

事務二在添加插入意向鎖時發現記錄已經被加上X型的間隙鎖,所以無法添加,只能等待鎖釋放。

3.3.6 最后的解決

  1. *** WE ROLL BACK TRANSACTION (1) 

InnoDb 回滾了事務一,從而讓事務一接觸

3.4 分析總結:

  • 事務一和事務二是并發批量插入同一批數據
  • 事務二先執行,成功插入 winfun這條記錄,然后對這條記錄加上了行鎖
  • 接著事務一進來了,發現winfun這個key是重復沖突了,接著在返回報錯信息前,對winfun這條記錄加上S型的next-key鎖,但是發現winfun這條記錄上已經有一個行鎖,所以只能等待
  • 接著事務二進行第二條記錄的插入,即插入fenghao;此時發現它的下一條記錄,即winfun記錄處已經有事務一要加入next-key鎖,導致產生沖突,所以事務二也進入等待
  • 最后,只能回滾事務一,從而讓事務二完整執行下去。

4 最后

最后如何解決線上這個問題呢?

其實很簡單,可以上分布式鎖,但是我們這場景沒有必要,反而會一定程度上增加接口的耗時;并且我們這個是C端接口,完全沒有必要擁有初始化店鋪數據的能力,把這能力保留在Admin端的接口即可;所以最后將初始化,即批量插入初始化數據的邏輯干掉即可~

 

責任編輯:武曉燕 來源: 不送花的程序猿
相關推薦

2017-06-07 16:10:24

Mysql死鎖死鎖日志

2011-09-27 10:18:55

死鎖

2021-09-27 10:15:10

故障業務方電腦

2020-07-16 21:20:08

數據庫MySQL死鎖

2021-03-26 10:40:16

MySQL鎖等待死鎖

2020-04-14 10:20:12

MySQL數據庫死鎖

2024-10-16 11:40:47

2014-03-17 10:34:48

SQL Server

2017-08-18 22:40:33

線上線程備份

2019-05-13 08:24:58

數據庫MySQLInnoDB

2011-08-24 17:41:16

MySQL死鎖

2023-11-15 17:23:30

測試軟件開發

2018-03-26 11:14:13

程序猿bug代碼

2023-12-11 06:27:39

MySQL線上業務優化后臺上傳文件

2020-09-29 12:15:13

生死鎖MySQL

2017-06-14 22:11:57

數據庫MySQL死鎖

2011-05-20 15:41:30

2024-10-30 10:38:08

2023-07-18 09:24:04

MySQL線程

2024-06-21 09:37:57

點贊
收藏

51CTO技術棧公眾號

嫩草研究院在线观看| 国产精品午夜影院| 亚洲国产一区二区三区网站| 一区二区三区日韩在线观看| 国产伦精品一区二区三区视频免费| 999这里只有精品| 色综合狠狠操| 亚洲第一在线视频| 久草综合在线观看| 日本动漫理论片在线观看网站 | 日韩无码精品一区二区| 欧美xxx视频| 亚洲精品免费视频| 日本免费一区二区三区| 国产丝袜视频在线观看| 免费日韩一区二区| 久久久极品av| 全黄一级裸体片| 欧美另类中文字幕| 在线观看91精品国产入口| 日韩亚洲欧美视频| 日本电影在线观看网站| 91在线免费视频观看| 成人网址在线观看| 精品国产乱子伦| 在线观看不卡| 久久天天躁狠狠躁老女人| 短视频在线观看| 伊人久久精品| 欧美在线高清视频| 精品国产免费av| 污污网站在线观看| 亚洲欧洲精品一区二区精品久久久| 精品视频一区二区| 国产av精国产传媒| 久久国产精品99久久久久久老狼| 欧美一级在线播放| 国产大片aaa| 欧美va天堂在线| www.日本久久久久com.| 人成免费在线视频| 国产精品片aa在线观看| 亚洲精品久久久久| 亚洲成a人无码| 秋霞影院一区| 日韩欧美黄色影院| 捷克做爰xxxⅹ性视频| 草民电影神马电影一区二区| 色网站国产精品| 日韩免费毛片视频| 在线天堂新版最新版在线8| 性久久久久久久久久久久| 久久久久久av无码免费网站下载| а√天堂在线官网| 亚洲欧洲日产国码二区| 在线免费观看一区二区三区| 香蕉视频在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 日本一区免费观看| 国产视频网址在线| 欧美激情一区在线观看| 色视频一区二区三区| 成人免费在线视频网| 国产精品入口麻豆九色| 亚洲视频sss| 免费观看久久久久| 亚洲欧美日韩中文字幕一区二区三区| 亚洲成年人专区| 欧美v亚洲v| 亚洲二区在线观看| 无码aⅴ精品一区二区三区浪潮 | 真人bbbbbbbbb毛片| 免费成人三级| 亚洲色图五月天| 少妇av片在线观看| 日韩精品久久久久久久电影99爱| 色综合伊人色综合网站| 最新一区二区三区| 黄色亚洲免费| 欧洲亚洲免费视频| 91国在线视频| 成人精品国产一区二区4080 | 精品久久影视| www.日韩系列| 日韩激情一区二区三区| 丝袜亚洲精品中文字幕一区| 国产精品亚洲精品| 亚洲奶汁xxxx哺乳期| 91麻豆视频网站| 日韩精品一区二区三区丰满| 97电影在线看视频| 亚洲成人在线网站| 日日躁夜夜躁aaaabbbb| 91精品久久久久久综合五月天 | 亚洲一区亚洲二区亚洲三区| 日本精品一二区| 欧美经典三级视频一区二区三区| 欧美性视频在线播放| 美女高潮在线观看| 欧美日韩成人高清| 国产精品无码毛片| 天天射天天综合网| 欧美一级在线亚洲天堂| 精品久久久久中文慕人妻| 久久综合网色—综合色88| 亚洲韩国在线| 欧美男男激情videos| 欧美高清激情brazzers| 欧洲女同同性吃奶| 极品中文字幕一区| 成人黄在线观看| 欧美777四色影视在线 | 国产一级淫片a视频免费观看| 美国毛片一区二区| 久久久福利视频| 污污视频在线| 欧美欧美欧美欧美首页| 中国免费黄色片| 888久久久| 国产精品h片在线播放| 日本高清视频在线| 亚洲六月丁香色婷婷综合久久 | 国产成人精品av久久| 免费久久精品视频| 久久综合九色综合久99| av影片在线| 精品奇米国产一区二区三区| 亚洲波多野结衣| 奇米在线7777在线精品| 欧美二区三区在线| 人成在线免费网站| 精品成人佐山爱一区二区| 中文字幕在线有码| 久久精品国产亚洲aⅴ| 日韩高清国产精品| 欧美18—19sex性hd| 精品无人区太爽高潮在线播放| 久草福利资源在线观看| 韩国欧美一区二区| 一区精品视频| 日韩国产大片| 日韩在线播放视频| 亚洲天堂手机在线| 中国色在线观看另类| 日本新janpanese乱熟| 国产一区二区三区网| 青青草成人在线| 欧美新色视频| 色老汉一区二区三区| 精品人妻一区二区三区日产乱码卜| 亚洲福利专区| 久久riav二区三区| 欧美激情20| 夜夜嗨av一区二区三区免费区| 精人妻无码一区二区三区| 久久久久久夜精品精品免费| www.欧美日本| 欧洲grand老妇人| 国产精品美女免费视频| 1024国产在线| 91精品国产乱| 麻豆一区产品精品蜜桃的特点| 国产suv精品一区二区6| 成人午夜视频在线观看免费| 国产一区二区三区亚洲| 欧美一区二区三区……| 成人动漫在线免费观看| 欧美人体做爰大胆视频| 欧美国产日韩在线观看成人| 成人在线视频首页| 国产精品一区二区免费在线观看| 久草成人资源| 国产免费一区视频观看免费| 在线中文字幕第一页| 亚洲成人1234| 五月婷婷六月婷婷| 中文字幕在线一区免费| 亚洲国产综合av| 亚洲精品影院在线观看| 免费一区二区三区在在线视频| 成人国产精品入口免费视频| 欧美成人精品在线| 天天综合永久入口| 欧美影视一区在线| 青娱乐国产在线| 久久综合九色综合97婷婷| 五月婷婷六月丁香激情| 欧美日韩午夜| 日本一区高清在线视频| 日韩在线网址| 国产精品久久电影观看| 久草免费在线色站| 国产小视频国产精品| 精品久久久久久亚洲综合网站| 欧美性猛交xxxx| 夫妻性生活毛片| 91网站在线观看视频| 亚洲免费黄色录像| 性感少妇一区| 欧美一区二区三区综合| 国产精品最新| 高清一区二区三区视频| 成人午夜sm精品久久久久久久| 久久久久久噜噜噜久久久精品| 99中文字幕一区| 亚洲第一精品福利| 一级黄色片免费看| 欧美性猛交xxxx乱大交极品| 中文字幕人妻一区二| 久久精品欧美一区二区三区不卡 | 97在线免费公开视频| 中文一区一区三区免费在线观看| 欧美影视一区二区| 99国产精品久久一区二区三区| 国产精品亚洲视频在线观看| 在线天堂资源| 高清亚洲成在人网站天堂| 三区四区在线视频| 亚洲欧美国内爽妇网| 欧美一级免费片| 欧美一区二区三区四区久久| 成人免费一级片| 欧美天天综合色影久久精品| 久久久精品一区二区涩爱| 中文字幕一区二区三区av| 熟女高潮一区二区三区| 99久久久国产精品| 国产情侣久久久久aⅴ免费| 国产一区二区在线看| 国产精品一区二区羞羞答答| 久久av最新网址| 霍思燕三级露全乳照| 狠狠色丁香久久综合频道| aaa免费在线观看| 91精品一区国产高清在线gif | 少妇愉情理伦三级| 久久精品欧美一区二区三区麻豆| 亚洲熟妇无码av| 91毛片在线观看| 国产人妻一区二区| 久久久久久久综合日本| 国产真实乱人偷精品| 不卡一卡二卡三乱码免费网站| 国产人妻黑人一区二区三区| 成人av午夜电影| 无码成人精品区在线观看| 国产黄色精品网站| 中文字幕在线播放一区二区| 国产大陆精品国产| aaa黄色大片| 波多野结衣亚洲一区| 欲求不满的岳中文字幕| 91丝袜美腿高跟国产极品老师| 亚洲中文字幕无码av| 26uuu精品一区二区| 国产精品扒开腿做爽爽| 国产女人18毛片水真多成人如厕| 国产真人做爰视频免费| 国产精品麻豆视频| 欧美视频www| 亚洲自拍偷拍av| 久久夜靖品2区| 欧美色另类天堂2015| 麻豆成人免费视频| 欧美日韩视频在线观看一区二区三区| 一级视频在线播放| 欧美成va人片在线观看| 午夜视频在线播放| 国产一区二区三区直播精品电影| 亚洲成人三级| 久久久久久亚洲精品不卡| 黄在线观看免费网站ktv| 欧洲成人在线观看| 欧美日韩免费电影| 91嫩草在线| 亚洲精品一级二级三级| 亚洲精品视频一二三| 欧美成人tv| 国产99久久九九精品无码| 奇米影视在线99精品| 国产chinesehd精品露脸| 91在线高清观看| 黄色av片三级三级三级免费看| 亚洲同性gay激情无套| 日本一区二区三区四区五区| 色婷婷激情一区二区三区| 国产伦理一区二区| 亚洲国产天堂网精品网站| 国产二区视频在线观看| 欧美激情久久久久| 日韩三区免费| yy111111少妇影院日韩夜片| 亚洲人亚洲人色久| 久久久久亚洲av无码专区喷水| 国产欧美成人| 亚洲天堂一区二区在线观看| 99久久精品国产麻豆演员表| 日本理论中文字幕| 亚洲午夜久久久久久久久电影网| 中文字幕丰满人伦在线| 亚洲国产精品va| 日韩大片在线永久免费观看网站| 午夜精品美女自拍福到在线| 97久久精品一区二区三区的观看方式 | 五月天激情图片| 日韩成人dvd| a天堂视频在线观看| 亚洲卡通动漫在线| 在线观看色网站| 日韩激情视频在线| 直接在线观看的三级网址| 国产日韩欧美在线观看| 亚洲国产合集| 大伊香蕉精品视频在线| 激情伊人五月天久久综合| 美女爆乳18禁www久久久久久| 亚洲午夜久久久久久久久久久 | 日韩在线观看第一页| 91精品国产高清一区二区三区蜜臀| 国产专区在线| 日本欧美中文字幕| 久久男人av| 大荫蒂性生交片| 韩国成人福利片在线播放| 青青草综合视频| av不卡中文字幕| 精品黄色一级片| www黄色av| 成人黄色av电影| 婷婷在线精品视频| 欧美视频在线一区| 你懂的视频在线免费| 久久久久久国产免费| 玖玖玖视频精品| 一区二区三区精品国产| 日本在线播放一区二区三区| 久久国产精品无码一级毛片| 午夜精品福利一区二区三区av| 不卡的日韩av| 欧美巨大黑人极品精男| 精品乱码一区二区三区四区| 日韩精品极品视频在线观看免费| 久久福利毛片| 美女爆乳18禁www久久久久久 | 久久久久久久久久成人| 精品一区二区三区四区| 一区一区三区| 久久免费看av| 久久国产一二区| 国产一区二区三区四区五区六区| 色噜噜狠狠一区二区三区果冻| 久蕉依人在线视频| 国产精品av免费在线观看| 俺要去色综合狠狠| 污网站免费在线| 亚洲欧洲日韩在线| www.桃色av嫩草.com| 欧美精品激情在线观看| 欧美黄色网视频| 99精品视频在线看| 国产亲近乱来精品视频| 中文亚洲av片在线观看| 色老头一区二区三区| 日本免费一区二区三区等视频| 色香蕉在线观看| 高清日韩电视剧大全免费| 人人干人人干人人干| 亚洲欧美另类自拍| 国产亚洲精彩久久| 一二三四中文字幕| 91视频你懂的| 中文字幕 亚洲视频| 欧美成人免费大片| 久久成人福利| 在线观看免费黄网站| 亚洲嫩草精品久久| 婷婷开心激情网| 国产精品欧美久久久| 这里只有精品在线| 亚洲中文字幕一区| 欧美亚洲禁片免费| 91网在线看| 免费精品视频一区二区三区| 久久精品999| 日产电影一区二区三区| 尤物九九久久国产精品的分类| 国产区一区二| 男人的天堂99| 亚洲靠逼com| 久草在线网址| 97se国产在线视频| 天堂精品中文字幕在线| 日本老熟俱乐部h0930| 国产手机视频精品| 麻豆国产一区二区三区四区| 99热成人精品热久久66| 亚洲免费av高清| 国产黄在线播放| 国产伦精品一区二区三区在线| 日本欧美一区二区三区乱码|