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

MySQL 核心模塊揭秘

數據庫 MySQL
鎖模塊結構的 rec_hash 屬性是個哈希表,分為很多小格子,每個格子管理一個行鎖結構鏈表。latches 屬性用于保證同一時刻只有一個線程讀寫 rec_hash 屬性的同一個格子對應的行鎖結構鏈表,以及同一時刻只有一個線程讀寫同一個表對象的 locks 鏈表。

1. 引言

前面三篇文章,我們分別介紹了 InnoDB 表鎖、行鎖,以及它們的鎖結構。

表鎖結構和行鎖結構是鎖模塊的基礎組成部分,它們就像一塊磚,哪里需要哪里搬。

然而,要蓋房子,光有磚不行,還得有鋼筋、水泥等材料,這些材料就由鎖模塊結構提供。

鎖模塊結構只有一個對象(lock_sys),在 InnoDB 中是全局唯一的。

2. 鎖模塊結構

鎖模塊結構類型為 lock_sys_t,去掉注釋以及兩個無關緊要的屬性之后,簡化如下:

struct lock_sys_t {
  locksys::Latches latches;
  hash_table_t *rec_hash;
  hash_table_t *prdt_hash;
  hash_table_t *prdt_page_hash;
  Lock_mutex wait_mutex;
  srv_slot_t *waiting_threads;
  srv_slot_t *last_slot;
  bool rollback_complete;
  std::chrono::steady_clock::duration n_lock_max_wait_time;
  os_event_t timeout_event;
}

單從屬性數量上看,鎖模塊結構并不復雜,甚至可以說比較簡單。

其實,鎖模塊的復雜性,不在于表鎖結構、行鎖結構,也不在于鎖模塊結構,而是在于各個事務、各種加鎖場景相互交錯導致的錯綜復雜的加鎖結果。

例如,一個事務等待獲得另一個事務持有的鎖,雖然會出現或長或短的等待鏈,但也不算太壞的情況。更壞的情況是出現了環形的等待鏈,也就是出現了死鎖。

如果出現死鎖,我們又需要被動復現死鎖,以解釋形成死鎖的原因,那簡直頭大了。

為了不滑入復雜的深淵,我們就此打住,先來介紹鎖模塊結構的屬性。

鎖模塊結構中有三個類型為 hash_table_t 的屬性,分別是 rec_hash、prdt_hash、prdt_page_hash。

其中,prdt_hash、prdt_page_hash 由謂詞鎖使用。我們并不打算介紹謂詞鎖,忽略這兩個屬性,也就順理成章了。

n_lock_max_wait_time 屬性的值是 MySQL 本次啟動以來,行鎖的最長等待時間。通過以下命令可以查詢到這個屬性的值:

show status like 'innodb_row_lock_time_max';

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Innodb_row_lock_time_max | 50157 |
+--------------------------+-------+

rollback_complete 屬性,用于 MySQL 啟動過程中,標識從 undo 日志中恢復出來的、需要回滾的事務是否已全部回滾完成。

如果 rollback_complete = false,說明從 undo 日志中恢復出來的、需要回滾的事務還沒有全部回滾完成,InnoDB 會遍歷讀寫事務鏈表(trx_sys->rw_trx_list),釋放這些事務加的表鎖和行鎖。

這些事務全部回滾完成之后,rollback_complete 會被修改為 true。

前面介紹了鎖模塊結構中兩個比較簡單的屬性,剩下的其它屬性,我們分為幾個小節一一介紹。

2.1 誰來管理行鎖結構?

上一篇文章,我們介紹過,事務對多條記錄加行鎖,滿足條件時,可以共用一個行鎖結構。

雖然共用能減少行鎖結構的數量,但是,同一時刻,InnoDB 中可能還是有很多行鎖結構。

這么多行鎖結構,要怎么組織,用到時才能方便、快速的找到呢?

這就需要用到鎖模塊結構的 rec_hash 屬性了。

rec_hash 屬性是個哈希表,它的類型為 hash_table_t,創建鎖模塊對象(lock_sys)之后分配內存:

