日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

腾讯云数据库团队:MySQL AHI 实现解析

發布時間:2023/12/20 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯云数据库团队:MySQL AHI 实现解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL 定位用戶記錄的過程可以描述為:打開索引 -> 根據索引鍵值逐層查找 B+ 樹 branch 結點 -> 定位到葉子結點,將 cursor 定位到滿足條件的 rec 上;如果樹高為 N, 則需要讀取索引樹上的 N 個結點并進行比較,如果 buffer_pool 較小,則大量的操作都會在 pread 上,用戶響應時間變長;另外,MySQL中 Server 層與 Engine 之間的是以 row 為單位進行交互的,engine 將記錄返回給 server 層,server 層對 engine 的行數據進行相應的計算,然后緩存或發送至客戶端,為了減少交互過程所需要的時間,MySQL 做了兩個優化:

  • 如果同一個查詢語句連續取出了 MYSQL_FETCH_CACHE_THRESHOLD(4) 條記錄,則會調用函數 row_sel_enqueue_cache_row_for_mysql 將 MYSQL_FETCH_CACHE_SIZE(8) 記錄緩存至 prebuilt->fetch_cache 中,在隨后的 prebuilt->n_fetch_cached 次交互中,都會從prebuilt->fetch_cache 中直接取數據返回到 server 層,那么問題來了,即使是用戶只需要 4 條數據,Engine 層也會將 MYSQL_FETCH_CACHE_SIZE 條數據放入 fetch_cache 中,造成了不必要的緩存使用。另外, 5.7 可以根據用戶的設置來調整緩存用戶記錄的條數;

  • Engine 取出數據后,會將 cursor 的位置保存起來,當取下一條數據時,會嘗試恢復 cursor 的位置,成功則并繼續取下一條數據,否則會重新定位 cursor 的位置,從而通過保存 cursor 位置的方法可以減少 server 層 & engine 層交互的時間;

Server 層 & engine 層交互的過程如下,由于 server & engine 的 row format 不一樣,那么 engine row format -> server row format 在讀場景下的開銷也是比較大的。

while (rc == NESTED_LOOP_OK && join->return_tab >= join_tab) {int error;if (in_first_read){ in_first_read= false;error= (*join_tab->read_first_record)(join_tab);} else error= info->read_record(info); /* load data from engine */rc= evaluate_join_record(join, join_tab); /* computed by server */ }復制代碼

AHI 功能作用

由以上的分析可以看到 MySQL 一次定位 cursor 的過程即是從根結點到葉子結點的路徑,時間復雜度為:height(index) + [CPU cost time],上述的兩個優化過程無法省略定位 cursor 的中間結點,因此需要引入一種可以從 search info 定位到葉子結點的方法,從而省略根結點到葉子結點的路徑上所消耗的時間,而這種方法即是 自適應索引(Adaptive hash index, AHI)。查詢語句使用 AHI 的時候有以下優點:

  • 可以直接通過從查詢條件直接定位到葉子結點,減少一次定位所需要的時間;
  • 在 buffer pool 不足的情況下,可以只針對熱點數據頁建立緩存,從而避免數據頁頻繁的 LRU;

但是 AHI 并不總能提升性能,在多表Join & 模糊查詢 & 查詢條件經常變化的情況下,此時系統監控 AHI 使用的資源大于上述的好處時,不僅不能發揮 AHI 的優點,還會為系統帶來額外的 CPU 消耗,此時需要將 AHI 關閉來避免不必要的系統資源浪費,關于 AHI 的適應場景可以參考:mysql_adaptive_hash_index_implementation

AHI 內存結構

AHI 會監控查詢語句中的條件并進行分析(稍后會進行詳細的介紹),當滿足 AHI 緩存建立的條件后,會選擇索引的若干前綴索引列對熱點數據頁組建 hash page 以記錄 hash value -> page block 之間的對應關系, 本小節主要對 AHI 的內存結構 & 內存來源進行相應的介紹,其內存結構如圖:

上圖是 AHI 的一個內存結構示意圖,AHI 主要使用以下兩種內存:

  • 系統初始化分配的 hash_table 的內存,其中每一個 hash_table 的數組大小為:(buf_pool_get_curr_size() / sizeof(void*) / 64),根據機器位數的不同,數組大小不同, 32位機器為 buffer_pool大小的 1/256, 64 位機器為 buffer_pool 大小的 1/512, 此部分內存為系統內存(mem_area_alloc->malloc),主要用于構建 hash_table 結構;
#0 mem_area_alloc (psize=0x7fffffff9888, pool=0x19c27c0) at ../storage/innobase/mem/mem0pool.cc:380 #1 0x0000000000bafb00 in mem_heap_create_block_func (heap=0x0, n=72, file_name=0x10bd7f8 "../storage/innobase/ha/hash0hash.cc", line=303, type=0)at ../storage/innobase/mem/mem0mem.cc:336 #2 0x0000000000d91c3a in mem_heap_create_func (n=72, file_name=0x10bd7f8 "../storage/innobase/ha/hash0hash.cc", line=303, type=0) at ../storage/innobase/include/mem0mem.ic:449 #3 0x0000000000d91d78 in mem_alloc_func (n=72, file_name=0x10bd7f8 "../storage/innobase/ha/hash0hash.cc", line=303, size=0x0) at ../storage/innobase/include/mem0mem.ic:537 #4 0x0000000000d9358b in hash0_create (n=16352) at ../storage/innobase/ha/hash0hash.cc:303 #5 0x0000000000d8f699 in ha_create_func (n=16352, sync_level=0, n_sync_obj=0, type=3) at ../storage/innobase/ha/ha0ha.cc:67 #6 0x0000000000cfeaff in btr_search_sys_create (hash_size=16352) at ../storage/innobase/btr/btr0sea.cc:179 #7 0x0000000000d099f9 in buf_pool_init (total_size=8388608, n_instances=1) at ../storage/innobase/buf/buf0buf.cc:1498 ... (gdb) n 381 return(malloc(*psize)); 復制代碼
  • 當 AHI 對數據頁面構造 AHI 緩存時,此時使用 buffer_pool 的 free 鏈接中的內存,即 buffer_pool 的內存,所以在頁數據發生變化的時候,需要對 AHI 緩存進行相應的維護;

AHI 實現解析

【 AHI 在查詢過程中的作用范圍 】

MySQL 中 Server & Innodb 的交互中是以行為單位進行交互的,Innodb 逐行取數據的過程可以分為以下 6 個步驟:

  • 0.如果發現其它線程需要對btr_search_latch上鎖,則釋放 btr_search_latch,然后執行 1; (5.6 & 5.7 在實現上不同)
  • 1.嘗試從 row_prebuilt_t->fetch_cache 中取數據庫記錄,有則直接返回,如果沒有數據或者不可以使用 fetch cache, 則執行2;
  • 2.在滿足條件的情況下,使用 AHI 定位 cursor 位置并返回數據, 否則執行 3;
  • 3.根據 direction 的值確認是否可以從 row_prebuilt_t中恢復 cursor 的位置,如果 direction = 0 或不可以從 row_prebuilt_t中恢復 cursor 的位置, 則調用 btr_pcur_open_at_index_side 打開索引,調用 btr_cur_search_to_nth_level,如果可以使用 AHI,則快速定位葉子結點,否則遍歷 height(index) 個結點定位 cursor, 然后進入 4;如果可以從 row_prebuilt_t 恢復則執行 5;
  • 4.根據查找的值在葉子結點中逐個匹配,查找滿足條件的記錄,返回數據,取下一條記錄時執行 3,5;
  • 5.移動 cursor 到下一條記錄并返回數據;

