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

MySQL 派生表查詢導致 Crash 的根源分析與解決方案

數據庫 MySQL
對于復雜的 SQL 會執行復雜的 Item 變換和刪除不需要的 Item,但是正是由于這樣才更容易導致 Crash 的出現。分析類似這樣的 Crash 問題的時候,因為涉及代碼量大,代碼邏輯復雜往往很難找到相關修復代碼,因此需要對代碼運行流程比較熟悉,同時要有相關復雜問題解決的經驗才能更好的應對這類問題。?

一、問題發現

在之前的 MySQL 8.0.32 使用中,發現使用以下帶有派生表的 SQL 會導致 MySQL Crash,以下的sequence_table(2)替換為任何非常量表都行:

僅 MySQL 8.0.32 版本有影響。

EXPLAIN FORMAT=TREE 
select
    trim(ref_15.c_ogj),
    0<>0as c_lrcm63eani
from
    (select
    0<>0as c_ogj
from
   sequence_table(2) t1
where0<>0
orderby c_ogj asc) as ref_15;

Crash 的堆棧如下:

Thread 55 "mysqld" received signal SIGSEGV, Segmentation fault.
Item_view_ref::used_tables (this=0x7fff2418f410)
    at sql/item.h:6670
6670            table_map inner_map = ref_item()->used_tables(); ==> ref_item()為空指針,因此crash了
(gdb) bt
#0  Item_view_ref::used_tables (this=0x7fff2418f410)
    at sql/item.h:6670
#1  0x0000555558e978d1 in Item::const_item (this=0x7fff2418f410)
    at sql/item.h:2342
#2  0x0000555558ecc765 in Item_ref::print (this=0x7fff2418f410, thd=0x7fff24001050, 
    str=0x7fffc83ee7e0, query_type=(QT_TO_SYSTEM_CHARSET | QT_SHOW_SELECT_NUMBER))
    at sql/item.cc:9993
#3  0x000055555903b839 in Item_func_trim::print (this=0x7fff24120d20, thd=0x7fff24001050, 
    str=0x7fffc83ee7e0, query_type=(QT_TO_SYSTEM_CHARSET | QT_SHOW_SELECT_NUMBER))
    at sql/item_strfunc.cc:3244
#4  0x0000555558ea7fc5 in Item::print_item_w_name (this=0x7fff24120d20, thd=0x7fff24001050, 
    str=0x7fffc83ee7e0, query_type=(QT_TO_SYSTEM_CHARSET | QT_SHOW_SELECT_NUMBER))
    at sql/item.cc:727
#5  0x00005555593f18c0 in Query_block::print_item_list (this=0x7fff24120768, thd=0x7fff24001050, 
    str=0x7fffc83ee7e0, query_type=(QT_TO_SYSTEM_CHARSET | QT_SHOW_SELECT_NUMBER))
    at sql/sql_lex.cc:4041
#6  0x00005555593efb50 in Query_block::print_query_block (this=0x7fff24120768, 
    thd=0x7fff24001050, str=0x7fffc83ee7e0, 
    query_type=(QT_TO_SYSTEM_CHARSET | QT_SHOW_SELECT_NUMBER))
    at sql/sql_lex.cc:3614
#7  0x00005555593efa3d in Query_block::print (this=0x7fff24120768, thd=0x7fff24001050, 
    str=0x7fffc83ee7e0, query_type=(QT_TO_SYSTEM_CHARSET | QT_SHOW_SELECT_NUMBER))
    at sql/sql_lex.cc:3598
#8  0x00005555593ee556 in Query_expression::print (this=0x7fff24120670, thd=0x7fff24001050, 
    str=0x7fffc83ee7e0, query_type=(QT_TO_SYSTEM_CHARSET | QT_SHOW_SELECT_NUMBER))
    at sql/sql_lex.cc:3232