void lock_sys_create(ulint n_cells)
{
  ...
  // 創建鎖模塊對象,分配內存
  lock_sys = static_cast<lock_sys_t *>(
      ut::zalloc_withkey(...));
  ...
  // 創建哈希表(rec_hash),分配內存
  lock_sys->rec_hash =
    ut::new_<hash_table_t>(n_cells);
  ...
}

lock_sys_create() 由 srv_start() 調用:

dberr_t srv_start(bool create_new_db) {
  ...
  lock_sys_create(srv_lock_table_size);
  ...
}

變量 srv_lock_table_size 在 innodb_init_params() 中賦值,它的值會傳遞給 lock_sys_create() 的參數 n_cells。

static int innodb_init_params() {
  ...
  srv_lock_table_size = 
    5 * (srv_buf_pool_size / UNIV_PAGE_SIZE);
  ...
}

srv_buf_pool_size 是 buffer pool 的大小,UNIV_PAGE_SIZE 是一個數據頁的大小,它們的單位都是字節。

以 buffer pool 大小為 128M、數據頁大小為 16K 為例,變量 srv_lock_table_size 的值計算如下:

// 128M = 134217728 字節
// 16K  = 16384 字節
srv_lock_table_size = 5 * (134217728 / 16384) 
                    = 40960

變量 srv_lock_table_size 的值(40960)最終會傳遞給 lock_sys_create() 的參數 n_cells。用 40960 替換 n_cells 之后如下:

void lock_sys_create(ulint n_cells)
{
  ...
  lock_sys->rec_hash = 
    ut::new_<hash_table_t>(40960);
  ...
}

以上代碼說明 buffer pool 大小為 128M,數據頁大小為 16K 時,鎖模塊結構的 rec_hash 屬性有 40960 個格子。

每個格子都有編號,從 0 開始,一直到 40959。

這些格子并不是用來存儲行鎖結構,而是用來管理行鎖結構,它們的作用相當于線頭,找到了線頭就能牽出一根線。

創建行鎖結構之后,會先根據行鎖結構中那些記錄所屬數據頁的頁號和表空間 ID,計算得到哈希值,再根據哈希值計算得到格子的編號。

多個行鎖結構可能計算得到相同的哈希值,從而得到相同的編號,對應到同一個格子,這些行鎖結構通過各自的 hash 屬性形成一個行鎖結構鏈表。如果我們把這個鏈表看成一根線,這個格子就是這根線的線頭。

計算出格子編號之后,行鎖結構會插入到格子對應的行鎖結構鏈表的最前面。

想要找到某個行鎖結構,也需要根據同樣的規則,計算得到格子編號,再根據編號找到格子,最后遍歷這個格子對應的行鎖結構鏈表,以找到目標行鎖結構。

2.2 誰來保護表鎖和行鎖結構?

前面我們介紹了 rec_hash 是個哈希表,分為很多格子,每個格子管理一個行鎖結構鏈表。同一個鏈表的所有行鎖結構,計算得到的哈希值相同。

事務加行鎖時,會優先考慮共用已有的行鎖結構,這就要先找到一個可以共用的行鎖結構。

首先,需要找到 rec_hash 的某個格子。

然后,遍歷這個格子對應的行鎖結構鏈表,并根據共用條件,判斷某個行鎖結構是否可以共用。

事務加行鎖時,如果生成了新的行鎖結構,需要找到 rec_hash 的某個格子,把行鎖結構插入到這個格子對應的行鎖結構鏈表的最前面。

事務提交或回滾時,釋放所有行鎖,需要找到每個鎖結構在哪個格子對應的行鎖結構鏈表中,并從鏈表中刪除這個行鎖結構。

事務加表鎖時,會遍歷這個表對象的 locks 鏈表,以判斷可以立即獲得表鎖,還是需要進入等待狀態。

事務提交或回滾時,釋放所有表鎖,需要從每個表對象的 locks 鏈表中刪除這個表鎖結構。

多個事務執行上面這些操作,可能會同時讀寫 rec_hash 中某個格子對應的行鎖結構鏈表,也可能同時讀寫某個表對象的 locks 鏈表。

為了避免并發操作同時讀寫同一個行鎖結構鏈表、或者同時讀寫同一個表對象的 locks 鏈表出現沖突,需要有個什么東西,來限制同一時刻只有一個事務讀寫某個行鎖結構鏈表、或者某個表對象的 locks 鏈表。

