精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲成人av一区二区三区| 久久天堂精品| 欧美剧情片在线观看| 亚洲第一精品区| 国精品人妻无码一区二区三区喝尿| 伊人蜜桃色噜噜激情综合| 精品一区二区电影| 欧美特黄aaa| 岛国av免费在线观看| 国产日韩av一区二区| 91观看网站| 欧美性猛交bbbbb精品| 91精品国偷自产在线电影| 精品国产不卡一区二区三区| 性欧美极品xxxx欧美一区二区| av在线播放观看| 久久精品网站免费观看| 99影视tv| 亚洲熟妇无码久久精品| 国产精品久久久久久久久久妞妞| 日韩在线视频线视频免费网站| 欧美xxxxx少妇| 91精品亚洲一区在线观看| 欧美日韩性视频| 欧美 亚洲 视频| 98在线视频| 99久久精品国产麻豆演员表| 91久久国产精品| 四虎影院在线免费播放| 亚洲精品一级| 色综合老司机第九色激情| 免费看裸体网站| 精品一区二区男人吃奶| 91精品国产丝袜白色高跟鞋| 无码人妻精品一区二区三区66| av网站大全在线| 国产精品国产a| 日韩av电影在线观看| 深爱激情五月婷婷| 国产成人av电影免费在线观看| 国产精品视频自拍| 91黑人精品一区二区三区| 国产人成精品一区二区三| 欧美激情网站在线观看| 可以直接看的黄色网址| 99久久久久国产精品| 在线视频中文亚洲| 亚洲天堂岛国片| 欧洲乱码伦视频免费| 亚洲色图综合久久| 日韩乱码人妻无码中文字幕久久| 成人在线视频中文字幕| 精品国产乱子伦一区| 国产精品二区视频| 日本成人手机在线| 日韩精品在线网站| 日本一二三区在线| 亚洲午夜免费| 亚洲精品国产品国语在线| 国产日韩视频一区| 亚洲aaa级| 亚洲天堂视频在线观看| 加勒比综合在线| 精品一区二区三区中文字幕老牛| 国产亚洲精品久久久久动| 欧美多人猛交狂配| 成久久久网站| www.日韩av.com| 久久中文免费视频| 欧美日韩一区二区国产| 久久男人av资源网站| 久久草视频在线| 久久精品五月| 国产乱人伦真实精品视频| 国产理论片在线观看| 国产久卡久卡久卡久卡视频精品| 99国产高清| 亚洲 小说区 图片区 都市| 久久久久青草大香线综合精品| 日韩成人在线资源| 看黄网站在线| 亚洲图片自拍偷拍| 久久久久久久久久久久久国产精品| 免费欧美电影| 欧美一区二区在线播放| 俄罗斯黄色录像| 国产亚洲一区二区三区不卡| 色偷偷888欧美精品久久久| 亚洲国产成人精品综合99| 亚洲伦理一区| 成人疯狂猛交xxx| 神马午夜电影一区二区三区在线观看| 久久久久国产精品麻豆ai换脸| 亚洲巨乳在线观看| 黄色影院在线看| 91国产免费看| 超级砰砰砰97免费观看最新一期 | 国产精品高潮呻吟视频 | 精品久久久久一区二区国产| www.自拍偷拍| 亚洲情侣在线| 日av在线播放中文不卡| 国产欧美熟妇另类久久久| 9i在线看片成人免费| 亚洲精品久久区二区三区蜜桃臀| 丝袜国产在线| 精品视频1区2区3区| 伦理片一区二区| 忘忧草精品久久久久久久高清| 91国产精品电影| 国产麻豆免费视频| 国产午夜亚洲精品不卡| 日韩精品综合在线| 95精品视频| 一本色道久久综合亚洲精品小说| 久久精品这里只有精品| 麻豆精品一二三| 久久综合伊人77777麻豆| dy888亚洲精品一区二区三区| 色呦呦国产精品| 亚洲成年人av| 亚洲人成免费网站| 国产精品热视频| 亚洲人午夜射精精品日韩| 亚洲精品成a人| 五月婷婷六月合| 国产伦精品一区二区三区视频 | 最近2019中文字幕第三页视频| 精品一区二区三区人妻| 狠狠色2019综合网| 日韩区国产区| 色综合亚洲图丝熟| 亚洲第一页自拍| 人妻人人澡人人添人人爽| 美女视频网站黄色亚洲| 日韩精品久久久免费观看| 性国裸体高清亚洲| 亚洲精品720p| 黄色激情视频在线观看| 国产黄人亚洲片| 可以在线看黄的网站| **国产精品| 日韩中文在线视频| 中国女人真人一级毛片| 国产性做久久久久久| 欧美黄色一级片视频| 亚洲另类春色校园小说| 97超级碰碰碰久久久| 天天操天天干天天舔| 天天爽夜夜爽夜夜爽精品视频| 麻豆tv在线观看| 国产综合亚洲精品一区二| 国产精华一区| 国产伦理精品| 亚洲人精选亚洲人成在线| 草莓视频18免费观看| 久久久久国产精品免费免费搜索| www.超碰com| 日本道不卡免费一区| 国产日韩欧美成人| 国产区在线看| 精品国产伦理网| 欧美日韩一二三四区| 久久蜜桃一区二区| 密臀av一区二区三区| 日韩中文欧美| 97人人干人人| 韩日毛片在线观看| 亚洲亚裔videos黑人hd| 这里只有精品9| 一级特黄大欧美久久久| 香港三日本8a三级少妇三级99| 中文一区二区| 日韩在线观看电影完整版高清免费| 国产精品久久久久久吹潮| 最近2019年好看中文字幕视频| 国产精品日韩无码| 亚洲国产精品一区二区久久| 老牛影视av老牛影视av| 久久成人久久鬼色| 久草视频这里只有精品| 香蕉久久夜色精品国产使用方法 | 国产第一页在线观看| 一区精品在线播放| 日本一区二区在线观看视频| 久久久久久9| 欧美日韩一区二区三区电影| 国产精东传媒成人av电影| 青青草99啪国产免费| 免费高清在线观看| 亚洲国产精品女人久久久| 中文字幕人妻互换av久久 | 麻豆成人免费视频| 国产精品久久综合| 好男人香蕉影院| 蜜乳av一区二区| 日韩小视频网站| 成人aaaa| 国内视频一区二区| 色诱色偷偷久久综合| 78m国产成人精品视频| 色多多视频在线观看| 亚洲国产天堂久久综合网| 亚洲视频在线观看免费视频| 欧美日韩激情视频8区| 亚洲色图 激情小说| 99麻豆久久久国产精品免费| 国产成人在线综合| 天堂一区二区在线| 青青在线免费观看| 亚洲成av人电影| 日本一区二区三区免费看| 国产 日韩 欧美 综合 一区| 国产精品色婷婷视频| 色戒汤唯在线观看| 久久久久久久影院| 哥也色在线视频| 一本色道久久88综合日韩精品 | 成人在线免费观看av| 91精品精品| 一区在线电影| 国产区精品区| 蜜桃av久久久亚洲精品| 豆花视频一区二区| 亚洲综合视频1区| 日韩一级视频| 国产精品久久久久9999| 毛片无码国产| 热99在线视频| 麻豆免费在线| 69av在线视频| 91吃瓜在线观看| 久久久久久久久久国产| 97超碰资源站在线观看| www亚洲精品| 日本www在线观看视频| 主播福利视频一区| 成人免费在线电影| 亚洲最新中文字幕| 国产女主播在线直播| 亚洲欧美三级伦理| 精品电影在线| 伊人激情综合网| 黄色片视频在线观看| 亚洲欧洲激情在线| 激情在线视频| 最近2019年中文视频免费在线观看| 国产高清美女一级毛片久久| 亚洲午夜精品久久久久久性色| 噜噜噜噜噜在线视频| 亚洲欧洲激情在线| 成人好色电影| 精品国模在线视频| a级影片在线观看| 久久久久成人网| 高清在线视频不卡| 日本精品在线视频 | 中文亚洲欧美| 乱子伦视频在线看| 免费观看在线色综合| 在线观看免费不卡av| 国内不卡的二区三区中文字幕 | 国产欧美日韩精品一区二区免费| 日韩欧美一区二区三区久久婷婷| 日韩午夜电影网| 久久久久久久久久久久久国产| 欧美国产先锋| 精品欧美一区免费观看α√| 首页综合国产亚洲丝袜| 亚洲欧美日韩综合网| 国产精品一区二区在线播放| 精品视频站长推荐| 欧美—级在线免费片| 久久高清内射无套| 精品美女国产在线| 最近中文字幕免费观看| 日韩一区二区免费视频| 日韩一区二区三区不卡| 国产亚洲精品久久久优势 | 亚洲激情图片小说视频| 日本一区二区欧美| 欧美在线观看禁18| www.黄色av| 亚洲欧美中文日韩在线v日本| 欧美69xxx| 97国产精品人人爽人人做| 日韩欧美精品一区二区综合视频| 91青草视频久久| 秋霞蜜臀av久久电影网免费| 亚洲成色www久久网站| 欧美色123| 天天爽人人爽夜夜爽| 国产成a人无v码亚洲福利| a天堂中文字幕| 亚洲一区二区三区中文字幕| 久久久久久无码精品大片| 精品国产百合女同互慰| 午夜激情视频在线| 91精品国产91久久久久久| 国产中文欧美日韩在线| 欧美三级华人主播| 亚洲午夜精品久久久久久app| 久久久久国产一区| 91在线小视频| 免费一级肉体全黄毛片| 欧美日韩一区二区三区在线看 | 日韩中文理论片| 深夜福利视频一区二区| 亚洲r级在线观看| 久久综合影院| 日日摸日日碰夜夜爽无码| 久久99久久精品| 午夜精产品一区二区在线观看的| 亚洲一区成人在线| 国产视频www| 永久免费精品影视网站| 在线黄色的网站| 国产精品二区二区三区| 婷婷亚洲五月色综合| 成人中文字幕av| 91麻豆免费视频| 国产精品自拍视频一区| 日韩精品影音先锋| 成人三级网址| 成人午夜在线观看| 欧美gvvideo网站| 三年中国国语在线播放免费| 久久综合狠狠综合久久激情| 日本三级理论片| 欧美mv日韩mv国产网站app| 蜜桃av在线免费观看| 国产精品女人久久久久久| 国产亚洲电影| 国产一线二线三线在线观看| 久久综合成人精品亚洲另类欧美| 日本在线视频免费| 亚洲精品一区在线观看| 欧美1—12sexvideos| 不卡视频一区二区三区| 欧美日韩专区| 一级黄色大片免费看| 亚洲精品国产成人久久av盗摄 | 国产一区高清| 亚洲成人a**址| 美女免费视频一区| 蜜桃av.com| 欧美卡1卡2卡| bt在线麻豆视频| 福利精品视频| 亚洲理论在线| 国产小视频自拍| 欧美自拍丝袜亚洲| 婷婷视频在线| 亚洲伊人久久综合| 激情久久综合| 亚洲观看黄色网| 色婷婷久久一区二区三区麻豆| 精品99又大又爽又硬少妇毛片| 国产精品扒开腿做爽爽爽视频 | 哺乳挤奶一区二区三区免费看| 国产人妻人伦精品| hitomi一区二区三区精品| 五月婷婷亚洲综合| 国产一区二区三区视频| 国产91欧美| 久久久久久久久久久综合| av在线免费不卡| 中文字幕精品视频在线观看| 一区二区三区四区精品| 国产日韩在线观看视频| www.夜夜爱| 久久久久久久久蜜桃| 中文字幕一二三四| 欧美不卡视频一区发布| 久久精品凹凸全集| 久久精品影视大全| 亚洲美女区一区| 无码国产精品96久久久久| 国产精品9999| 欧美视频官网| brazzers精品成人一区| 日韩一区二区视频在线观看| 国产拍在线视频| 一区二区成人国产精品 | 亚洲成在人线av| 亚洲第一二三四区| 免费成人进口网站| 不卡的看片网站| 中文在线字幕av| 久久久久成人网| 欧美疯狂party性派对| 成人免费看片载| 欧美日韩高清一区| 欧美亚洲日本精品| 精品少妇人妻av一区二区| 2024国产精品| 99久久久无码国产精品免费| 国产成人精品电影| 欧美三级乱码| 精品在线观看一区|