AHI 則在第 [2, 3] 兩個步驟中影響著定位葉子結點的過程,根據查詢條件定位葉子節點的過程中發揮著 hash 的作用,AHI 的實現主要包括 AHI 初始化過程、構建條件、使用過程、維護過程、系統監控等部分,我們從源碼的實現的角度上分析上述過程。

【 AHI 初始化過程 】

AHI 作為 buffer_pool 的一部分,是建立查詢條件與 REC 在內存中位置的一個 hash_table, 在系統啟動的時候會隨著 buffer_pool 的初始化而自動的建立相應的內存結構,其初始化過程為:

  • 利用系統內存 (malloc) 創建全局變量 btr_search_sys 及其鎖結構;
  • 利用系統內存 (malloc) 建立 hash_table 內存結構,并初始化其成員變量,其中 hash_table 數組的大小取決于當前 buffer_pool 的 size 與 系統的機器位數,計算公式為:buf_pool_get_curr_size() / sizeof(void*) / 64,hash_table_t 的結構如下所示:
(gdb) p table $37 = (hash_table_t *) 0x1aabfc8 (gdb) p *table $38 = {type = HASH_TABLE_SYNC_NONE, adaptive = 0, n_cells = 0, array = 0x0, n_sync_obj = 0, sync_obj = {mutexes = 0x0, rw_locks = 0x0}, heaps = 0x0, heap = 0x0, magic_n = 0 } 復制代碼