于是,就有了鎖模塊結構的 latches 屬性,它的類型為 locksys::Latches。

class Latches {
 private:
  ...
  Unique_sharded_rw_lock global_latch;
  Page_shards page_shards;
  Table_shards table_shards;
  ...
}

latches 也是一個對象,有三個屬性,分別為 global_latch、page_shards、table_shards。

事務提交或回滾時,釋放所有行鎖和表鎖會用到 global_latch。

事務加行鎖時,會用到 page_shards。

事務加表鎖時,會用到 table_shards。

page_shards、table_shards 的類型分為 Page_shards、Table_shards,定義如下:

static constexpr size_t SHARDS_COUNT = 512;

class Page_shards {
  ...
  Padded_mutex mutexes[SHARDS_COUNT];
  ...
}

class Table_shards {
  ...
  Padded_mutex mutexes[SHARDS_COUNT];
  ...
}

Page_shards 的 mutexes 屬性是個數組,有 512 個元素。

有新的行鎖結構需要加入某個行鎖結構鏈表,或者需要遍歷某個行鎖結構鏈表以找到目標行鎖結構時,會根據行鎖結構中那些記錄所屬數據頁的頁號和表空間 ID,計算得到哈希值,再根據哈希值計算得到數組下標,到 mutexes 數組中拿到下標對應的互斥量,就可以保護需要讀寫的行鎖結構鏈表了。

Table_shards 的 mutexes 屬性也是個數組,同樣有 512 個元素。

某個表對象的 locks 鏈表需要保護時,會直接用表 ID 對 512 取模(table_id % 512),得到的結果作為數組下標,到 mutexes 數組中拿到下標對應的互斥量,就可以保護這個表對象的 locks 鏈表了。

2.3 鎖等待了怎么辦?

鎖模塊結構中,有三個屬性和鎖等待相關,分別是 wait_mutex、waiting_threads、last_slot,它們的初始化代碼如下:

void lock_sys_create(ulint n_cells)
{
  ulint lock_sys_sz;
  // 鎖模塊結構占用的內存大小
  // 加上 waiting_threads 指向的內存區域的大小
  // 因為這兩部分要一起分配內存
  lock_sys_sz = sizeof(*lock_sys) 
              + srv_max_n_threads 
              * sizeof(srv_slot_t);
  ...
  void *ptr = &lock_sys[1];
  lock_sys->waiting_threads = 
    static_cast<srv_slot_t *>(ptr);
  // 初始化時
  // last_slot 和 waiting_threads 指向同一個位置
  lock_sys->last_slot = 
    lock_sys->waiting_threads;

  mutex_create(LATCH_ID_LOCK_SYS_WAIT, 
    &lock_sys->wait_mutex);
  ...
}

waiting_threads 屬性是個指針,它指向一片內存區域,這片內存區域分為 srv_max_n_threads 個 slot,每個 slot 存放一個 srv_slot_t 對象。

srv_max_n_threads 在 innodb_init_params() 中賦值,硬編碼為 102400。

也就是說,waiting_threads 屬性指向的內存區域,最多可以存放 102400 個 srv_slot_t 對象。

圖片如果某個事務不能立即獲得鎖(表鎖或行鎖),就會在這片內存區域中找到一個空閑的 slot,構造一個包含該事務以及鎖信息的 srv_slot_t 對象放入這個 slot,并標記這個 slot 為已使用狀態。

last_slot 屬性也是個指針,初始化時,和 waiting_threads 屬性指向相同的內存地址。

隨著不斷有事務進入鎖等待狀態、以及處于鎖等待狀態的事務獲得鎖,last_slot 會不斷變化。

不過,不管怎么變化,last_slot 始終遵循一個原則,就是它指向的那個 slot,以及之后的所有 slot 都處于空閑狀態。

為什么需要 last_slot?

因為后臺線程檢查鎖等待是否超時,會從后往前遍歷 waiting_threads 屬性指向的內存區域。

如果沒有 last_slot,每次遍歷都需要從最后一個 slot 開始,到第一個 slot 為止,檢查每個 slot 對應的鎖等待是否超時。