#9  0x0000555559a89c2c in print_query_for_explain (query_thd=0x7fff24001050, 
    unit=0x7fff24120670, str=0x7fffc83ee7e0)
    at sql/opt_explain.cc:2288
#10 0x0000555559a10b11 in PrintQueryPlan[abi:cxx11](THD*, THD const*, Query_expression*) (
    ethd=0x7fff24001050, query_thd=0x7fff24001050, unit=0x7fff24120670)
    at sql/join_optimizer/explain_access_path.cc:1894
#11 0x0000555559a8985a in ExplainIterator (ethd=0x7fff24001050, query_thd=0x7fff24001050, 
    unit=0x7fff24120670) at sql/opt_explain.cc:2205
#12 0x0000555559a89e91 in explain_query (explain_thd=0x7fff24001050, query_thd=0x7fff24001050, 
    unit=0x7fff24120670) at sql/opt_explain.cc:2359
#13 0x000055555955cd46 in Sql_cmd_dml::execute_inner (this=0x7fff24165630, thd=0x7fff24001050)

二、問題調查過程

調查執行 SQL 的 optimize 的過程,分析發現該 SQL 的 SQL 變換情況如下:

以下的 trim(ref_15.c_ogj) 執行完 find_order_in_list 后,Item_func_trim的args[0]->m_ref_item[0] 等于0<>0 as c_lrcm63eani,而不是0<>0 as c_ogj,這是因為c_lrcm63eani和c_ogj的名字都一樣,都是0<>0,在find_order_in_list函數里面由于名字一樣因此內層字段被外層替代了。而后在Item::clean_up_after_removal執行的時候,Item_func_ne即c_lrcm63eani因為出現了2次,因此執行了2次decrement_ref_count(),然而在Query_block::delete_unused_merged_columns函數卻把0<>0 as c_lrcm63eani的Item置為空了,因為這個時候c_lrcm63eani的item->decrement_ref_count()以后ref_count()為0因此繼續執行Item::clean_up_after_removal了。

EXPLAIN FORMAT=TREE 
select
    trim(ref_15.c_ogj),
    0<>0as c_lrcm63eani
from
    (select
    0<>0as c_ogj
from
   sequence_table(2) t1
where0<>0
orderby c_ogj asc) as ref_15;

查看函數調用過程發現 Query_block 在 prepare 的時候執行了 delete_unused_merged_columns,

-- 函數調用過程: Query_block::prepare -> Query_block::apply_local_transforms -> Query_block::delete_unused_merged_columns

bool find_order_in_list() {
  if (select_item != not_found_item) {
      if ((*order->item)->real_item() != (*select_item)->real_item()) {
        Item::Cleanup_after_removal_context ctx(
            thd->lex->current_query_block());

        (*order->item)
            ->walk(&Item::clean_up_after_removal, walk_options,  ==>Item_func_ne執行了2次,也執行了2次decrement_ref_count()
                   pointer_cast<uchar *>(&ctx));
      }
  }
}

bool Query_block::apply_local_transforms(THD *thd, bool prune) {
  DBUG_TRACE;

  assert(first_execution);
-- 這個函數把((Item_func *)&fields[0][0])->args[0]->m_ref_item[0]給刪了
  if (derived_table_count) delete_unused_merged_columns(&m_table_nest);
}

void Query_block::delete_unused_merged_columns(
    mem_root_deque<Table_ref *> *tables) {
  DBUG_TRACE;

  for (Table_ref *tl : *tables) {
    if (tl->nested_join == nullptr) continue;
    if (tl->is_merged()) {
      for (Field_translator *transl = tl->field_translation;
           transl < tl->field_translation_end; transl++) {
        Item *const item = transl->item;
        // Decrement the ref count as its no more used in
        // select list.
        if (item->decrement_ref_count()) continue; -- 因為執行完decrement_ref_count()以后返回的m_ref_count=0因此不會跳出這個循環

        // Cleanup the item since its not referenced from
        // anywhere.
        assert(item->fixed);
        Item::Cleanup_after_removal_context ctx(this);
        item->walk(&Item::clean_up_after_removal, walk_options,
                   pointer_cast<uchar *>(&ctx));
        transl->item = nullptr; -- 這個地方把Item_view_ref引用的Item_func_ne對象置為空了,即把trim函數參數的c_lrcm63eani列刪除了
      }
    }
    delete_unused_merged_columns(&tl->nested_join->m_tables);
  }
}

