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

數據庫管理提速:SQL解析的探索與應用

運維 數據庫運維 MySQL
SQL解析是一項復雜的技術,一般都是由數據庫廠商來掌握,當然也有公司專門提供SQL解析的API。SQL解析與優化是屬于編譯器范疇,和C語言等其他語言的解析沒有本質的區別。其中分為詞法分析、語法和語義分析、優化、執行代碼生成。

作者介紹

數據庫作為核心的基礎組件,是需要重點保護的對象。任何一個線上的不慎操作,都有可能給數據庫帶來嚴重的故障,從而給業務造成巨大的損失。

為了避免這種損失,一般會在管理上下功夫,比如為研發人員制定數據庫開發規范;新上線的SQL,需要DBA進行審核;維護操作需要經過領導審批等等。而且如果希望能夠有效地管理這些措施,需要有效的數據庫培訓,還需要DBA細心的進行SQL審核。很多中小型創業公司可以通過設定規范、進行培訓、完善審核流程來管理數據庫。

隨著美團點評的業務不斷發展和壯大,上述措施的實施成本越來越高。如何更多的依賴技術手段,來提高效率,越來越受到重視。業界已有不少基于MySQL源碼開發的SQL審核、優化建議等工具,極大的減輕了DBA的SQL審核負擔。那么我們能否繼續擴展MySQL的源碼,來輔助DBA和研發人員來進一步提高效率呢?比如,更全面的SQL優化功能;多維度的慢查詢分析;輔助故障分析等。要實現上述功能,其中最核心的技術之一就是SQL解析。

現狀與場景

SQL解析是一項復雜的技術,一般都是由數據庫廠商來掌握,當然也有公司專門提供SQL解析的API(參考鏈接:http://sqlparser.com/)。

由于這幾年MySQL數據庫中間件的興起,需要支持讀寫分離、分庫分表等功能,就必須從SQL中抽出表名、庫名以及相關字段的值。因此像Java語言編寫的Druid,C語言編寫的MaxScale,Go語言編寫的Kingshard等,都會對SQL進行部分解析。而真正把SQL解析技術用于數據庫維護的產品較少,主要有如下幾個:

  • 美團點評開源的SQLAdvisor。它基于MySQL原生態詞法解析,結合分析SQL中的where條件、聚合條件、多表Join關系給出索引優化建議。

    參考鏈接:https://github.com/Meituan-Dianping/SQLAdvisor

  • 去哪兒開源的Inception。側重于根據內置的規則,對SQL進行審核。

    參考鏈接:http://mysql-inception.github.io/inception-document

  • 阿里的Cloud DBA。根據官方文檔介紹,其也是提供SQL優化建議和改寫。

    參考鏈接:https://yq.aliyun.com/articles/218442

上述產品都有非常合適的應用場景,在業界也被廣泛使用。但是SQL解析的應用場景遠遠沒有被充分發掘,比如:

  • 基于表粒度的慢查詢報表。比如,一個Schema中包含了屬于不同業務線的數據表,那么從業務線的角度來說,其希望提供表粒度的慢查詢報表。

  • 生成SQL特征。將SQL語句中的值替換成問號,方便SQL歸類。雖然可以使用正則表達式實現相同的功能,但是其Bug較多,可以參考pt-query-digest。比如pt-query-digest中,會把遇到的數字都替換成“?”,導致無法區別不同數字后綴的表。

  • 高危操作確認與規避。比如,DBA不小心Drop數據表,而此類操作,目前還無有效的工具進行回滾,尤其是大表,其后果將是災難性的。

  • SQL合法性判斷。為了安全、審計、控制等方面的原因,美團點評不會讓研發人員直接操作數據庫,而是提供RDS服務。尤其是對于數據變更,需要研發人員的上級主管進行業務上的審批。如果研發人員,寫了一條語法錯誤的SQL,而RDS無法判斷該SQL是否合法,就會造成不必要的溝通成本。

因此為了讓所有有需要的業務都能方便地使用SQL解析功能,我們認為應該具有如下特性:

  • 直接暴露SQL解析接口,使用盡量簡單。比如:輸入SQL,則輸出表名、特征和優化建議。

  • 接口的使用不依賴于特定的語言,否則維護和使用的代價太高。比如:以HTTP等方式提供服務。

千里之行,始于足下,下面我先介紹下SQL的解析原理。

原理

SQL解析與優化是屬于編譯器范疇,和C語言等其他語言的解析沒有本質的區別。其中分為詞法分析、語法和語義分析、優化、執行代碼生成。對應到MySQL的部分,如下圖:

數據庫管理提速:SQL解析的探索與應用

SQL解析原理

1、詞法分析

SQL解析由詞法分析和語法/語義分析兩個部分組成。詞法分析主要是把輸入轉化成一個個Token。其中Token中包含Keyword(也稱symbol)和非Keyword。例如:SQL語句select username from userinfo,在分析之后,會得到4個Token,其中有2個Keyword,分別為select和from:

數據庫管理提速:SQL解析的探索與應用

通常情況下,詞法分析可以使用Flex來生成。

參考鏈接:https://www.gnu.org/software/flex

但是MySQL并未使用該工具,而是手寫了詞法分析部分(據說是為了效率和靈活性,可參考:https://yq.aliyun.com/articles/71979)。具體代碼在sql/lex.h和sql/sql_lex.cc文件中。

MySQL中的Keyword定義在sql/lex.h中,如下為部分Keyword:

 

  1. "&&", SYM(AND_AND_SYM)},  
  2. "<", SYM(LT)},  
  3. "<=", SYM(LE)},  
  4. "<>", SYM(NE)},  
  5. "!=", SYM(NE)},  
  6. "=", SYM(EQ)},  
  7. ">", SYM(GT_SYM)},  
  8. ">=", SYM(GE)},  
  9. "<<", SYM(SHIFT_LEFT)},  
  10. ">>", SYM(SHIFT_RIGHT)},  
  11. "<=>", SYM(EQUAL_SYM)},  
  12. "ACCESSIBLE", SYM(ACCESSIBLE_SYM)},  
  13. "ACTION", SYM(ACTION)},  
  14. "ADD", SYM(ADD)},  
  15. "AFTER", SYM(AFTER_SYM)},  
  16. "AGAINST", SYM(AGAINST)},  
  17. "AGGREGATE", SYM(AGGREGATE_SYM)},  
  18. "ALL", SYM(ALL)}, 

 