然而,通常情況下,waiting_threads 屬性指向的內存區域中的 102400 個 slot,其中大部分都是空閑的。

空閑 slot 沒有被正在等待鎖的事務占用,實際上不需要檢查鎖等待是否超時。

如果沒有 last_slot,每次檢查鎖等待是否超時,都要遍歷所有 slot,顯然很浪費時間。

為了提升檢查鎖等待超時的效率,只需要遍歷已使用狀態的 slot 就可以了,這就需要有個東西來標識哪個范圍內的 slot 是已使用狀態,于是,就有了 last_slot。

有一點需要說明,如果某個事務曾經進入過鎖等待狀態,占用了某個 slot。某一輪檢查鎖等待超時之前,這個事務獲得了鎖,又會把它占用的那個 slot 重置為空閑狀態。

所以,last_slot 之前的那些 slot,并不全部是已使用狀態,也有一些是空閑的,但是這個數量應該不會很多,遍歷這些少量的空閑 slot,也不會浪費太多時間。

介紹完 waiting_threads、last_slot,終于輪到 wait_mutex 屬性了。

從屬性名上看,wait_mutex 屬性顯然是個互斥量。

多個事務同時讀寫 last_slot 屬性,可能造成沖突,這就需要有個東西來保證同一時刻只有一個線程讀寫 last_slot 屬性,于是就有了 wait_mutex。

2.4 那就發個鎖等待通知

事務想要加鎖(表鎖或行鎖),如果發生了鎖等待,新出現的鎖等待,和原來那些鎖等待攪和在一起,有可能會出現死鎖。

為了及時發現死鎖,事務進入鎖等待狀態之前,會觸一個事件,通知后臺線程出現了鎖等待。

這個事件就保存在鎖模塊結構的 timeout_event 屬性中。

監聽 timeout_event 事件的后臺線程收到通知之后,就會開始檢查是否發生了死鎖。如果檢查發現了死鎖,就及時解決。

3. 總結

鎖模塊結構的 rec_hash 屬性是個哈希表,分為很多小格子,每個格子管理一個行鎖結構鏈表。

latches 屬性用于保證同一時刻只有一個線程讀寫 rec_hash 屬性的同一個格子對應的行鎖結構鏈表,以及同一時刻只有一個線程讀寫同一個表對象的 locks 鏈表。

waiting_threads 屬性指向一片分為 102400 個 slot 的內存區域,每個等待獲得鎖的事務會占用其中一個 slot。

last_slot 屬性用于減少檢查鎖等待超時需要遍歷的 slot 數量,提升效率。

wait_mutex 屬性用于保證同一時刻只有一個線程讀寫 last_sot 屬性。

timeout_event 屬性用于發生鎖等待時,通知后臺線程及時檢查是否出現了死鎖。

作者:操盛春,愛可生技術專家,公眾號『一樹一溪』作者,專注于研究 MySQL 和 OceanBase 源碼。

責任編輯:武曉燕 來源: 愛可生開源社區
相關推薦

2024-05-15 09:05:42

MySQL核心模塊

2024-04-03 08:20:53

MySQL核心模塊

2024-08-28 08:50:11

MySQL核心模塊

2024-03-27 13:33:00

MySQLInnoDB事務

2024-08-07 14:58:00

MySQL釋放鎖核心模塊

2024-10-16 11:11:51

隔離InnoDB死鎖

2024-05-29 10:17:01

2024-10-30 10:38:08

2024-09-04 08:44:18

MySQL核心模塊

2025-02-26 08:26:38

2024-11-05 10:52:07

2010-01-26 14:04:02

2021-06-21 17:00:05

云計算Hologres云原生

2022-07-12 10:38:25

分布式框架

2025-01-17 08:17:55

2009-07-21 09:06:14

開發團隊Windows 7

2023-08-24 10:33:19

serviceexportsinfo類

2024-05-08 16:54:21

Python編程開發

2019-01-23 10:42:21

華為云

2025-08-20 16:21:30

點贊
收藏

51CTO技術棧公眾號