三、解決方案

通過上面的分析,我們可以發現問題在于多執行了一次Item::clean_up_after_removal,隨后在 MySQL 最新代碼嘗試執行以上 SQL 發現該 BUG 已經被修復,找到相關修復代碼,可以發現以下修復代碼。

相關commit ID號為: 2171a1260e2cdbbd379646be8ff6413a92fd48f4

-- 相關修復代碼如下:
@@ -7575,7 +7865,6 @@ bool Item::clean_up_after_removal(uchar *arg) {
 
   if (reference_count() > 1) {
     (void)decrement_ref_count();
+    ctx->stop_at(this);
   }
   return false;
 }

修改完查看一下這個函數的堆棧信息:

#0  Item::clean_up_after_removal (this=0x2, 
    arg=0x41 <error: Cannot access memory at address 0x41>)
    at sql/item.cc:9236
#1  0x0000555558fea5a8 in Item::walk (this=0x7fff2c338db8, processor=&virtual table offset 864, 
    walk=7, arg=0x7fffc83ee4b0 "") at sql/item.h:2543
#2  0x00005555596cc6f2 in find_order_in_list(thd=0x7fff2c001070, ref_item_array=..., 
    tables=0x7fff2c330b90, order=0x7fff2c32eae8, fields=0x7fff2c32fb20, is_group_field=false, 
    is_window_order=false) at sql/sql_resolver.cc:4625
#3  0x00005555596cd0ae in setup_order(thd=0x7fff2c001070, ref_item_array=..., 
    tables=0x7fff2c330b90, fields=0x7fff2c32fb20, order=0x7fff2c32eae8)
    at sql/sql_resolver.cc:4811
#4  0x00005555596bf528 in Query_block::prepare(this=0x7fff2c32fae0, thd=0x7fff2c001070, 
    insert_field_list=0x0) at sql/sql_resolver.cc:400
#5  0x00005555597d035d in Query_expression::prepare(this=0x7fff2c32f9e8, thd=0x7fff2c001070, 
    sel_result=0x7fff2c33b2a8, insert_field_list=0x0, added_options=0, removed_options=0)
    at sql/sql_union.cc:758
#6  0x0000555559590772 in Table_ref::resolve_derived(this=0x7fff2c339790, thd=0x7fff2c001070, 
    apply_semijoin=true) at sql/sql_derived.cc:451
#7  0x00005555596c2a80 in Query_block::resolve_placeholder_tables(this=0x7fff2c333f08, 
    thd=0x7fff2c001070, apply_semijoin=true)
    at sql/sql_resolver.cc:1408
#8  0x00005555596bea62 in Query_block::prepare(this=0x7fff2c333f08, thd=0x7fff2c001070, 
    insert_field_list=0x0) at sql/sql_resolver.cc:265

對于0<>0 as c_lrcm63eani這個Item_func_ne對象,執行到Item::clean_up_after_removal的時候,因為reference_count() > 1因此會執行新添加的ctx->stop_at(this),等到下一次再執行到這個Item_func_ne的clean_up_after_removal()函數的時候,就會因為ctx->is_stopped(this)而直接返回,不再執行一次decrement_ref_count(),從而避免了執行后面的transl->item = nullptr。

bool find_order_in_list() {
if (select_item != not_found_item) {
      if ((*order->item)->real_item() != (*select_item)->real_item()) {
        Item::Cleanup_after_removal_context ctx(
            thd->lex->current_query_block());

        (*order->item)
            ->walk(&Item::clean_up_after_removal, walk_options,  -- Item_func_ne執行了2次,而只執行了一次decrement_ref_count()
                   pointer_cast<uchar *>(&ctx));
      }
  }
}