詞法分析的核心代碼在sql/sql_lex.c文件中的MySQLLex→lex_one_Token,有興趣的同學可以下載源碼研究。

2、語法分析

語法分析就是生成語法樹的過程。這是整個解析過程中最精華、最復雜的部分,不過這部分MySQL使用了Bison來完成。即使如此,如何設計合適的數據結構以及相關算法,去存儲和遍歷所有的信息,也是值得在這里研究的。

語法分析樹

SQL語句:

 

  1. select username, ismale from userinfo where age > 20 and level > 5 and 1 = 1 

會生成如下語法樹:

數據庫管理提速:SQL解析的探索與應用

語法樹

對于未接觸過編譯器實現的同學,肯定會好奇如何才能生成這樣的語法樹,不過其背后的原理都是編譯器的范疇,大家可以參考維基百科的一篇文章,以及該鏈接中的參考書籍。本人也是在學習MySQL源碼過程中,閱讀了部分內容。

參考鏈接:https://en.wikipedia.org/wiki/LR_parser

由于編譯器涉及的內容過多,本人經歷和時間有限,不做過多探究。從工程的角度來說,學會如何使用Bison去構建語法樹,來解決實際問題,對我們的工作也許有更大幫助。下面我就以Bison為基礎,探討該過程。

MySQL語法分析樹生成過程

全部的源碼在sql/sql_yacc.yy中,在MySQL5.6中有17K行左右代碼。這里列出涉及到SQL:

 

  1. select username, ismale from userinfo where age > 20 and level > 5 and 1 = 1 

解析過程的部分代碼摘錄出來。其實有了Bison之后,SQL解析的難度也沒有想象的那么大。特別是這里給出了解析的脈絡之后。