說明:

  • 所有 buffer_pool instances 共享一個 AHI, 而不是每一個 buffer_pool instance 一個 AHI;
  • 5.7.8 之前 AHI 只有一個全局的鎖結構 btr_search_latch, 當壓力比較大的時候會出現性能瓶頸,5.7.8 對 AHI 進行了拆鎖處理,詳情可以參考函數: btr_get_search_table() & btr_search_sys_create()
  • AHI 的 btr_search_latch (bug#62018) & index lock 是MySQL中兩個比較大的鎖,詳情可以參考 Index lock and adaptive search – next two biggest InnoDB problems,5.7 通過對 AHI 鎖拆分 (5.7 commit id: ab17ab91) 以及引入不同的索引鎖協議 (WL#6326) 解決了這兩個問題;

【 AHI 構建條件 】

AHI 是建立在 search info & REC 內存地址之間的映射信息,在系統接受訪問之前并沒有足夠的信息來建立 AHI 的映射信息,所以需要搜集 SQL 語句在執行過程中的 search_info & block info 信息并判斷是否可以為數據頁建立 AHI 緩存,其中:

search info 對應 btr_search_t, 用于記錄 index 中的 n_fields (前綴索引列數) & n_bytes(last column bytes) 信息,這些被用于計算 fold 值;

block info 用于記錄計算 fold 的值所需要的 fields & bytes 之外,還記錄了在此情況下使用 AHI 在此數據頁上潛在成功的次數;

我們簡單的對 AHI 統計信息的幾個方面進行簡單的描述。

  • 觸發 AHI 索引統計的條件

SQL 語句在定位 cursor 的過程中會執行 btr_cur_search_to_nth_level 函數,當打開 AHI 的時候,在btr_cur_search_to_nth_level 返回之前會調用 btr_search_info_update 來更新相應的統計信息,如果當前的索引的 serch_info->hash_analysis < BTR_SEARCH_HASH_ANALYSIS (17),則對 search info & block info 不進行統計,否則則會調用 btr_search_info_update_slow 更新 search info & block info 信息,實現如下:

void btr_search_info_update( /*===================*/dict_index_t* index, /*!< in: index of the cursor */btr_cur_t* cursor) /*!< in: cursor which was just positioned */ {...info->hash_analysis++;if (info->hash_analysis < BTR_SEARCH_HASH_ANALYSIS) {/* Do nothing */return;}btr_search_info_update_slow(info, cursor); } 復制代碼
  • AHI 中索引查詢信息 (index->search_info) 的更新與自適應的過程

背景知識: btr_cur_search_to_nth_level 中在定位 cursor 的過程中會在樹的每一層調用 page_cur_search_with_match 來確定下一個 branch 結點或葉子結點,page_cur_search_with_match 函數會將查詢過程中比較的前綴索引列數 & 最后一列匹配的字節數記錄至 {cursor->up_match, cursor->up_bytes, cursor->low_bytes, cursor->low_match},目的是為了保存與 search tuple 在比較過程時的最小比較單元,詳細的計算過程可以參考 page_cur_search_with_match 的實現代碼。

首先判斷當前 index 是否為 insert buffer tree, 如果是 insert buffer, 則不進行 AHI 等相關的操作;

其次,如果當前索引的 info->n_hash_potential = 0,則會按照推薦算法從 {cursor->up_match, cursor->up_bytes, cursor->low_bytes, cursor->low_match} 推薦出前綴索引列數 & 最后一列的字節數用于計算 AHI 中存儲的鍵 {ha_node_t->fold} 的值。

當 info->n_hash_potential != 0 時,則會判斷當前查詢匹配模式 & index->search_info 中保存的匹配模式是否發生變化,如果沒有發生變化,則會增加此模式下潛在利用 AHI 成功的次數 (info->n_hash_potential),否則需要重新推薦前綴索引列等相關信息,并清空 info->n_hash_potential 的值(info->n_hash_potential = 0),AHI 就是利用這種方法來實現自適應的,所以在打開 AHI 的系統中不建議經常變換查詢條件,前綴索引等信息的計算過程如下:

btr_search_info_update_hash {.../* We have to set a new recommendation; skip the hash analysisfor a while to avoid unnecessary CPU time usage when there is nochance for success */info->hash_analysis = 0; cmp = ut_pair_cmp(cursor->up_match, cursor->up_bytes,cursor->low_match, cursor->low_bytes);if (cmp == 0) { info->n_hash_potential = 0; /* For extra safety, we set some sensible values here */info->n_fields = 1; info->n_bytes = 0; info->left_side = TRUE;} else if (cmp > 0) { info->n_hash_potential = 1; if (cursor->up_match >= n_unique) {info->n_fields = n_unique;info->n_bytes = 0; } else if (cursor->low_match < cursor->up_match) {info->n_fields = cursor->low_match + 1; info->n_bytes = 0; } else {info->n_fields = cursor->low_match;info->n_bytes = cursor->low_bytes + 1; } info->left_side = TRUE;} else {info->n_hash_potential = 1; if (cursor->low_match >= n_unique) {info->n_fields = n_unique;info->n_bytes = 0; } else if (cursor->low_match > cursor->up_match) {info->n_fields = cursor->up_match + 1; info->n_bytes = 0; } else {info->n_fields = cursor->up_match;info->n_bytes = cursor->up_bytes + 1; } info->left_side = FALSE;} } 復制代碼

由以上算法可以看出,選擇{info->n_fields, info->n_bytes, info->left_side}的依據則是在不超過 unique index 列數的前提下,使其計算代價最小,而 index->info->left_side 的值則會決定存儲同一數據頁上相同前綴索引的最左記錄還是最右記錄。

  • 數據頁 block 信息的更新

數據頁 block info 的更新主要包括數據頁上的索引匹配模式、在已有索引匹配模式下成功的次數以及是否為該數據頁建立 AHI 緩存信息的判斷,其主要過程如下:

  • 將 index->info->last_hash_succ 設置為 FALSE, 此時其它線程無法使用該索引上 AHI 功能;

  • 如果 index->search_info 的匹配格式 & 該數據頁上保存的匹配模式相同時,則增加此 block 使用 AHI 成功的次數 block->n_hash_helps, 如果已經為該數據頁建立 AHI 緩存,則設置 index->info->last_hash_succ = TRUE;

  • 如果 index->search_info 的匹配格式 & 該數據頁上保存的匹配模式不相同,則設置 block->n_hash_helps=1 且使用 index->search_info 對 block 上的索引匹配信息進行重新設置,詳細過程可參考 btr_search_update_block_hash_info;

  • 判斷是否需要為數據頁建立 AHI 緩存,在數據頁 block 上使用 AHI 成功的次數大于此數據頁上用戶記錄的 1/16 且當前前綴索引的條件下使用 AHI 成功的次數大于 100 時, 如果此數據頁使用 AHI 潛在成功的次數大于 2 倍該數據頁上的用戶記錄或者當前推薦的前綴索引信息發生了變化的時,則需要為數據頁構造 AHI 緩存信息,詳情可參考以下代碼;

  • if ((block->n_hash_helps > page_get_n_recs(block->frame)/ BTR_SEARCH_PAGE_BUILD_LIMIT)&& (info->n_hash_potential >= BTR_SEARCH_BUILD_LIMIT)) {if ((!block->index)|| (block->n_hash_helps > 2 * page_get_n_recs(block->frame))|| (block->n_fields != block->curr_n_fields)|| (block->n_bytes != block->curr_n_bytes)|| (block->left_side != block->curr_left_side)) {/* Build a new hash index on the page */return(TRUE);}} 復制代碼

    【 AHI 構建過程(收集 & 判斷 & 建立)】

    AHI 的構建過程指的是根據 index->search_info 構建查詢條件 & 數據頁的 hash 關系,其主要過程為:

  • 收集 hash 信息。遍歷該數據頁上的所有用戶記錄,建立由前綴索引信息 & 物理記錄之間的映射關系的數組 {folds, recs},其中 index->info->left_side 用來判斷在前綴索引列相同情況下如何保存物理頁記錄,從代碼中可以得知:當 left_side 為 TRUE 時前綴索引列相同的記錄只保存最左記錄,當 left_side 為 FALSE 時前綴索引列相同的記錄只保存最右記錄,代碼實現如下:
  • for (;;) {next_rec = page_rec_get_next(rec);if (page_rec_is_supremum(next_rec)) {if (!left_side) {folds[n_cached] = fold;recs[n_cached] = rec;n_cached++;}break;}offsets = rec_get_offsets(next_rec, index, offsets,n_fields + (n_bytes > 0), &heap);next_fold = rec_fold(next_rec, offsets, n_fields,n_bytes, index->id);if (fold != next_fold) {/* Insert an entry into the hash index */if (left_side) {folds[n_cached] = next_fold;recs[n_cached] = next_rec;n_cached++;} else {folds[n_cached] = fold;recs[n_cached] = rec;n_cached++;}}rec = next_rec;fold = next_fold;} 復制代碼
  • 如果之前該數據頁已經存在 AHI 緩存信息但前綴索引信息與當前的信息不一致,則釋放之前緩存的 AHI 信息,如果釋放超過了一個 page size,則將釋放的數據頁退還給 buffer_pool->free 鏈表;

  • 調用 btr_search_check_free_space_in_heap 來確保 AHI 有足夠的內存生成映射信息 ha_node_t {fold, data, next},該內存從 buffer_pool->free 鏈表獲得,詳情參考:buf_block_alloc(), fold 的值的計算可參考函數:rec_fold();

  • 由于操作過程中釋放了 btr_search_latch,需要再次檢查 block 上的AHI信息是否發生了變化,如果發生變化則退出函數;

  • 調用 ha_insert_for_fold 方法將之前收集的信息生成 ha_node_t, 并將其存放到 btr_search_sys->hash_table 的數組中,其中存放后的結構可以參考圖 AHI memory structure;

  • for (i = 0; i < n_cached; i++) {ha_insert_for_fold(table, folds[i], block, recs[i]);} 復制代碼

    【 AHI 使用條件及定位葉子結點過程 】


    “AHI 在查詢過程中的作用范圍” 一節中我們詳細的介紹了 MySQL 中 Server 層 & engine 層中的交互方式以及 AHI 在整個過程中的位置 & 作用,下面著要看一下在 步驟 2, 3 中 AHI 是如何工作的。

    步驟 2 中,是使用 AHI 的一種 shortcut 查詢方式,只有在滿足很苛刻的條件后才能使用 AHI 的 shortcut 查詢方式,這些苛刻條件包括:

  • 當前索引是 cluster index;

  • 當前查詢是 unique search;

  • 當前查詢不包含 blob 類型的大字段;

  • 記錄長度不能大于 page_size/8;

  • 不是使用 memcache 接口協議的查詢;

  • 事物開啟且隔離級別大于 READ UNCOMMITTED;

  • 簡單 select 查詢而非在 function & procedure;

  • 在滿足以上條件后才能使用 AHI 的 shortcut 查詢方式定位葉子結點,5.7 中滿足條件后的操作可以簡單的描述為:

    rw_lock_s_lock(btr_get_search_latch(index)); ... row_sel_try_search_shortcut_for_mysql() ... rw_lock_s_lock(btr_get_search_latch(index)); 復制代碼

    步驟 3 中使用 AHI 快速定位葉子結點同樣需要滿足一些條件,具體可以參考代碼:btr_cur_search_to_nth_level(),在此不再累述,我們著重分析一下使用 AHI 定位葉子節點的過程。

  • 對 index 所在的 hash_table 上鎖,使用查詢條件中的 tuple 信息計算出鍵值 fold;
  • rw_lock_s_lock(btr_search_get_latch(index)); fold = dtuple_fold(tuple, cursor->n_fields, cursor->n_bytes, index_id); 復制代碼
  • 在 hash_table 上進行查找 key = fold 的 ha_node_t;
  • const rec_t* ha_search_and_get_data( /*===================*/hash_table_t* table, /*!< in: hash table */ulint fold) /*!< in: folded value of the searched data */ {ha_node_t* node;hash_assert_can_search(table, fold);ut_ad(btr_search_enabled);node = ha_chain_get_first(table, fold);while (node) {if (node->fold == fold) {return(node->data);}node = ha_chain_get_next(node);}return(NULL); }rec = (rec_t*) ha_search_and_get_data(btr_search_get_hash_table(index), fold); 復制代碼
  • 釋放鎖資源并根據返回的記錄定位葉子結點;
  • block = buf_block_align(rec); rw_lock_s_unlock(btr_search_get_latch(index)); btr_cur_position(index, (rec_t*) rec, block, cursor); 復制代碼
  • 定位到葉子結點后的過程和不使用 AHI 之后的過程類似,直接返回記錄并記錄 cursor 位置;
  • AHI 維護 & 監控

    MySQL 5.7 中有兩個 AHI 相關的參數,分別為:innodb_adaptive_hash_index, innodb_adaptive_hash_index_parts,其中 innodb_adaptive_hash_index 為動態調整的參數,用以控制是否打開 AHI 功能;innodb_adaptive_hash_index_parts 是只讀參數,在實例運行期間是不能修改,用于調整 AHI 分區的個數(5.7.8 引入),減少鎖沖突,詳細介紹可以參考官方說明:innodb_adaptive_hash_index, innodb_adaptive_hash_index,本節主要介紹操作 AHI 的相關命令以及命令的內部實現過程。

  • 打開 AHI 操作 & 內部實現
  • set global innodb_adaptive_hash_index=ON,此命令只是對全局變量進行設置,代碼實現如下:

    Enable the adaptive hash search system. */ UNIV_INTERN void btr_search_enable(void) /*====================*/ {btr_search_x_lock_all();btr_search_enabled = TRUE; /* global variables which indicate whether AHI can be used */btr_search_x_unlock_all(); } 復制代碼
  • 關閉 AHI 操作 & 內部實現
  • set global innodb_adaptive_hash_index= OFF,此命令用于關閉 AHI 功能,具體實現可參考 btr_search_disable(), 關閉流程說明:

    • 設置 btr_search_enabled = FALSE,關閉 AHI 功能;
    • 將數據字典中所有緩存的表對象的 ref_count 設置為0,只有 btr_search_info_get_ref_count(info, index) = 0 的情況下才能清除數據字典中的緩存對象,詳情見 dict_table_can_be_evicted();
    • 將所有數據頁中的統計信息置空,具體實現可參考 buf_pool_clear_hash_index();
    • 釋放 AHI 所使用的 buffer_pool 的內存,btr_search_disable 具體實現如下:
    Disable the adaptive hash search system and empty the index. */ UNIV_INTERN void btr_search_disable(void) /*====================*/ {dict_table_t* table;ulint i;mutex_enter(&dict_sys->mutex);btr_search_x_lock_all();btr_search_enabled = FALSE;/* Clear the index->search_info->ref_count of every index inthe data dictionary cache. */for (table = UT_LIST_GET_FIRST(dict_sys->table_LRU); table;table = UT_LIST_GET_NEXT(table_LRU, table)) {btr_search_disable_ref_count(table);}for (table = UT_LIST_GET_FIRST(dict_sys->table_non_LRU); table;table = UT_LIST_GET_NEXT(table_LRU, table)) {btr_search_disable_ref_count(table);}mutex_exit(&dict_sys->mutex);/* Set all block->index = NULL. */buf_pool_clear_hash_index();/* Clear the adaptive hash index. */for (i = 0; i < btr_search_index_num; i++) {hash_table_clear(btr_search_sys->hash_tables[i]);mem_heap_empty(btr_search_sys->hash_tables[i]->heap);}btr_search_x_unlock_all(); }復制代碼
  • AHI 緩存信息的維護
  • AHI 維護的是 search info & REC 在物理內存地址的 hash 關系,當物理記錄的位置或者所在 block 的地址發生變化時,AHI 也需要對其進行相應的維護,如新記錄的的插入,表記錄的的刪除,數據頁的分裂,drop table & alter table,LRU 換頁等都需要對 AHI 進行相應的維護,詳情可參考函數 btr_search_update_hash_ref() & btr_search_drop_page_hash_index() & buf_LRU_drop_page_hash_for_tablespace()的實現;

  • AHI 信息的監控
  • AHI 默認情況下只對 adaptive_hash_searches (使用 AHI 方式查詢的次數) & adaptive_hash_searches_btree (使用 bree 查詢的次數,需要遍歷 branch 結點) 進行監控,更詳細的監控需要進行額外的設置,詳細設置方法可參考 innodb_monitor_enable & module_adaptive_hash ,打開 AHI 的監控方法、使用監控、重置監控的方法如下:

    MySQL [information_schema]> set global innodb_monitor_enable = module_adaptive_hash; Query OK, 0 rows affected (0.00 sec)MySQL [information_schema]> select status, name, subsystem,count, max_count, min_count, avg_count, time_enabled, time_disabled from INNODB_METRICS where subsystem like '%adaptive_hash%'; +---------+------------------------------------------+---------------------+--------+-----------+-----------+--------------------+---------------------+---------------+ | status | name | subsystem | count | max_count | min_count | avg_count | time_enabled | time_disabled | +---------+------------------------------------------+---------------------+--------+-----------+-----------+--------------------+---------------------+---------------+ | enabled | adaptive_hash_searches | adaptive_hash_index | 259530 | 259530 | NULL | 1663.6538461538462 | 2016-12-16 14:03:07 | NULL | | enabled | adaptive_hash_searches_btree | adaptive_hash_index | 143318 | 143318 | NULL | 918.7051282051282 | 2016-12-16 14:03:07 | NULL | | enabled | adaptive_hash_pages_added | adaptive_hash_index | 14494 | 14494 | NULL | 127.14035087719299 | 2016-12-16 14:03:49 | NULL | | enabled | adaptive_hash_pages_removed | adaptive_hash_index | 0 | NULL | NULL | 0 | 2016-12-16 14:03:49 | NULL | | enabled | adaptive_hash_rows_added | adaptive_hash_index | 537933 | 537933 | NULL | 4718.710526315789 | 2016-12-16 14:03:49 | NULL | | enabled | adaptive_hash_rows_removed | adaptive_hash_index | 0 | NULL | NULL | 0 | 2016-12-16 14:03:49 | NULL | | enabled | adaptive_hash_rows_deleted_no_hash_entry | adaptive_hash_index | 0 | NULL | NULL | 0 | 2016-12-16 14:03:49 | NULL | | enabled | adaptive_hash_rows_updated | adaptive_hash_index | 0 | NULL | NULL | 0 | 2016-12-16 14:03:49 | NULL | +---------+------------------------------------------+---------------------+--------+-----------+-----------+--------------------+---------------------+---------------+ 8 rows in set (0.00 sec)MySQL [information_schema]> set global innodb_monitor_reset_all='adaptive_hash_%'; Query OK, 0 rows affected (0.00 sec)MySQL [information_schema]> set global innodb_monitor_disable='adaptive_hash%'; Query OK, 0 rows affected (0.00 sec)MySQL [information_schema]> select status, name, subsystem,count, max_count, min_count, avg_count, time_enabled, time_disabled from INNODB_METRICS where subsystem like '%adaptive_hash%'; +----------+------------------------------------------+---------------------+-------+-----------+-----------+-----------+--------------+---------------+ | status | name | subsystem | count | max_count | min_count | avg_count | time_enabled | time_disabled | +----------+------------------------------------------+---------------------+-------+-----------+-----------+-----------+--------------+---------------+ | disabled | adaptive_hash_searches | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | | disabled | adaptive_hash_searches_btree | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | | disabled | adaptive_hash_pages_added | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | | disabled | adaptive_hash_pages_removed | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | | disabled | adaptive_hash_rows_added | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | | disabled | adaptive_hash_rows_removed | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | | disabled | adaptive_hash_rows_deleted_no_hash_entry | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | | disabled | adaptive_hash_rows_updated | adaptive_hash_index | 0 | NULL | NULL | NULL | NULL | NULL | +----------+------------------------------------------+---------------------+-------+-----------+-----------+-----------+--------------+---------------+ 8 rows in set (0.00 sec) 復制代碼

    值得一提的是只有執行 set global innodb_monitor_reset_all='adaptive_hash_%' & set global innodb_monitor_disable='adaptive_hash%' 才對狀態進行重置,如果發現 adaptive_hash_searches << adaptive_hash_searches_btree 的時候,則應該關閉 AHI 以減少不必要的系統消耗。

    相關推薦 MySQL數據庫的高可用性分析 騰訊云數據庫CDB for MySQL相關文檔 MySQL開發實踐8問,你能hold住幾個?


    此文已由作者授權騰訊云技術社區發布,轉載請注明文章出處,獲取更多云計算技術干貨,可請前往騰訊云技術社區 微信公眾號:騰訊云技術社區( QcloudCommunity)

    總結

    以上是生活随笔為你收集整理的腾讯云数据库团队:MySQL AHI 实现解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    www.人人草| 在线观看久 | 欧美99久久 | 婷婷九月激情 | 99re6热在线精品视频 | 97香蕉超级碰碰久久免费软件 | 91麻豆精品国产 | 久草在线视频免赞 | 最新日韩视频在线观看 | 夜色资源站wwwcom | 四虎成人精品 | 五月天激情电影 | 国产成人精品亚洲日本在线观看 | 国产视频在线看 | 91成人免费看片 | 在线之家免费在线观看电影 | 国产精品乱码高清在线看 | 片黄色毛片黄色毛片 | 日韩电影中文字幕在线观看 | 91丨九色丨国产丨porny精品 | 国产亚洲精品久久久久久电影 | 国产中文字幕在线观看 | 99久久精品国产一区二区成人 | 国产精品久久 | 国产成人精品一区二区三区在线 | 最新超碰在线 | 9999国产精品 | 一区二区三区四区五区在线视频 | 亚洲免费精品一区二区 | 日韩在线在线 | 久久国产美女视频 | 97超碰超碰久久福利超碰 | 高清精品久久 | 国产精品免费一区二区 | 99久久精品视频免费 | 久久久精品国产一区二区电影四季 | 久久久久久久久久免费 | 欧美激情精品久久久久久 | 涩涩色亚洲一区 | 欧美久久久一区二区三区 | 久久精品一区二区三区四区 | 麻豆免费视频网站 | 国产99在线 | 天天爱天天草 | 黄污视频网站 | 最近免费中文字幕大全高清10 | 久久一区二区三区四区 | 91精品国产成人 | 91天天操| 国产午夜精品免费一区二区三区视频 | 免费观看性生活大片 | 99精品国产99久久久久久福利 | 在线之家免费在线观看电影 | 国产在线观看a | 国产精品69av | 狠狠干五月天 | 欧洲成人av | 日日干天天爽 | 亚洲久久视频 | 国产日韩精品欧美 | 国产va在线观看免费 | 日韩在线精品 | 97人人精品| 探花视频在线观看+在线播放 | www五月天com| 欧美在线一二 | 天天综合狠狠精品 | 精品免费观看视频 | 国产精品美女久久久久久网站 | 亚洲a资源| 国产99久久精品 | 亚洲成人黄色在线观看 | 波多野结衣在线观看视频 | 蜜桃视频日本 | 婷婷精品在线视频 | 亚洲高清在线视频 | 精品五月天 | 亚洲男男gaygay无套同网址 | 欧美二区三区91 | 97超碰中文字幕 | 天天操天天射天天操 | 久久精品中文字幕少妇 | 天天想夜夜操 | 日韩在线无 | 中文字幕一区二区三区在线播放 | 一级a毛片高清视频 | 久久黄色片 | 99精品国产aⅴ | 99精品视频播放 | 亚洲人成人在线 | 日韩在线播放欧美字幕 | 精品一区二区三区在线播放 | 天天操天天色天天射 | 免费观看一区二区 | 国产黑丝一区二区三区 | 亚洲在线日韩 | 日韩高清一区在线 | 99热高清 | 国产精品a久久久久 | 免费在线一区二区三区 | 四虎国产视频 | 7777精品伊人久久久大香线蕉 | 91久久人澡人人添人人爽欧美 | 精品国产123 | 最近能播放的中文字幕 | 九九视频这里只有精品 | 色视频在线观看免费 | 中文字幕av日韩 | 综合色伊人 | 91成品人影院 | 91黄色视屏 | 欧美亚洲一区二区在线 | 国产一区二区在线视频观看 | 日日躁夜夜躁aaaaxxxx | 四虎在线永久免费观看 | 久久久不卡影院 | 日韩高清一二区 | www.激情五月.com | 国产成人精品一区二区三区福利 | 国产偷国产偷亚洲清高 | 免费看的国产视频网站 | 亚洲激情电影在线 | 五月天六月丁香 | 亚洲欧洲国产日韩精品 | 久久久久久久99 | 色欲综合视频天天天 | 中文字幕一区二区三区在线播放 | 中文字幕免费高清在线观看 | 色开心| 香蕉视频免费看 | 最近日本韩国中文字幕 | 日韩理论在线观看 | 黄色av免费在线 | 色偷偷97 | 国产视频中文字幕在线观看 | 在线观看视频一区二区三区 | 日韩午夜电影网 | 日韩 在线 | 久久国产乱 | 日韩欧美在线观看一区二区 | 五月婷婷视频在线观看 | 在线观看日韩视频 | 欧美,日韩 | 999久久久久 | 久久久久国产精品免费 | 国内精品国产三级国产aⅴ久 | 亚洲狠狠婷婷综合久久久 | 国产精品一区二区三区电影 | 91成人免费在线视频 | 亚洲精品欧美专区 | 日韩成人邪恶影片 | 黄色亚洲片 | 免费高清在线一区 | 日本激情动作片免费看 | 美女精品网站 | 黄色小网站免费看 | 成片人卡1卡2卡3手机免费看 | 午夜影院三级 | 不卡国产视频 | 久草综合视频 | www.com黄色 | 国产精品入口a级 | 成年人在线观看网站 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产视频观看 | 婷婷色六月天 | 国产男女爽爽爽免费视频 | 免费在线一区二区三区 | 国产一区二区精品91 | 欧美一级爽 | 最近中文字幕在线中文高清版 | 激情久久综合网 | 2023国产精品自产拍在线观看 | 丝袜少妇在线 | 有没有在线观看av | 亚洲精品美女在线观看播放 | 成人久久18免费网站图片 | 97福利视频| 国产精品一区二区在线观看免费 | 国产一区免费在线 | 久久一久久 | www欧美xxxx| av在线超碰 | 久久久久亚洲精品 | 久久不射影院 | 黄色aa久久 | 久久精品播放 | 国产午夜在线 | 亚洲精品免费在线观看 | 国产美女精品在线 | 黄色软件视频网站 | 久久亚洲免费 | 天天射色综合 | 成人一级在线 | 欧洲成人免费 | 亚洲在线视频网站 | 亚洲欧美成人综合 | 国产精品久久久久影院日本 | 九九热免费在线观看 | 亚洲精品麻豆视频 | 少妇视频在线播放 | 欧美日韩国产在线精品 | 久久久久观看 | 成人午夜剧场在线观看 | 狠狠色婷婷丁香六月 | 久久国产精品视频观看 | 国产精品专区在线 | a√天堂资源 | 亚洲成人资源 | 国产破处精品 | 黄色在线看网站 | 中文国产成人精品久久一 | av一本久道久久波多野结衣 | 天天操天天干天天干 | 久草青青在线观看 | 在线观看免费版高清版 | 欧美日韩国产伦理 | 91tv国产成人福利 | 久久国产精品色婷婷 | 国产原创在线 | 免费不卡中文字幕视频 | 91成人精品国产刺激国语对白 | av在线短片 | 日韩高清在线不卡 | 五月天激情视频 | 日韩成人免费在线电影 | 婷婷久久五月天 | 亚洲精品麻豆 | a v在线观看 | 毛片3 | 天天在线操 | 欧美日韩另类在线 | 狠狠婷婷 | 日日干天天操 | 日韩色高清 | 91大神dom调教在线观看 | 天干啦夜天干天干在线线 | 天天操天天弄 | 日本在线观看中文字幕无线观看 | 男女视频久久久 | 国内外成人在线 | 国产色资源 | 国产黄色片一级 | 亚洲欧美综合精品久久成人 | 69视频在线播放 | 日日草av | 婷婷丁香激情五月 | 国产一区二区视频在线播放 | 亚洲欧美成人在线 | 国产精品不卡一区 | 黄色一级片视频 | 五月丁婷婷 | 狠狠干夜夜 | 久久精品这里热有精品 | av五月婷婷 | 免费在线播放av电影 | 9999亚洲 | 午夜少妇一区二区三区 | 亚洲va欧美 | 黄色网大全 | 中文字幕在线第一页 | 日韩精品一区二区三区免费观看视频 | av福利网址导航 | 毛片区 | 天干啦夜天干天干在线线 | 国产成人免费观看久久久 | 国产成人精品av在线观 | 久久夜av | 国产精品久久久777 成人手机在线视频 | 免费看色的网站 | 亚洲欧美色婷婷 | 中文字幕三区 | 国产精品久久中文字幕 | 9色在线视频 | 久热色超碰 | 怡春院av| 国产免费亚洲高清 | 美女久久久| 成人三级av | 久久精品日产第一区二区三区乱码 | 91av成人 | 97看片| 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 激情五月婷婷 | 91福利影院在线观看 | 在线看污网站 | 亚洲永久国产精品 | 91看片淫黄大片在线播放 | 日韩欧美一区二区三区在线观看 | 依人成人综合网 | 日韩羞羞| 天天操天天操 | 91在线看视频 | 久久久久久久久久久影视 | 国产在线观看,日本 | 亚洲三级性片 | 亚洲日本中文字幕在线观看 | www.久艹| 又黄又刺激的视频 | 99精品在线视频观看 | 免费在线观看av的网站 | 日韩电影在线观看一区二区 | 精品国产综合区久久久久久 | 9999在线视频 | 97成人在线视频 | 欧美日韩视频在线 | 国产视频精品免费播放 | 99免费在线 | 夜色资源站国产www在线视频 | 黄色软件在线观看视频 | 免费手机黄色网址 | 日韩有码在线观看视频 | 中文字幕免费一区 | 99欧美精品 | 欧美一区影院 | 久久久午夜电影 | 91免费看黄 | 亚洲天堂网站视频 | 黄色毛片网站在线观看 | 97超碰人人干 | 亚洲国产成人高清精品 | 日本在线中文在线 | 在线免费观看羞羞视频 | 狠狠干.com| 精品一区二区三区在线播放 | 精品视频久久久 | 美女av电影 | 午夜精品视频一区二区三区在线看 | 日韩免费小视频 | 性色xxxxhd| 高清色免费 | 日本韩国精品一区二区在线观看 | 色欧美视频 | 久青草国产在线 | 久久精品视频在线观看免费 | 97国产电影 | 亚洲欧美经典 | 色偷偷网站视频 | 中文字幕日韩高清 | 免费激情网 | 色在线高清| 天天爽夜夜爽精品视频婷婷 | 久久综合九色综合欧美就去吻 | 2021国产精品视频 | 日韩中文字幕在线观看 | 国产精品福利午夜在线观看 | 国产一区二区不卡视频 | 欧美另类成人 | 五月综合婷 | 美女亚洲精品 | www久 | 日韩欧美视频免费看 | 91网址在线观看 | 日韩在线第一 | 日韩高清国产精品 | 福利视频第一页 | 999ZYZ玖玖资源站永久 | 免费观看的av网站 | 国产精品女人网站 | 91成人午夜| 成人免费在线视频 | www.五月天激情 | 国产精品欧美日韩在线观看 | 免费黄色a网站 | 天天综合天天做天天综合 | 国产人成精品一区二区三 | 欧美成人91 | 日本视频精品 | 在线观看黄网站 | 91超碰免费在线 | 色噜噜在线观看视频 | 中文字幕日韩在线播放 | 91精品视频一区二区三区 | 97精品国自产拍在线观看 | 久久精品91视频 | 久久天天躁 | 亚洲无人区小视频 | 国产一区二区三区四区在线 | 99热99re6国产在线播放 | 日韩国产欧美视频 | 97人人模人人爽人人喊中文字 | 国产精品一区二区 91 | 国产一区 在线播放 | 日本三级香港三级人妇99 | 中文在线a∨在线 | 久草在线免费在线观看 | 国产亚洲视频在线免费观看 | av成人动漫在线观看 | 日本在线观看一区二区三区 | 久久久久国产成人精品亚洲午夜 | 又黄又爽又无遮挡的视频 | 99精品在线视频观看 | 91av视频观看 | 天天干天天操天天射 | 国产一区不卡在线 | 99这里都是精品 | 在线亚洲成人 | 处女av在线 | 美女福利视频一区二区 | 亚洲综合涩 | 精品久久久久久久久久久久久久久久 | 久久人人爽人人人人片 | 免费观看黄 | 中文字幕在线国产 | 麻豆视传媒官网免费观看 | 一区二区欧美在线观看 | 九九九在线观看视频 | 国产精品美女视频网站 | 中文字幕高清 | 在线观看视频免费播放 | 九色精品在线 | 色国产在线| 久久a v视频 | 久久电影国产免费久久电影 | 日韩久久精品一区二区三区下载 | 深夜免费小视频 | 午夜精品久久久久 | 国产精品久久久777 成人手机在线视频 | 2021国产在线 | 精品一区二区免费 | 久一久久 | 精品久久久久久久久久岛国gif | 婷婷色综合网 | 日韩电影一区二区三区在线观看 | 国产精品永久在线 | 国产福利一区二区三区在线观看 | 在线免费av网 | 亚洲精品国内 | 97高清视频| 成年人视频在线免费播放 | 中文字幕在线观看第三页 | 成人小视频在线观看免费 | 天天舔天天射天天操 | 久久免费毛片 | 色综合天天综合 | 日韩在线看片 | 中文免费| 国产精品18久久久久久久久久久久 | 97超碰在线视 | 成人在线免费观看网站 | 亚洲资源在线网 | 久久久精品影视 | 欧美高清成人 | 欧美91片 | 狠狠色丁香婷婷综合久久片 | 97精品在线观看 | 国产99免费 | 久久精品日韩 | 精品久久免费 | 国产精品99蜜臀久久不卡二区 | 久久午夜国产 | 国产精品一区二区免费在线观看 | 中文字幕频道 | 国产一级在线观看视频 | 伊人五月综合 | 综合av在线 | 国产一二三四在线视频 | 99国产精品免费网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 97超在线视频 | 91香蕉亚洲精品 | 最近日本mv字幕免费观看 | av三级在线看 | 最新99热| 极品久久久久久久 | 久久久官网| 国产亚洲aⅴaaaaaa毛片 | 91av欧美| 亚洲精品免费在线视频 | 香蕉视频网址 | 亚洲成av人片 | 欧美色精品天天在线观看视频 | 国产美女在线观看 | 正在播放一区 | 久久69精品久久久久久久电影好 | 人人草网站 | 黄色大片中国 | 精品成人久久 | 美女黄频免费 | 国产在线观看你懂得 | 黄色大片日本免费大片 | wwwwwww黄| 在线观看深夜视频 | 久草在线最新视频 | 国产成人综 | 在线观看的av网站 | 欧美综合久久久 | 日本特黄一级片 | 在线视频欧美亚洲 | 久久精选视频 | 精品国产一区二区三区久久久蜜月 | 久久久久免费精品国产 | 伊人五月婷 | 国产精品一区二区中文字幕 | 国产h在线播放 | 手机成人av在线 | 五月婷婷综合在线视频 | a黄色一级 | 午夜电影中文字幕 | 狠狠色丁香久久综合网 | 日日操日日干 | 亚州黄色一级 | 日韩在线观看av | 99精品视频在线观看视频 | 亚洲精品国产综合99久久夜夜嗨 | 91片黄在线观 | 免费在线观看av电影 | 日本女人逼 | 婷婷国产一区二区三区 | 激情欧美一区二区免费视频 | 色激情五月 | 一级黄色a视频 | 亚洲免费一级电影 | 瑞典xxxx性hd极品 | 中文字幕在线资源 | 91私密视频 | 亚洲精品一区二区三区高潮 | 国产麻豆精品95视频 | 99精品国产一区二区三区麻豆 | 日韩在线观看一区二区 | 91精品久久久久久久91蜜桃 | 国产精品久久久久久a | 丝袜少妇在线 | 久久精品视频中文字幕 | 麻豆果冻剧传媒在线播放 | 国产一区二区三区视频在线 | 亚州欧美视频 | 日韩视频在线不卡 | 亚洲精品中文字幕视频 | 婷婷色五 | 国产午夜精品一区二区三区在线观看 | 四虎国产精品永久在线国在线 | 国产精品黄网站在线观看 | 91亚洲综合 | av解说在线观看 | 91精品国产成人www | 日本视频久久久 | 亚洲九九九在线观看 | 在线观看视频97 | 中文字幕 国产视频 | 欧美色精品天天在线观看视频 | 久久精品中文 | 五月婷婷操 | 国产高清福利在线 | 日韩精品aaa | 国产精品v a免费视频 | 日韩欧美一区二区三区在线观看 | 免费看v片网站 | 国产精品美女久久久久久久 | 亚洲欧美日韩一二三区 | 91视频免费看网站 | 国产精品美女www爽爽爽视频 | 国产午夜精品免费一区二区三区视频 | 日韩在线视频国产 | 成人羞羞视频在线观看免费 | 18国产精品白浆在线观看免费 | 手机在线永久免费观看av片 | 亚洲最大色 | 一级黄色视屏 | 96av麻豆蜜桃一区二区 | 毛片一二区 | 伊人五月在线 | 国产在线观看h | 丁香激情婷婷 | 97涩涩视频| 91精品日韩 | 超碰在线97国产 | 日韩欧美69 | 日韩一二区在线观看 | 亚洲精品视频网站在线观看 | 日本中文字幕影院 | 91看片成人 | 欧美日韩一区二区在线 | 国产精品theporn| 久久999久久 | 91手机在线看片 | 日韩免费一区二区三区 | 美女中文字幕 | 国产3p视频 | 高清视频一区二区三区 | 久草在线这里只有精品 | 久久最新网址 | 欧美日韩国产精品一区二区亚洲 | 成人免费在线播放视频 | 中文字幕视频一区 | 亚洲精品福利在线 | 美女在线观看网站 | 日韩在线视 | 久久久国产影院 | 国语久久| 色婷婷综合久色 | 婷婷色视频 | 欧美一级性生活片 | 一级黄色大片 | 精品国产一区二区三区蜜臀 | 欧美激情视频在线观看免费 | av在线中文 | 最新动作电影 | a天堂一码二码专区 | 国产91电影在线观看 | 久久免费视频精品 | 亚洲色五月 | 欧美视频在线二区 | 免费日韩av片 | 丁香六月国产 | 亚洲一区二区精品视频 | 久草.com| av网站手机在线观看 | 色婷婷激情 | 国产日韩精品一区二区三区 | 久99久中文字幕在线 | 国产视频一区在线 | 久久综合中文色婷婷 | 久久久久亚洲a | 五月的婷婷 | 国产麻豆成人传媒免费观看 | 99亚洲天堂| 婷婷中文字幕在线观看 | 国产精品一区二区果冻传媒 | 久久久电影网站 | 一区二区三区在线免费 | 色久综合| 天天色天 | 日韩色爱 | 国产日韩三级 | 日韩欧美观看 | 人人搞人人搞 | 人人干人人添 | 99九九免费视频 | 国产精品免费在线视频 | 国产精品久久嫩一区二区免费 | 天天操偷偷干 | 亚洲污视频 | www..com毛片 | 欧美在线一级片 | 天天色天天色天天色 | 成人午夜电影网站 | 国产精品观看视频 | 麻豆免费在线视频 | 国产破处在线视频 | 午夜影院在线观看18 | 激情五月网站 | a电影在线观看 | 亚洲精品字幕在线观看 | www.天天色| 精品在线你懂的 | 国产精品区在线观看 | 成年人在线观看视频免费 | 黄色的网站免费看 | 九九免费精品视频 | 久久久久久99精品 | 欧美精品在线观看免费 | 九九热视频在线免费观看 | 五月婷婷六月丁香在线观看 | 国产精品尤物 | 国产免费作爱视频 | 久久这里只有精品9 | 日韩免费小视频 | 欧美一区在线看 | 国产色久| 日韩精品一区二区不卡 | 九九在线精品视频 | 亚洲一区久久 | 在线观看岛国片 | 欧美日韩成人一区 | 免费在线观看一区二区三区 | 免费在线观看视频一区 | 少妇高潮流白浆在线观看 | 欧美日韩免费一区 | 国产精品嫩草55av | 99在线免费视频 | 手机看片国产日韩 | 视频一区二区视频 | 欧美精品一区在线发布 | 激情五月综合网 | 伊人久久国产精品 | 国产在线 一区二区三区 | 国产精品久久一卡二卡 | 亚洲人成综合 | av 一区二区三区 | 狠狠干狠狠色 | 国产精品专区h在线观看 | 黄网站色视频免费观看 | 久久午夜鲁丝片 | 国产成人av综合色 | av中文字幕在线免费观看 | 99热手机在线观看 | 日韩精品中文字幕在线 | 最新在线你懂的 | 人人擦| 成人蜜桃网| 国产成人三级在线播放 | 成人福利在线播放 | 免费看黄在线网站 | 美女视频永久黄网站免费观看国产 | 成人精品国产 | 国产精品一区二区久久精品爱微奶 | 色综合天天干 | 欧美日韩在线视频一区 | 91av美女| 免费看片成人 | av丝袜在线 | 国产精品欧美在线 | 国产一级在线观看视频 | 91视频观看免费 | 福利电影久久 | 免费特级黄色片 | 国产精品淫 | 99精品观看| 黄网站色视频免费观看 | 国产精品久久三 | 黄色软件在线观看 | 中文字幕免费不卡视频 | 99精品视频精品精品视频 | 久久久久国产精品www | 亚洲国产资源 | 午夜国产福利在线 | 亚洲影院国产 | 久久午夜免费观看 | 成人av电影在线播放 | 九九色视频 | 免费男女羞羞的视频网站中文字幕 | 91九色精品 | 男女拍拍免费视频 | 麻豆视频在线看 | 亚洲资源视频 | 成人网中文字幕 | 免费观看十分钟 | 免费视频一区 | 国产一级二级三级视频 | 免费网站在线观看人 | 天天干天天操天天做 | 亚洲欧美视频在线播放 | av电影久久 | 成人在线视频免费观看 | 国产亚洲精品bv在线观看 | 91精品少妇偷拍99 | 色永久免费视频 | 99视频国产精品 | 精品国产一区二区三区男人吃奶 | 成人欧美一区二区三区在线观看 | 探花在线观看 | 夜色资源网 | 欧美专区日韩专区 | 九九免费在线观看 | 在线视频观看国产 | 国产精品va在线观看入 | 国产美女网站在线观看 | 国内精品久久久久国产 | 久视频在线播放 | 黄色在线免费观看网站 | 色婷婷激情 | 亚洲精品国产电影 | 天天操天天曰 | 精品国精品自拍自在线 | 国产精品电影在线 | 亚洲成av人片在线观看无 | 国产最新在线 | 久久免费一级片 | 波多野结衣久久资源 | a在线视频v视频 | 欧美男男tv网站 | 99久久这里只有精品 | 97超碰人人澡人人 | 国产黄a三级三级 | 人人超碰97 | 久久精品欧美日韩精品 | 久久久国产一区二区三区四区小说 | 菠萝菠萝在线精品视频 | 国产69精品久久久久久久久久 | 国产99在线播放 | 国产成人综合精品 | av九九| 久久久久免费网 | 国产午夜精品久久久久久久久久 | 国产r级在线观看 | 日韩黄色免费在线观看 | 欧美日韩另类在线观看 | 久9在线| 久久久久欠精品国产毛片国产毛生 | 五月婷婷综 | 狂野欧美激情性xxxx欧美 | 天天插夜夜操 | 69亚洲精品 | 91免费国产在线观看 | 天天操人人要 | 免费成人在线视频网站 | 日韩xxxbbb| 玖草影院 | 欧美日韩啪啪 | 最新成人av | 久久久久久久久久久影院 | 国产成本人视频在线观看 | 日韩国产欧美视频 | v片在线播放 | 91亚洲网站 | 青春草视频在线播放 | 91视频在线播放视频 | 欧美色精品天天在线观看视频 | 99久久久国产精品美女 | 国产伦精品一区二区三区照片91 | 精品女同一区二区三区在线观看 | 国产精品不卡一区 | 在线久热 | 激情综合网婷婷 | 999电影免费在线观看 | 美女网站在线播放 | 国产精品美女久久久久久久网站 | 天天爱天天色 | 亚洲资源在线 | 黄色毛片在线看 | av电影中文字幕在线观看 | 日本久久久精品视频 | 玖玖爱在线观看 | 婷婷色网址 | 国产最新在线 | 欧美大片在线看免费观看 | 麻豆91小视频| 久久综合国产伦精品免费 | 亚一亚二国产专区 | 伊人看片| 成人一区影院 | wwwww.国产 | 毛片一级免费一级 | 国产高清网站 | 日本激情动作片免费看 | 国产亚洲成av片在线观看 | 欧美乱淫视频 | 国产成人精品av在线观 | 久久久久亚洲国产精品 | 超碰在线观看av | 毛片区 | 日三级在线| 国产成人av一区二区三区在线观看 | 九九综合在线 | 欧美肥妇free | 日韩有码在线播放 | www91在线观看 | 天天做日日爱夜夜爽 | 日韩精品久久一区二区 | 在线看小早川怜子av | 免费视频二区 | 视频国产在线 | 亚洲传媒在线 | 超碰999| 精品在线观看一区二区三区 | 久久久久久久久久电影 | 国产区精品视频 | 69视频在线 | 婷婷久久精品 | 精品久久精品久久 | 中文字幕高清免费日韩视频在线 | 偷拍久久久 | 欧美巨大荫蒂茸毛毛人妖 | 91免费在线视频 | av电影一区二区 | 日日爽夜夜爽 | 日韩在线免费看 | 亚洲欧美日韩一二三区 | 午夜精品中文字幕 | 国产精品午夜久久 | 国产精品igao视频网入口 | 国产91亚洲精品 | 欧美性粗大hdvideo | 中文字幕文字幕一区二区 | 精品999久久久 | 日韩一区二区三区在线看 | 九九免费观看视频 | 最近中文字幕完整高清 | 992tv又爽又黄的免费视频 | 国产精品午夜久久 | 69精品 | 96香蕉视频| 成人精品视频久久久久 | 九九视频在线观看视频6 | 91夜夜夜 | 亚洲欧洲一级 | 69xx视频 | 国产精品日韩在线观看 | 天天色棕合合合合合合 | 91丨九色丨蝌蚪丰满 | 国产亚洲精品美女久久 | 午夜久久福利视频 | 免费观看一区二区三区视频 | 高清不卡一区二区在线 | 在线播放精品一区二区三区 | 日韩在线一区二区免费 | 不卡的一区二区三区 | 一区二区三区免费在线观看视频 | 久久一级片| 国产精品美女视频网站 | 五月天色丁香 | 久久激情视频 | 精品在线观看视频 | 国产成人精品aaa | 国产精品12| 免费日韩视频 | 国产精品黑丝在线观看 | 女人魂免费观看 | 在线免费观看视频一区二区三区 | 久久综合操 | 97超级碰碰碰视频在线观看 | 九九热免费视频在线观看 | 在线播放视频一区 | 午夜精品久久久久久久99 | 久久天天躁夜夜躁狠狠85麻豆 | 亚洲欧美综合精品久久成人 | www.人人干 | 蜜桃视频精品 | 免费男女羞羞的视频网站中文字幕 | 欧美精品乱码久久久久 | 日本精品久久久久 | 久久激情视频 | 久久99久久久久久 | 久久女教师 | 黄色在线看网站 | 蜜臀av性久久久久av蜜臀妖精 | 一区二区三区动漫 | 中文字幕 第二区 | 97视频在线观看网址 | 西西444www大胆无视频 | 99这里只有久久精品视频 | 中文字幕av播放 | 一本到视频在线观看 | 日韩xxxbbb | 69视频网站 | 波多野结依在线观看 | 视频一区二区在线观看 | 免费久久网 | 亚洲第一av在线播放 | 中文字幕亚洲在线观看 | 国产精品国产亚洲精品看不卡15 | 四虎影视成人精品国库在线观看 | 久久这里只有精品视频99 | 欧美精品中文在线免费观看 | 成年人看片 | 久久久久一区二区三区四区 | 黄色亚洲精品 | 免费高清在线观看成人 | 日韩av在线看 | 国产精品成人久久 | 成人国产综合 | 中文字幕专区高清在线观看 | 在线日本v二区不卡 | www日韩在线 | 国产高清免费av | 欧洲亚洲国产视频 | 久久精品免费看 | 综合久久久久久 | 99视频久久 | 亚洲欧美日韩在线一区二区 | 黄视频色网站 | 黄色小说在线免费观看 | 麻豆视频免费入口 | 在线精品亚洲一区二区 | 超碰97人人爱 | 亚洲精选99 | 欧美日韩中文在线 | 波多野结衣一区三区 | 日本精品视频一区 | 97超碰国产精品女人人人爽 | 亚洲成aⅴ人片久久青草影院 | 亚洲 av网站 | 国产精品久久久久久一区二区三区 | 超碰人人草 | 在线观看av免费 | 在线观看完整版免费 | 一区三区在线欧 | 99热最新精品 | 精品久久久亚洲 | 一区二区久久久久 | 国产精品久久久999 国产91九色视频 | 五月天开心 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 成人久久久精品国产乱码一区二区 | 女人18毛片90分钟 | 精品人人人人 | 国产成人久久精品亚洲 | 国产剧情一区二区 | 国产视频不卡 | 久久久久黄 | 亚洲乱码一区 | 3d黄动漫免费看 | 成人影视片| 久久色网站 | 欧美精品在线免费 | 99久久99 | 久久99热这里只有精品 | 亚洲区精品视频 | 在线观看免费高清视频大全追剧 | 蜜臀av性久久久久av蜜臀妖精 | 免费在线播放黄色 | 久久理论片 | 久久五月婷婷丁香社区 | 中文字幕在线一区二区三区 | 永久免费精品视频网站 | 国偷自产中文字幕亚洲手机在线 | 中文字幕亚洲综合久久五月天色无吗'' |