void Query_block::delete_unused_merged_columns(
    mem_root_deque<Table_ref *> *tables) {
  DBUG_TRACE;

for (Table_ref *tl : *tables) {
    if (tl->nested_join == nullptr) continue;
    if (tl->is_merged()) {
      for (Field_translator *transl = tl->field_translation;
           transl < tl->field_translation_end; transl++) {
        Item *const item = transl->item;
        // Decrement the ref count as its no more used in
        // select list.
        if (item->decrement_ref_count()) continue; 因為執行完decrement_ref_count()以后返回的m_ref_count=1因此不會繼續執行后面的置空設置

        // Cleanup the item since its not referenced from
        // anywhere.
        assert(item->fixed);
        Item::Cleanup_after_removal_context ctx(this);
        item->walk(&Item::clean_up_after_removal, walk_options,
                   pointer_cast<uchar *>(&ctx));
        transl->item = nullptr; ==>這個地方不會運行到
      }
    }
    delete_unused_merged_columns(&tl->nested_join->m_tables);
  }
}

四、問題總結

通過以上分析我們可以發現,對于復雜的 SQL 會執行復雜的 Item 變換和刪除不需要的 Item,但是正是由于這樣才更容易導致 Crash 的出現。分析類似這樣的 Crash 問題的時候,因為涉及代碼量大,代碼邏輯復雜往往很難找到相關修復代碼,因此需要對代碼運行流程比較熟悉,同時要有相關復雜問題解決的經驗才能更好的應對這類問題。

責任編輯:武曉燕 來源: GreatSQL社區
相關推薦

2013-05-14 15:47:27

MySQL監控錯誤日志

2010-04-28 11:48:13

Oracle MySQ

2016-02-24 11:25:43

DevOps運維

2025-02-04 12:05:10

2020-09-09 10:00:41

JavaScript前端瓶頸

2017-02-15 09:40:38

JavaScript分析解決

2024-06-12 12:59:16

2017-08-01 17:01:49

IOT梯聯網AWS

2012-01-04 11:05:24

2010-05-17 09:49:46

MySQL中文問題

2011-07-18 09:36:42

Mysql數據庫root@localh

2010-08-06 13:40:06

DB2建立nickna

2010-07-30 13:21:21

2011-08-11 18:38:05

Oracle回滾段

2012-02-07 17:33:07

2010-05-28 19:39:28

MySQL 編碼轉換

2017-06-05 16:16:11

技術業務性

2010-05-28 13:04:04

MySQL root

2010-01-06 09:37:06

華為交換機故障

2010-06-07 09:22:21

MySQL+PHP亂碼
點贊
收藏

51CTO技術棧公眾號