代碼示下:

 

  1. select /*select語句入口*/:  
  2. select_init  
  3.  
  4. LEX *lex= Lex;  
  5. lex->sql_command= SQLCOM_SELECT;  
  6.  
  7.  
  8. select_init:  
  9. SELECT_SYM /*select 關鍵字*/ select_init2  
  10. '(' select_paren ')' union_opt  
  11.  
  12. select_init2:  
  13. select_part2  
  14. SELECT_LEX * sel= lex->current_select;  
  15. if (lex->current_select->set_braces(0))  
  16.  
  17. my_parse_error(ER(ER_SYNTAX_ERROR));  
  18. MYSQL_YYABORT; 
  19.  
  20. if (sel->linkage == UNION_TYPE &&  
  21. sel->master_unit->first_select->braces)  
  22. union_clause  
  23.  
  24. select_part2:  
  25. SELECT_LEX *sel= lex->current_select;  
  26. if (sel->linkage != UNION_TYPE)  
  27. mysql_init_select(lex);  
  28. lex->current_select->parsing_place= SELECT_LIST;  
  29.  
  30. select_options select_item_list /*解析列名*/  
  31.  
  32. Select->parsing_place= NO_MATTER;  
  33.  
  34. select_into select_lock_type  
  35.  
  36. select_into:  
  37. opt_order_clause opt_limit_clause {}  
  38. into  
  39. | select_from /*from 字句*/  
  40. into select_from  
  41. | select_from into  
  42.  
  43. select_from:  
  44. FROM join_table_list /*解析表名*/ where_clause /*where字句*/ group_clause having_clause  
  45. opt_order_clause opt_limit_clause procedure_analyse_clause  
  46.  
  47. Select->context.table_list=  
  48. Select->context.first_name_resolution_table=  
  49. Select->table_list.first 
  50.  
  51. FROM DUAL_SYM where_clause opt_limit_clause  
  52. /* oracle compatibility: oracle always requires FROM clause,  
  53. and DUAL is system table without fields.  
  54. Is "SELECT 1 FROM DUAL" any better than "SELECT 1" ?  
  55. Hmmm :) */  
  56. where_clause:  
  57. /* empty */ { Select->where= 0; }  
  58. WHERE  
  59.  
  60. Select->parsing_place= IN_WHERE;  
  61.  
  62. expr /*各種表達式*/  
  63.  
  64. SELECT_LEX *selectSelect 
  65. select->where= $3;  
  66. select->parsing_place= NO_MATTER;  
  67. if ($3)  
  68. $3->top_level_item;  
  69. /* all possible expressions */  
  70. expr:  
  71. | expr and expr %prec AND_SYM  
  72.  
  73. /* See comments in rule expr: expr or expr */  
  74. Item_cond_and *item1;  
  75. Item_cond_and *item3;  
  76. if (is_cond_and($1))  
  77.  
  78. item1= (Item_cond_and*) $1;  
  79. if (is_cond_and($3))  
  80. item3= (Item_cond_and*) $3;  
  81. /*  
  82. (X1 AND X2) AND (Y1 AND Y2) ==> AND (X1, X2, Y1, Y2)  
  83. */  
  84. item3->add_at_head(item1->argument_list);  
  85. $$ = $3;  
  86.  
  87. else  
  88. (X1 AND X2) AND Y ==> AND (X1, X2, Y)  
  89. */  
  90. item1->add($3);  
  91. $$ = $1;  
  92. else if (is_cond_and($3))  
  93. AND (Y1 AND Y2) ==> AND (X, Y1, Y2)  
  94. */  item3->add_at_head($1); 
  95. /* X AND Y */  
  96. $$ = new (YYTHD->mem_root) Item_cond_and($1, $3);  
  97. if ($$ == ) 

上下拉動可完整查看

在大家瀏覽上述代碼的過程,會發現Bison中嵌入了C++的代碼。通過C++代碼,把解析到的信息存儲到相關對象中。例如表信息會存儲到TABLE_LIST中,order_list存儲order by子句里的信息,where字句存儲在Item中。有了這些信息,再輔助以相應的算法就可以對SQL進行更進一步的處理了。

核心數據結構及其關系

在SQL解析中,最核心的結構是SELECT_LEX,其定義在sql/sql_lex.h中。下面僅列出與上述例子相關的部分。

數據庫管理提速:SQL解析的探索與應用

SQL解析樹結構

上面圖示中,列名username、ismale存儲在item_list中,表名存儲在table_list中,條件存儲在where中。其中以where條件中的Item層次結構最深,表達也較為復雜,如下圖所示:

數據庫管理提速:SQL解析的探索與應用

where條件

SQL解析的應用

為了更深入的了解SQL解析器,這里給出2個應用SQL解析的例子:

1、無用條件去除