日韩wuma| 97在线视频一区| 欧美国产日韩另类 | 成人高清视频免费观看| 91成人精品网站| 国产精品综合激情| 国产精品毛片av| 欧美视频三区在线播放| 国产日产欧美一区二区| 欧美一区二区三区少妇| 久久精品国产成人一区二区三区| 久久久久五月天| 美国美女黄色片| 精品自拍偷拍| 欧美精品久久99| 337p粉嫩大胆噜噜噜鲁| 爆操欧美美女| 日本一区二区不卡视频| 国产精品视频免费观看| 国产精品一级二级| 性欧美xxxx大乳国产app| 欧美成人一二三| 精品女人久久久| 人人香蕉久久| 精品毛片网大全| 精品视频免费在线观看| 日韩一区二区三区四区视频| 亚洲午夜久久久影院伊人| 日韩av毛片在线观看| 国产成人一二片| 欧美三级中文字幕| 日本精品一区在线观看| 一区二区三区伦理| 国产精品久久久久久久久免费樱桃 | 污视频网站在线免费| 国产日韩欧美精品电影三级在线| 国产精品亚洲综合| 亚洲成人av综合| 国产一区二区三区四区五区美女| 国产精品一香蕉国产线看观看| av大片在线免费观看| 欧美韩国一区| 欧美成人一区二区三区电影| 97成人资源站| 亚洲综合激情在线| 久久国产精品视频| 亚洲色偷偷综合亚洲av伊人| 97在线精品| 日韩在线观看免费高清完整版| 国产精品免费无码| 国产影视一区| 中文在线不卡视频| 国产又粗又猛又爽又黄av| 国内精品视频在线观看| 亚洲欧美日韩精品久久奇米色影视 | 亚洲天堂av片| 日韩精品一卡二卡三卡四卡无卡| 久久噜噜噜精品国产亚洲综合| 久久婷婷综合国产| 国产一区美女| 午夜免费久久久久| 日本免费观看视| 一本色道88久久加勒比精品| 欧美性受xxxx白人性爽| 亚洲欧美一区二区三区在线观看| 久久久噜噜噜久久狠狠50岁| 国产精品国产三级国产aⅴ浪潮| 波多野结衣电影在线播放| 蜜芽一区二区三区| 成人福利视频网| www.麻豆av| 99re在线视频这里只有精品| 蜜桃视频日韩| 免费黄网站在线| 亚洲精品视频在线观看网站| 成人av在线不卡| 在线观看特色大片免费视频| 91久久精品日日躁夜夜躁欧美| 久久婷五月综合| 精品国产鲁一鲁****| 精品免费日韩av| 香蕉网在线播放| 久久国产综合| 久久久久久亚洲| 夜夜爽妓女8888视频免费观看| 免费的成人av| 国产欧美日韩一区二区三区| 成人在线免费观看| 亚洲一区二区精品视频| 男人操女人免费软件| 99久久婷婷国产综合精品首页 | 第四色在线视频| 日韩欧美精品| 国产做受69高潮| 中文字幕乱码人妻二区三区| 国产成人午夜高潮毛片| 日本午夜精品电影| 福利在线视频网站| 富二代精品短视频| 性久久久久久久久久久久久久| 麻豆精品少妇| 久久中文字幕一区| 六月丁香婷婷综合| 国产精品一卡二卡在线观看| 日本精品一区二区三区不卡无字幕| 麻豆最新免费在线视频| 日韩欧美在线网址| 丰满人妻一区二区三区免费视频棣| 奇米色欧美一区二区三区| 色综合久久88| 一级视频在线播放| 久久综合色天天久久综合图片| 日韩视频一二三| 成人高清一区| 日韩大片免费观看视频播放| 久久精品视频免费在线观看| 日韩av不卡在线观看| 国产综合av一区二区三区| 国产三级在线免费观看| 精品久久久久久久久久久久| 精品亚洲视频在线| 欧美一级精品| 日本不卡视频在线播放| 高清乱码毛片入口| 亚洲女同ⅹxx女同tv| 国产wwwxx| 欧美猛男做受videos| 992tv在线成人免费观看| 亚洲av无码片一区二区三区 | 中文字幕欧美人与畜| 日韩电影免费观| 日韩激情av在线播放| 精品无码一区二区三区电影桃花| 精品在线免费视频| 亚洲欧美精品| yy6080久久伦理一区二区| 亚洲男人的天堂网站| 天天操天天摸天天干| 成人午夜精品在线| 成年人网站国产| 亚洲精品一二三**| 色综合久久久久久中文网| 国产婷婷在线视频| 亚洲精品中文在线影院| www激情五月| 一级毛片免费高清中文字幕久久网| 国产精品专区一| 日本三级视频在线播放| 欧美婷婷六月丁香综合色| 韩国三级hd中文字幕| 日韩精品成人一区二区三区| 日韩精品久久久免费观看| 在线免费日韩片| 亚洲色图17p| 中文字幕免费在线看| 国产精品欧美久久久久一区二区 | 亚洲 日本 欧美 中文幕| 久久久久久久久伊人| 国产福利一区视频| 欧美日中文字幕| 国产欧美一区二区三区久久人妖| 免费大片黄在线| 欧美不卡123| 日本一级黄色录像| 91在线视频播放地址| 精品久久久久久久免费人妻| 成人av国产| 亚洲一区二区三区xxx视频| 91中文在线| 亚洲精品国产拍免费91在线| 亚洲国产av一区二区三区| 国产精品美女久久久久久久久久久| 成人av毛片在线观看| 好吊一区二区三区| 欧美久久在线| 亚洲欧美专区| 欧美激情一级精品国产| 午夜视频免费在线| 欧美体内she精视频| 日本妇女毛茸茸| 91在线码无精品| 在线观看高清免费视频| 欧美1级日本1级| 精品久久久久久乱码天堂| 成人福利一区二区| 欧美激情中文字幕在线| 国产资源在线播放| 日韩一级完整毛片| 日本高清不卡码| 亚洲视频资源在线| 3d动漫精品啪啪一区二区下载| 久久精品国产一区二区三区免费看| 日韩专区第三页| 国产精品亚洲片在线播放| 亚洲在线免费视频| 黑人巨大精品| 欧美国产第一页| av福利精品| 亚洲国产一区自拍| 国产农村妇女毛片精品| 欧美性极品xxxx娇小| 久草综合在线视频| 久久久国产午夜精品| 18深夜在线观看免费视频| 日韩精品免费视频人成| 国产亚洲黄色片| 亚洲91中文字幕无线码三区| 蜜桃视频成人| 成人av影音| 成人免费看黄网站| 日韩欧美一区二区三区在线观看| 欧美激情一区二区三区久久久 | 日韩欧美在线精品| 亚洲va男人天堂| av激情成人网| 欧美一级电影免费在线观看| 在线观看中文| 久久久国产精品一区| 91成人高清| 亚洲日本aⅴ片在线观看香蕉| 欧美一级一区二区三区| 欧美一区二区免费观在线| 中文字幕在线2018| 色综合久久88色综合天天| 久久久99精品| 亚洲精品高清视频在线观看| 免费成人美女女在线观看| 久久嫩草精品久久久久| 欧美深性狂猛ⅹxxx深喉| 国产91在线观看| www.五月天色| 美国毛片一区二区| av视屏在线播放| 噜噜噜91成人网| 精品视频无码一区二区三区| 亚洲激情亚洲| a级黄色一级片| 亚洲国产精品第一区二区| 国产真人做爰毛片视频直播 | 国产精品对白交换视频| 2019男人天堂| 国产精品日韩成人| 情侣偷拍对白清晰饥渴难耐| 国产精品久久久久永久免费观看| 无码人中文字幕| 中文字幕在线观看一区| 国产jizz18女人高潮| 中文字幕+乱码+中文字幕一区| 四虎国产精品成人免费入口| 久久久久久久久蜜桃| 精品无码国产污污污免费网站 | 欧美激情视频一区二区三区| 欧美丝袜足交| 欧美一二三区| 日本黄色精品| 强伦女教师2:伦理在线观看| 围产精品久久久久久久| 久久精品在线免费视频| 亚洲人成毛片在线播放女女| 无码精品a∨在线观看中文| 水野朝阳av一区二区三区| 538在线视频观看| 久久精品国产亚洲a| 国产九九九视频| av成人动漫在线观看| 亚洲a v网站| 亚洲欧洲精品天堂一级| 黄网站免费在线| 日韩欧美精品在线观看| 真实新婚偷拍xxxxx| 91精品国产91热久久久做人人| 亚洲免费视频网| 亚洲女人初尝黑人巨大| 欧美jizz18性欧美| 久久久久久久97| 免费亚洲电影| 亚洲tv在线观看| 人人香蕉久久| 小说区视频区图片区| 日韩亚洲国产欧美| 欧美 日韩 国产 激情| 国产精品综合一区二区三区| 青青草视频网站| 国产精品美女久久久久久2018| www.毛片com| 欧美性猛交丰臀xxxxx网站| 一区二区三区精| 亚洲精品国精品久久99热| 日韩子在线观看| 91精品成人久久| 欧美亚洲人成在线| 国产精品永久入口久久久| 欧美日韩久久精品| 男女啪啪免费视频网站| 另类小说欧美激情| 日韩精品视频一区二区| 亚洲欧洲日韩在线| 亚洲s码欧洲m码国产av| 精品区一区二区| av资源在线观看免费高清| 性视频1819p久久| 白嫩亚洲一区二区三区| 热re99久久精品国产99热| 国内精品美女在线观看| 尤物国产在线观看| 国产亚洲欧美一级| 日韩精品久久久久久久| 91麻豆精品国产91| h网站视频在线观看| 欧美怡红院视频一区二区三区 | 欧美主播一区二区三区美女 久久精品人| 性欧美欧美巨大69| 亚洲色图久久久| 久久久久久影视| 日本少妇裸体做爰| 日韩三级在线观看| 麻豆电影在线播放| 国产精品成av人在线视午夜片| 免费观看成人www动漫视频| 国内外成人激情免费视频| 麻豆精品在线播放| 国产ts在线播放| 欧美午夜激情小视频| 免费av网站观看| 久久久伊人欧美| 国产精品chinese在线观看| 亚洲小说欧美另类激情| 奇米四色…亚洲| 人妻精品久久久久中文| 日韩欧美国产成人| 色视频在线观看福利| 69久久夜色精品国产69| 久久精品色综合| 久久久久久人妻一区二区三区| 国产a级毛片一区| 国模无码国产精品视频| 日韩视频一区在线观看| 2020国产在线视频| 91日韩在线视频| 正在播放日韩欧美一页| 亚洲黄色av片| 综合久久国产九一剧情麻豆| 亚洲一卡二卡在线| 日韩视频中文字幕| 国产情侣一区在线| 400部精品国偷自产在线观看| 国产精品一区二区你懂的| 午夜精品一区二区三区视频| 日韩一区二区三区在线观看 | 91视频精品| 婷婷激情小说网| 亚洲人一二三区| 亚洲精品一区二区三区区别| 国内精品视频一区| 五月综合久久| 欧美黄色性生活| 亚洲视频一区在线| 国产99久一区二区三区a片| 久久久久久国产精品| 久久中文资源| www.欧美日本| 亚洲欧美日韩电影| 黄色小视频免费在线观看| 26uuu国产精品视频| 成人一二三区| 欧洲美女亚洲激情| 亚洲午夜视频在线观看| 免费播放片a高清在线观看| 国产精品美女免费看| 中文乱码免费一区二区三区下载| www.黄色网| 色狠狠综合天天综合综合| 午夜看片在线免费| 国产精品三区www17con| 免播放器亚洲| www.超碰在线观看| 亚洲精品美女视频| 国产精品麻豆成人av电影艾秋| 成人小视频在线观看免费| 久久精品这里都是精品| 国产免费黄色录像| 国产91精品青草社区| 国产精品99在线观看| 中文字幕在线国产| 欧洲一区在线观看| 青草青在线视频| 日本不卡免费新一二三区| 国产乱码精品一区二区三| 国产高清中文字幕| 久久精品久久久久久国产 免费| 欧美黑白配在线| 182午夜视频| 日韩欧美在线国产| 青青青国内视频在线观看软件| 久久综合九九| 国产成人精品亚洲777人妖| 欧美国产一级片| 韩国国内大量揄拍精品视频| 久久综合电影| 深爱五月激情网|