国产最新精品免费| 国产精品jk白丝蜜臀av小说| 中文成人av在线| 91久久精品视频| 精品无码久久久久久久久| 秋霞蜜臀av久久电影网免费| 欧洲一区二区av| 99精品视频网站| 亚洲产国偷v产偷v自拍涩爱| 亚洲女同在线| 免费97视频在线精品国自产拍| 少妇激情一区二区三区视频| 日本美女久久| 一卡二卡三卡日韩欧美| 六月婷婷久久| 国产偷拍一区二区| 久久亚洲美女| 欧美俄罗斯性视频| 成人做爰69片免网站| 亚洲一二av| 欧美日韩在线观看一区二区| 97干在线视频| 天天在线视频色| 99久久精品99国产精品| 91九色露脸| 中文字幕制服诱惑| 性色av一区二区怡红| 欧美成人精品激情在线观看| 亚洲综合色一区| jizz18欧美18| 欧美精品乱码久久久久久| 免费毛片小视频| а√天堂资源地址在线下载| 国产夜色精品一区二区av| 国产伦精品一区二区三区视频孕妇| 在线视频精品免费| 亚洲毛片在线| 色综合久久久久久中文网| а天堂中文在线资源| 亚洲人成精品久久久| 亚洲第一天堂av| 在线观看视频你懂得| 免费一区二区三区四区| 在线观看国产日韩| 黄色av免费在线播放| 啊啊啊久久久| 亚洲福中文字幕伊人影院| 永久免费看av| 伊人春色在线观看| 樱桃视频在线观看一区| 黄瓜视频免费观看在线观看www | 国产高清久久久久| 91精品啪在线观看麻豆免费| 中文字幕精品无码亚| 日韩高清在线电影| 国产精品影片在线观看| 亚洲精品无码久久久久| 久久免费国产| 国产精品成人久久久久| 国产精品51麻豆cm传媒 | 青青视频在线观| 91视频com| 久久精品人人做人人爽电影| 天堂在线观看视频| 91美女蜜桃在线| 欧美午夜欧美| 91福利在线视频| 国产精品福利一区二区三区| 在线精品日韩| 香蕉久久aⅴ一区二区三区| 亚洲黄色av一区| 分分操这里只有精品| 日韩欧美精品一区二区三区| 色综合色综合色综合色综合色综合| 97在线播放视频| 视频一区在线免费看| 欧美另类变人与禽xxxxx| 久久久精品视频国产| 国产精品国产| 国产亚洲精品高潮| 国产成人综合在线视频| 狠狠入ady亚洲精品经典电影| 91精品国产亚洲| 日本三级一区二区三区| 激情久久五月天| 国产91精品一区二区绿帽| 四虎在线视频| 国产精品久久久久天堂| 波多野结衣与黑人| 唐人社导航福利精品| 91麻豆精品国产91久久久久久| 亚洲乱妇老熟女爽到高潮的片 | 亚洲欧洲精品在线| 色呦呦网站在线观看| 欧美日韩一区二区三区在线免费观看 | 亚洲欧美日韩综合国产aⅴ| 日本精品免费一区二区三区| 亚洲视频久久久| 成人午夜精品在线| 日韩亚洲不卡在线| 男女视频在线| 欧美性生交片4| 国产a级片视频| 成人看的视频| 97视频免费在线看| 国产又黄又大又粗的视频| 国产大片一区二区| 欧美性大战久久久久| 在线看福利影| 精品视频免费看| 野花社区视频在线观看| 亚洲高清影视| 国产精品高清在线| 天天操天天操天天操| 国产精品国产三级国产有无不卡 | 国产亚洲欧美久久久久| 秋霞国产午夜精品免费视频| 精品国产乱码久久久久久丨区2区| a√资源在线| 婷婷成人激情在线网| 三级黄色片免费观看| 欧美码中文字幕在线| 91精品国产91久久久久| 亚洲AV无码精品自拍| 中文字幕在线不卡视频| 日本成人在线免费视频| 加勒比久久高清| 欧美成人sm免费视频| 中文字幕网址在线| 久久久久国产免费免费 | 全网免费在线播放视频入口| 首页国产欧美久久| 久久久av水蜜桃| av中文字幕在线观看第一页| 日韩亚洲国产中文字幕欧美| 午夜精品久久久久99蜜桃最新版| 久久久久欧美精品| 久久久水蜜桃| 亚洲欧洲自拍| 日韩av在线天堂网| 日本少妇裸体做爰| 国产91精品在线观看| 免费看污污视频| 99久久这里有精品| 久久精品国产久精国产一老狼| 中文字幕久久熟女蜜桃| 国产欧美精品在线观看| 韩国中文字幕av| 精品国产一区二区三区四区| 日韩免费高清在线观看| 九色国产在线观看| 欧美吞精做爰啪啪高潮| 亚洲精品国产精品国自| 免费成人在线视频观看| 亚洲一区三区电影在线观看| 91亚洲精品在看在线观看高清| 日韩视频中文字幕| 国产精品视频无码| 亚洲综合无码一区二区| 亚洲成人精品在线播放| 一区精品久久| 麻豆av福利av久久av| 欧美不卡高清一区二区三区| 永久免费毛片在线播放不卡| 在线免费a视频| 亚洲精品乱码久久久久久黑人| 91丨porny丨九色| 国产在线日韩| 免费观看成人在线| 国产激情久久| 久青草国产97香蕉在线视频| 成人高潮片免费视频| 精品二区三区线观看| av中文字幕免费观看| 美女视频一区二区三区| 91看片淫黄大片91| 欧美三级电影在线| 国产精品高清在线观看| 亚洲性图自拍| 亚洲免费影视第一页| 一级黄在线观看| 亚洲一二三区在线观看| 37p粉嫩大胆色噜噜噜| 久久精品国产免费| 欧美深夜福利视频| 欧美午夜精彩| 岛国视频一区免费观看| 日韩性xxx| 久久av.com| 三级毛片在线免费看| 777久久久精品| 日韩欧美中文字幕一区二区| 国产女人18毛片水真多成人如厕 | 91在线免费播放| 日韩肉感妇bbwbbwbbw| 国精品一区二区三区| 欧洲精品亚洲精品| 在线视频亚洲欧美中文| 国产91在线播放九色快色| 中文字幕在线观看网站| 亚洲色图偷窥自拍| 国产成人自拍一区| 欧美裸体bbwbbwbbw| 成人在线免费看视频| 亚洲女同女同女同女同女同69| 人妻少妇精品视频一区二区三区| 国产主播一区二区三区| 日本在线观看a| 欧美一区高清| 日韩区国产区| 窝窝社区一区二区| av在线亚洲男人的天堂| www.久久.com| 热久久视久久精品18亚洲精品| 羞羞污视频在线观看| 国产亚洲aⅴaaaaaa毛片| 手机在线不卡av| 日韩亚洲欧美一区| 国产又粗又猛又黄又爽无遮挡| 福利视频一区二区| 久久精品www| 亚洲天堂av一区| 四虎成人免费影院| 久久麻豆一区二区| 亚洲自拍偷拍精品| 国产酒店精品激情| 视频在线观看免费高清| 视频在线观看一区二区三区| 每日在线观看av| 综合国产在线| 久久av秘一区二区三区| 久久裸体网站| 午夜欧美性电影| 国产调教一区二区三区| 精品国产乱码久久久久久郑州公司| 中文无码日韩欧| 91福利入口| 超碰国产精品一区二页| 国产三级精品网站| 久久亚洲人体| 国产有码在线一区二区视频| 韩日一区二区| 国产精品欧美风情| 亚洲日本在线观看视频| 日本精品va在线观看| 蜜桃av在线| 国产91成人video| 在线看的毛片| 日韩av手机在线观看| 制服诱惑亚洲| 国产精品丝袜一区二区三区| 国产麻豆一区| 国产精品视频xxxx| 欧美综合影院| **亚洲第一综合导航网站| 午夜久久av| 国产精品免费一区二区三区观看 | 超碰一区二区| 国产mv免费观看入口亚洲| 欧美日韩成人影院| 国产精品一区av| 国产在线一区不卡| 国产成人免费观看| 欧美调教在线| 日韩精品伦理第一区| 四虎国产精品免费观看| 日韩a级黄色片| 一区在线播放| 黄色一级免费大片| 国产真实乱偷精品视频免| 中文字幕人妻熟女人妻a片| 国产成人午夜片在线观看高清观看 | 国产69精品久久久久9999人| 国产中文字幕日韩| 日韩一二三区| 欧美福利精品| 希岛爱理一区二区三区| avav在线播放| 西西裸体人体做爰大胆久久久| 亚州精品一二三区| 国产.欧美.日韩| 成都免费高清电影| 亚洲欧美电影一区二区| www.av麻豆| 欧美日韩久久一区二区| www.五月婷| 亚洲精品一区中文| 亚洲精品亚洲人成在线| 久久久亚洲福利精品午夜| 日韩激情电影| 国产噜噜噜噜噜久久久久久久久| 秋霞影院一区| 欧美大陆一区二区| 外国成人免费视频| 玩弄中年熟妇正在播放| 麻豆国产精品官网| 国产精品手机在线观看| 国产精品系列在线| 国产一级片免费| 欧美日韩色综合| 少妇喷水在线观看| www.亚洲免费视频| 麻豆网站免费在线观看| 成人黄色午夜影院| 国产精品密蕾丝视频下载| 欧美黄网在线观看| 日韩电影免费一区| 久久久久久久无码| 亚洲男人都懂的| 奴色虐av一区二区三区| 精品少妇一区二区三区在线播放 | 国产日韩欧美精品在线观看| 日韩精品1区2区3区| 国产精品一区二区无码对白| 国产精品美女久久久久久久久| 欧美一级视频免费观看| 日韩一区二区在线看片| 国产中文字幕在线| 8050国产精品久久久久久| 国产一区二区三区免费观看在线| 日韩aⅴ视频一区二区三区| 极品少妇一区二区三区| 亚洲精品乱码久久久久久动漫| 久久精品亚洲一区二区三区浴池| 国产一级一片免费播放| 欧美精品日日鲁夜夜添| 成年在线电影| 国产97在线|亚洲| 亚洲小说图片视频| 老太脱裤子让老头玩xxxxx| 国产精品1区2区3区在线观看| 亚洲欧美日韩第一页| 色综合亚洲欧洲| 日韩三级电影网| 777国产偷窥盗摄精品视频| 超碰97久久| 97久久国产亚洲精品超碰热| 国产久卡久卡久卡久卡视频精品| 婷婷国产成人精品视频| 欧美丝袜自拍制服另类| 国产一级网站视频在线| 日本不卡免费高清视频| 日韩美女毛片| 日本www在线播放| 久久人人爽爽爽人久久久| 亚洲 欧美 视频| 日韩精品极品在线观看| 亚洲天堂免费电影| 欧美激情www| 久久综合影音| 日本一区二区视频在线播放| 欧美在线一二三四区| аⅴ资源新版在线天堂| 国产色视频一区| 在线观看国产精品入口| 91av免费观看| 亚洲妇女屁股眼交7| 亚洲欧美日韩动漫| 日韩免费高清在线观看| 欧美中文字幕一区二区| 岛国毛片在线播放| 亚洲免费观看高清| 狠狠躁夜夜躁av无码中文幕| 韩剧1988在线观看免费完整版| 欧美成人一区在线观看| 欧美日韩第二页| 欧美国产一区视频在线观看| 一级做a爱片久久毛片| 欧美成人黑人xx视频免费观看| aaa国产精品视频| 少妇性饥渴无码a区免费| 国产欧美日韩综合| 国产精品伦一区二区三区| 欧美裸体xxxx极品少妇| 欧美黑白配在线| 性欧美极品xxxx欧美一区二区| 国产精品高潮呻吟| 日本高清视频免费观看| 国产成人精品视频在线观看| 97精品97| 国产黑丝在线观看| 欧美性生活影院| 黄色影院在线看| 日韩性感在线| 国产98色在线|日韩| 欧美黄色一级大片| 欧美疯狂性受xxxxx另类| 日韩在线影院| 一区二区三区四区国产| 国产成人啪午夜精品网站男同| 亚洲欧美在线观看视频| 在线观看欧美视频| 涩爱av色老久久精品偷偷鲁| 国产乱子伦农村叉叉叉| 国产精品午夜在线| 欧美一级淫片免费视频魅影视频| 国产99在线|中文| 激情91久久| 中文乱码字幕高清一区二区| 亚洲第一中文字幕|