“無用條件去除”屬于優化器的邏輯優化范疇,僅僅根據SQL本身以及表結構即可完成,其優化的情況較多,代碼在sql/sql_optimizer.cc文件中的remove_eq_conds函數。為了避免過于繁瑣的描述,以及大段代碼的粘貼,這里通過圖片來分析以下四種情況:

  • 1=1 and (m > 3 and n > 4)

  • 1=2 and (m > 3 and n > 4)

  • 1=1 or (m > 3 and n > 4)

  • 1=2 or (m > 3 and n > 4)

無用條件去除a:

數據庫管理提速:SQL解析的探索與應用

 

 

無用條件去除b

 

 

數據庫管理提速:SQL解析的探索與應用

無用條件去除c

數據庫管理提速:SQL解析的探索與應用

無用條件去除d

數據庫管理提速:SQL解析的探索與應用

如果對其代碼實現有興趣的同學,需要對MySQL中的一個重要數據結構Item類有所了解。因為其比較復雜,所以MySQL官方文檔專門介紹了Item類。

參考鏈接:https://dev.mysql.com/doc/internals/en/item-class.html

阿里的MySQL小組也有類似的文章。如需更詳細的了解,就需要去查看源碼中sql/item_*等文件。

2、SQL特征生成

為了確保數據庫這一系統基礎組件穩定、高效運行,業界有很多輔助系統。比如慢查詢系統、中間件系統。這些系統采集、收到SQL之后,需要對SQL進行歸類,以便統計信息或者應用相關策略。歸類時,通常需要獲取SQL特征。比如SQL:

 

  1. select username, ismale from userinfo where age > 20 and level > 5; 

SQL特征為:

 

  1. select username, ismale from userinfo where age > ? and level > ? 

業界著名的慢查詢分析工具pt-query-digest,通過正則表達式實現這個功能,但是這類處理辦法Bug較多。接下來就介紹如何使用SQL解析,完成SQL特征的生成。

SQL特征生成分兩部分組成:

  • 生成Token數組;

  • 根據Token數組,生成SQL特征。

首先回顧在詞法解析章節,我們介紹了SQL中的關鍵字,并且每個關鍵字都有一個16位的整數對應,而非關鍵字統一用ident表示,其也對應了一個16位整數。如下表:

數據庫管理提速:SQL解析的探索與應用

將一個SQL轉換成特征的過程:

數據庫管理提速:SQL解析的探索與應用

在SQL解析過程中,可以很方便的完成Token數組的生成。而一旦完成Token數組的生成,就可以很簡單的完成SQL特征的生成。SQL特征被廣泛用于各個系統中,比如pt-query-digest需要根據特征對SQL歸類,然而其基于正則表達式的實現有諸多Bug。下面列舉幾個已知的Bug:

數據庫管理提速:SQL解析的探索與應用

學習建議

最近,在對SQL解析器和優化器探索的過程中,從一開始的茫然無措到有章可循,也總結了一些心得體會,在這里跟大家分享一下:

  • 首先,閱讀相關書籍,書籍能給我們一個系統的認識解析器和優化器的角度。但是該類針對MySQL的書籍市面上很少,目前中文作品可以看下《數據庫查詢優化器的藝術:原理解析與SQL性能優化》;

  • 其次,要閱讀源碼,但是***以某個版本為基礎,比如MySQL5.6.23,因為SQL解析、優化部分的代碼在不斷變化,尤其是在跨越大的版本時,改動力度大;

  • 再次,多使用GDB調試,驗證自己的猜測,檢驗閱讀質量;

  • ***,需要寫相關代碼驗證,只有寫出來了才能算真正的掌握。 

責任編輯:龐桂玉 來源: DBAplus社群
相關推薦

2022-04-19 09:53:06

云數據庫云計算數據庫

2018-02-27 15:48:31

數據庫SQL鎖死

2010-06-30 14:54:42

SQL Server

2009-03-05 14:43:39

元數據管理SQL Server

2011-08-22 09:55:30

SQL Server 排序

2010-07-05 15:23:08

SQL Server數

2022-06-30 10:56:18

字節云數據庫存儲

2010-04-29 09:35:31

Oracle數據庫

2017-06-12 18:24:25

數據庫壓縮技術

2010-06-30 08:13:18

SQL Server數

2010-07-21 14:11:36

SQL Server

2024-07-10 08:00:00

數據庫流式數據庫

2011-05-12 11:01:07

MySQL數據庫緩存

2011-03-11 16:42:51

Oracle數據庫視圖

2010-06-17 10:02:12

SQL Server數

2011-08-18 10:36:24

SQL ServerISNULL函數

2011-08-19 14:53:02

SQL ServerDataRelatio

2010-07-08 11:23:41

SQL Server還

2011-04-01 09:43:28

SQL Server數據庫快照

2023-12-22 14:29:41

數據庫分布式數據庫湖倉一體
點贊
收藏

51CTO技術棧公眾號

日本久久二区| 黄色av免费在线| 天堂影院一区二区| www国产91| 中文字幕18页| 亚洲精品一级二级| 亚洲另类在线一区| 久久久一本精品99久久精品66| 亚洲大尺度在线观看| 欧美va天堂| 亚洲人成在线观看网站高清| www激情五月| 亚洲人成午夜免电影费观看| 国产精品进线69影院| 国产精品毛片va一区二区三区| 免费观看日批视频| 在线成人激情| 亚洲欧美中文字幕在线一区| 欧美性猛交xxxx乱大交91| 少妇淫片在线影院| 亚洲精品成人a在线观看| 欧美一区二区视频17c| av官网在线观看| 天堂一区二区在线免费观看| 欧美激情精品久久久久久久变态 | 超碰成人免费| 欧美三级三级三级| 5月婷婷6月丁香| 成人区精品一区二区不卡| 久久色.com| 国产精品一 二 三| 国产成人精品a视频| 青青草97国产精品免费观看| 91国偷自产一区二区三区的观看方式| 免费精品在线视频| 国产免费久久| 日韩精品黄色网| 男人添女人荫蒂国产| 4438五月综合| 欧美三区在线视频| 亚洲黄色a v| 亚洲精品福利电影| 岛国视频午夜一区免费在线观看| 中文字幕色呦呦| 美女隐私在线观看| 国产精品午夜免费| 亚洲草草视频| 在线a人片免费观看视频| 国产午夜精品久久久久久久| 鲁片一区二区三区| 青青青手机在线视频观看| www.欧美日韩国产在线| 国产成人精品免费视频大全最热 | 国产高清成人在线| 91影院在线免费观看视频| 国产一区二区三区四区视频 | 午夜剧场免费看| 一区二区三区在线资源| 日韩欧美中文一区| 国产精品91av| 国产+成+人+亚洲欧洲在线| 欧美成人乱码一区二区三区| 国产a√精品区二区三区四区| 精品一区91| 日韩欧美国产午夜精品| 国产精品欧美性爱| 欧美日韩一本| 亚洲欧洲中文天堂| 手机毛片在线观看| 日韩一区二区三区免费播放| 日韩在线中文视频| 久久福利免费视频| 欧美精品黄色| 91po在线观看91精品国产性色| 国产区一区二区三| 蜜臀av在线播放一区二区三区| 成人羞羞国产免费| 囯产精品久久久久久| 91在线高清观看| 欧美一区二区综合| 欧美黑人激情| 亚洲国产一区二区在线播放| 欧美成人xxxxx| 成人在线免费av| 日韩欧美亚洲一区二区| 欧洲一级黄色片| 日韩欧美一区二区三区在线视频| www.欧美精品| 日韩精品无码一区二区| 奇米精品一区二区三区在线观看 | 国产精品一区二区三区av麻| 日韩一级裸体免费视频| 久久精品国产亚洲av麻豆色欲 | 午夜美女久久久久爽久久| 中文字幕在线观看视频网站| 麻豆精品久久久| 国产精品视频一区二区三区经| 免费播放片a高清在线观看| 中文字幕在线播放不卡一区| 成人一区二区免费视频| 高清欧美日韩| 亚洲精品久久7777777| 91大神福利视频| 亚洲国产日本| 91久久精品久久国产性色也91| 天天干天天操av| 成人免费一区二区三区视频| 欧美精品久久久久久久免费| 欧美大片网站| 精品亚洲永久免费精品| 在线看的片片片免费| 亚洲综合欧美| 成人h视频在线观看| 91精品国产91久久久久游泳池 | av网站免费播放| 久久综合色鬼综合色| 在线观看17c| 成人国产在线| 亚洲欧美中文日韩在线| 久久99久久久| 久久国产三级精品| 欧美色图亚洲自拍| 美女的胸无遮挡在线观看| 欧美一卡2卡3卡4卡| 一级片视频免费看| 一区二区高清| 爱情岛论坛亚洲入口| 免费高清在线观看| 欧美亚洲免费在线一区| 偷拍女澡堂一区二区三区| 欧美日韩一区二区三区四区在线观看| 国产欧美日韩免费| yw193.com尤物在线| 欧美性20hd另类| 中国一级特黄录像播放| 国内精品福利| 成人黄色片视频网站| 精品国产丝袜高跟鞋| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲黄色免费在线观看| 亚洲激情偷拍| 国产一区二区免费电影| 国模雨婷捆绑高清在线| 欧美成人bangbros| 丰满少妇高潮久久三区| 国产一二精品视频| 永久免费在线看片视频| 91精品亚洲一区在线观看| 中文字幕亚洲无线码在线一区| 少妇久久久久久久| 欧美激情中文字幕一区二区| 熟妇人妻无乱码中文字幕真矢织江| 丝袜连裤袜欧美激情日韩| 66m—66摸成人免费视频| 婷婷丁香花五月天| 日韩欧美成人免费视频| 在线免费看黄视频| 日韩国产精品久久| 亚洲免费久久| 国产精品麻豆| 欧美国产亚洲精品久久久8v| 国产91免费看| 大荫蒂欧美视频另类xxxx| 国产精品扒开腿做爽爽| 日本不卡的三区四区五区| 亚洲精品国产系列| 高清一区二区三区av| 色综合老司机第九色激情| 欧美一区二区三区激情| 精品日韩视频在线观看| 国产真实乱人偷精品人妻| 日本vs亚洲vs韩国一区三区| 中文字幕一区二区中文字幕| 免费看一区二区三区| 久久久噜噜噜久久| 黄色av网址在线免费观看| 欧美午夜精品理论片a级按摩| 老司机精品免费视频| 国产成人免费在线视频| www在线观看免费| 国产日韩视频在线| 亚洲在线视频观看| 牛牛精品一区二区| 日韩在线视频播放| 欧美天堂在线视频| 欧美视频一区二区三区四区| 亚洲av无码一区二区三区在线| 成人在线一区二区三区| 50路60路老熟妇啪啪| 一区二区电影在线观看| 久久精品日产第一区二区三区 | 官网99热精品| 小草在线视频免费播放| 久久精品人人爽| 偷拍自拍在线| 制服丝袜中文字幕一区| 日本三级一区二区| 国产精品成人免费在线| 久久人妻少妇嫩草av无码专区| 日韩av网站在线观看| 精品成在人线av无码免费看| 精品久久美女| 好吊色欧美一区二区三区四区 | 91麻豆精品国产91久久久| 日本熟妇色xxxxx日本免费看| 国产欧美日韩精品在线| 国内精品免费视频| 久久成人免费电影| 亚洲欧洲日产国码无码久久99| 91精品91| 亚洲国产精品一区二区第一页| 国产精品久久久网站| 91视频免费在线| 偷拍精品精品一区二区三区| 久久久久久久久亚洲| 麻豆影视在线观看_| 国产亚洲一区二区精品| 亚州视频一区二区三区| 欧美zozo另类异族| 国产乱人乱偷精品视频| 在线免费av一区| 久久久久久久久久久影院| 一区二区三区四区中文字幕| 四虎永久免费地址| 亚洲国产精品国自产拍av| av在线网站观看| 99久久国产免费看| 中文字幕在线观看91| 国产乱对白刺激视频不卡| 在线观看免费视频高清游戏推荐| 久久国产99| 日本www在线播放| 1024日韩| a级免费在线观看| 午夜精品久久| 国产性生活免费视频| 亚洲mv大片欧洲mv大片| 一级做a爰片久久| 日韩毛片视频| 一区二区三视频| 日韩成人影院| 亚洲欧洲精品在线| 爽成人777777婷婷| 正在播放一区二区三区| 欧美激情国产在线| 中文字幕一区二区三区有限公司 | 婷婷激情五月综合| 欧美在线免费视屏| 超碰在线免费97| 91黄色免费观看| 色老头在线视频| 欧美在线免费播放| 中文字幕+乱码+中文字幕明步 | 丰满少妇高潮在线观看| 欧美成人高清电影在线| 欧美一级性视频| 精品一区精品二区| 精品视频三区| 日韩中文在线不卡| 成人国产免费电影| 欧美激情免费视频| 日韩精品极品| 国产精品久久久久久久久男| 精品自拍视频| 91超碰rencao97精品| 国产精品黄网站| 免费在线成人av电影| 激情综合网五月| 91中文字幕在线视频| 久久久久久一级片| 性少妇bbw张开| 国产亚洲va综合人人澡精品| 日本美女xxx| 亚洲欧洲日韩av| 国产在线拍揄自揄拍| 欧美日韩在线一区| 亚洲天堂男人网| 日韩色视频在线观看| 天天射,天天干| 亚洲午夜未删减在线观看 | 亚洲天堂国产精品| 日韩一区二区三区免费观看| 五月婷婷六月色| 亚洲最新在线视频| 亚洲电影视频在线| 日本高清+成人网在线观看| 六九午夜精品视频| 国产精品乱码视频| 色999国产精品| 欧美成人精品免费| 蜜臀av性久久久久蜜臀aⅴ四虎| ass极品水嫩小美女ass| 久久香蕉国产线看观看99| 国产一区在线观看免费| 亚洲网友自拍偷拍| 中国老头性行为xxxx| 欧美大肚乱孕交hd孕妇| 免费a级毛片在线观看| 欧美精品手机在线| 在线国产成人影院| 国产福利久久精品| 波多野结衣在线观看一区二区三区| 最新视频 - x88av| 久久久夜夜夜| 无码av免费精品一区二区三区| 国产欧美综合在线| 亚洲精品77777| 日韩一区二区三区视频| h视频在线免费| 午夜精品在线观看| 日本精品国产| 亚洲乱码一区二区三区 | 亚洲欧美色一区| 潘金莲一级淫片aaaaaa播放| 日韩欧美自拍偷拍| 日本在线免费网| 国产v综合ⅴ日韩v欧美大片| 北条麻妃一区二区三区在线观看 | 久久精品官网| av在线播放网址| 一区二区三区四区激情 | 激情综合五月天| 黄色片网站免费| 欧美性猛交xxxx| 欧美自拍偷拍一区二区| 欧美成人精品xxx| 日韩成人综合网| 亚洲不卡1区| 亚洲激情午夜| 亚洲精品久久一区二区三区777| 中文字幕一区二区在线观看| 亚洲免费视频二区| 亚洲欧美精品中文字幕在线| 高清电影在线免费观看| 亚洲自拍偷拍色片视频| 亚洲成人日韩| 国产在线观看中文字幕| 中文字幕制服丝袜成人av| 中文字幕人妻精品一区| 中文字幕在线看视频国产欧美在线看完整 | 欧美日韩黄色网| 欧美伊人久久久久久久久影院 | 久久国产精品视频| 欧美韩国日本| 波多野结衣三级在线| 激情综合网av| 精品国产视频在线观看| 日韩一区二区免费在线电影| 影音先锋在线视频| 91免费看网站| 激情一区二区| 99久久国产精| 日本精品一级二级| jizz视频在线观看| 91精品视频在线| 欧美一区二区三区久久精品| 在线观看欧美一区二区| 亚洲成人自拍偷拍| 凸凹人妻人人澡人人添| 欧美在线xxx| 成人在线免费观看视频| 亚洲高清在线不卡| 亚洲一区二区三区不卡国产欧美| 少妇荡乳情欲办公室456视频| 欧洲日本亚洲国产区| 日本久久黄色| 日本高清免费观看| 亚洲大片在线观看| 欧美白人做受xxxx视频| 国产精品一区二区久久国产| 国产精品麻豆久久| 午夜福利三级理论电影| 欧美午夜性色大片在线观看| av天在线观看| av在线亚洲男人的天堂| 亚洲在线视频| 99热这里只有精品4| 精品国产乱码91久久久久久网站| 乡村艳史在线观看| 宅男一区二区三区| 91亚洲资源网| 亚洲一区二区视频在线播放| 色中色综合影院手机版在线观看| 加勒比色综合久久久久久久久 | 国产69精品久久久久按摩| 一本大道东京热无码aⅴ| 91碰在线视频| 国产乱码精品一区二区| 97成人精品区在线播放| 欧美岛国激情| 800av在线播放| 欧美猛男gaygay网站| 极品在线视频| 中文字幕制服丝袜在线| 97成人超碰视| 国产精品无码在线播放 | 国内少妇毛片视频| 日本一区二区三区高清不卡| 六月婷婷综合网| 91精品久久久久久久久久入口|