• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    面向OLAP數(shù)據(jù)庫(kù)查詢處理功能的模糊測(cè)試工具

    2021-03-14 19:07:53項(xiàng)兆坤陳婷蘇仟張蓉

    項(xiàng)兆坤 陳婷 蘇仟 張蓉

    摘要:查詢處理是現(xiàn)代關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中最重要的功能之一,主要包括查詢優(yōu)化和查詢 執(zhí)行.然而查詢處理的復(fù)雜性導(dǎo)致了測(cè)試的高成本,阻礙了開發(fā)過(guò)程中的快速迭代,并可能在生產(chǎn)環(huán)境中 導(dǎo)致嚴(yán)重錯(cuò)誤.為了更好地服務(wù)于DBMS查詢處理功能的評(píng)測(cè),采用模糊測(cè)試的方法生成基于主鍵約束的 隨機(jī)數(shù)據(jù)和完全有效的復(fù)雜分析型查詢;構(gòu)建約束優(yōu)化,對(duì)查詢中算子的精確基數(shù)進(jìn)行高效計(jì)算,從而獲 得查詢的正確結(jié)果;最后實(shí)現(xiàn)了完整的工具.通過(guò)對(duì)TiDB的不同版本進(jìn)行了小規(guī)模的測(cè)試,結(jié)果表明可 以有效地檢測(cè)出TiDB不同版本的一些Bug.

    關(guān)鍵詞:分析型數(shù)據(jù)庫(kù);查詢處理;查詢執(zhí)行;查詢優(yōu)化器;模糊測(cè)試

    中圖分類號(hào):TP392?????? 文獻(xiàn)標(biāo)志碼:A?????? DOI: 10.3969/j.issn.1000-5641.2021.05.007

    A fuzzer for query processing functionality of OLAP databases

    XIANG Zhaokun1, CHEN Ting1, SU Qian2, ZHANG Rong1

    (1. School of Data Science and Engineering, East China Normal University, Shanghai 200062, China;

    2. China Industrial Control Systems Cyber Emergency Response Team, Beijmg 100040, China)

    Abstract: Query processing, including optimization and execution, is one of the most critical functionalities of modern relational database management systems (DBMS). The complexity of query processing functionalities, however, leads to high testing costs. It hinders rapid iterations during the development process and can lead to severe errors when deployed in production environments. In this paper, we propose a tool to better serve the testing and evaluation of DBMS query processing functionalities; the tool uses a fuzzing approach to generate random data that is highly associated with primary keys and generates valid complex analytical queries. The tool constructs constrained optimization problems to efficiently compute the exact cardinalities of operators in queries and furnish the results. We launched small-scale testing of our method on different versions of TiDB and demonstrated that the tool can effectively detect bugs in different versions of TiDB.

    Keywords: OLAP database; query processing; query execution; exact cardinality; fuzzing

    0引 言

    分析型數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System, DBMS)主要用于處理復(fù)雜的查詢,艮口 OLAP負(fù)載,被廣泛應(yīng)用于金融科技、商業(yè)智能等領(lǐng)域,查詢處理[1]是分析型數(shù)據(jù)庫(kù)中最重要的功能

    收稿日期:2021-08-04

    基金項(xiàng)目:國(guó)家自然科學(xué)基金(62072179); 2020年關(guān)鍵軟件適配驗(yàn)證中心項(xiàng)目

    通信作者:張蓉,女,教授,博士生導(dǎo)師,研究方向?yàn)榉植际綌?shù)據(jù)管理.E-mail: rzhang@dase.ecnu.edu.cn

    之一.這些分析型SQL語(yǔ)句大多包含多表連接、聚集運(yùn)算等操作,幫助分析師完成復(fù)雜的分析處理任務(wù).

    對(duì)于分析型數(shù)據(jù)庫(kù)來(lái)說(shuō),一個(gè)復(fù)雜的SQL語(yǔ)句查詢要經(jīng)歷查詢解析(Parser)、查詢優(yōu)化(Query Optimization)和查詢執(zhí)行(Query Execution).在查詢解析階段,解析器會(huì)對(duì)SQL語(yǔ)句進(jìn)行語(yǔ)法檢查 (Syntactic Check)和語(yǔ)義檢查(Semantic Check),如果SQL語(yǔ)句有語(yǔ)法或者語(yǔ)義錯(cuò)誤,DBMS會(huì)直接 返回錯(cuò)誤信息,不會(huì)進(jìn)入查詢優(yōu)化和執(zhí)行階段.通過(guò)查詢解析階段,SQL語(yǔ)句會(huì)被轉(zhuǎn)換為初始的邏輯 查詢計(jì)劃,接著會(huì)經(jīng)過(guò)查詢優(yōu)化將初始的邏輯查詢計(jì)劃優(yōu)化為代價(jià)較低的等價(jià)查詢執(zhí)行計(jì)劃.然后將 該執(zhí)行計(jì)劃交給查詢執(zhí)行器去執(zhí)行,最終得到SQL的執(zhí)行結(jié)果.

    查詢優(yōu)化問(wèn)題已經(jīng)被研究了 40余年,是計(jì)算機(jī)領(lǐng)域的NP難問(wèn)題之一[2].查詢優(yōu)化器目的是選出 一個(gè)比較好的查詢執(zhí)行計(jì)劃交給執(zhí)行器去執(zhí)行,幾乎所有的現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)使用的都是基于成本的 優(yōu)化器(Cost-Based Optimizer),使用枚舉算法(Enumeration Algorithm)在計(jì)劃搜索空間中搜索執(zhí)行 計(jì)劃,同時(shí)使用代價(jià)模型(Cost Model)預(yù)估執(zhí)行計(jì)劃的代價(jià),最終選擇代價(jià)最低的執(zhí)行計(jì)劃[3].在代價(jià) 模型中最重要的因素是查詢中算子的中間結(jié)果集大小,簡(jiǎn)稱基數(shù)(Cardinality),基數(shù)預(yù)估的誤差是造 成優(yōu)化器無(wú)法選出合適的執(zhí)行計(jì)劃的因素之一[4],所以使用某種方法快速獲得精確的基數(shù)能使查詢優(yōu) 化器的效果獲得很大的提升.

    模糊測(cè)試(Fuzzing)是一種軟件測(cè)試技術(shù),被廣泛運(yùn)用于檢查軟件系統(tǒng)的漏洞模糊器(Fuzzer) 是指實(shí)施模糊測(cè)試的工具.模糊測(cè)試分為基于突變的模糊測(cè)試和基于生成的模糊測(cè)試.基于突變的模 糊測(cè)試依賴于對(duì)測(cè)試輸入的變異來(lái)構(gòu)造新的測(cè)試輸入,基于生成的模糊測(cè)試依賴于一個(gè)給定的輸入 模型來(lái)生成測(cè)試輸入[6].

    數(shù)據(jù)庫(kù)系統(tǒng)在快速迭代開發(fā)階段進(jìn)行充分的測(cè)試是很有必要的,能夠提前發(fā)現(xiàn)問(wèn)題,避免上線后 產(chǎn)生錯(cuò)誤.針對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的模糊測(cè)試工具不同于通用的模糊測(cè)試工具,由于數(shù)據(jù)庫(kù)系統(tǒng)的輸入為高 度結(jié)構(gòu)化的SQL語(yǔ)句,有著嚴(yán)格的語(yǔ)法格式和語(yǔ)義格式,不同的SQL關(guān)鍵字的組合可以抵達(dá)不同的 代碼邏輯,所以需要設(shè)計(jì)特別的測(cè)試工具.服務(wù)于DBMS的基于生成的模糊器根據(jù)預(yù)先設(shè)計(jì)的 SQL生成模型生成SQL,而服務(wù)于DBMS的基于突變的模糊器主要對(duì)SQL語(yǔ)句進(jìn)行突變來(lái)產(chǎn)生新 的SQL.目前已經(jīng)有很多針對(duì)數(shù)據(jù)庫(kù)功能的模糊測(cè)試工具[7-12]和數(shù)據(jù)庫(kù)性能回歸診斷的模糊測(cè)試 工具[13]. —些傳統(tǒng)的模糊器[14-15]以及負(fù)載生成工具[16]也可以生成復(fù)雜度高的SQL語(yǔ)句,它們有的生成 的SQL語(yǔ)句不能保證語(yǔ)法正確性,有的雖然保證了語(yǔ)法正確性,但是無(wú)法保證語(yǔ)義正確性,這些 SQL語(yǔ)句無(wú)法通過(guò)數(shù)據(jù)庫(kù)查詢處理的解析器,不能抵達(dá)更深的代碼邏輯.RAGS[7]保證了語(yǔ)義的正確 性但是有50%左右的SQL執(zhí)行為NULL,這些SQL也不能很好地對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行測(cè)試.總體來(lái)說(shuō), 現(xiàn)有的一些模糊測(cè)試工具要么無(wú)法保證負(fù)載語(yǔ)法正確性和語(yǔ)義正確性[14-15,17-18],要么大量的負(fù)載執(zhí)行 結(jié)果為NULL[7],而且一些工具[8,11]需要去使用權(quán)威數(shù)據(jù)庫(kù)作為結(jié)果參照.另外,當(dāng)前的一些針對(duì)查詢 優(yōu)化器的測(cè)試工具[19-20]都無(wú)法保證測(cè)試方法能觸及優(yōu)化器的核心——基數(shù),已有的一些精確基數(shù)獲取 的工作[21-23]都是通過(guò)使用數(shù)據(jù)庫(kù)執(zhí)行額外的負(fù)載獲取查詢中所有算子的精確基數(shù),會(huì)造成很大的開銷.

    針對(duì)DBMS查詢處理功能的模糊測(cè)試工具應(yīng)該提供測(cè)試數(shù)據(jù)生成器、測(cè)試負(fù)載生成器以及結(jié)果 驗(yàn)證器.那么,如何更好地生成測(cè)試所需要數(shù)據(jù),如何生成更有效的負(fù)載以檢測(cè)數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)核代碼 邏輯,以及如何高效地進(jìn)行結(jié)果驗(yàn)證,是開發(fā)面向數(shù)據(jù)庫(kù)系統(tǒng)的模糊測(cè)試工具所要著重考慮的難點(diǎn)問(wèn) 題.本文提出一款面向OLAP數(shù)據(jù)庫(kù)查詢處理功能的模糊測(cè)試工具,采用基于主鍵的關(guān)聯(lián)數(shù)據(jù)生成、 避免NULL值的負(fù)載生成、構(gòu)建約束優(yōu)化問(wèn)題進(jìn)行算子基數(shù)及查詢結(jié)果計(jì)算,實(shí)現(xiàn)更加有效的分析型 數(shù)據(jù)庫(kù)查詢處理功能的正確性測(cè)試,可服務(wù)于面向金融應(yīng)用的數(shù)據(jù)庫(kù)系統(tǒng)的評(píng)測(cè).

    1相關(guān)工作

    模糊測(cè)試是生成輸入到軟件系統(tǒng)以發(fā)現(xiàn)漏洞,是一種傳統(tǒng)的漏洞發(fā)現(xiàn)方法.在數(shù)據(jù)庫(kù)系統(tǒng)的評(píng)測(cè)中,生成數(shù)據(jù)、生成負(fù)載都是服務(wù)于DBMS的模糊測(cè)試工具要考慮的重要環(huán)節(jié).

    在傳統(tǒng)的負(fù)載生成工具中,微軟開發(fā)的RAGS[7]是比較有代表性的工作.它根據(jù)已有的數(shù)據(jù)庫(kù) Schema信息,參照標(biāo)準(zhǔn)的SQL語(yǔ)法隨機(jī)生成大量語(yǔ)法正確的SQL語(yǔ)句,將這些SQL在不同的數(shù)據(jù) 庫(kù)上執(zhí)行并利用對(duì)比庫(kù)進(jìn)行結(jié)果驗(yàn)證,即使用差異測(cè)試的方法來(lái)測(cè)試SQL Server版本迭代中出現(xiàn)的 Bug.但是RGAS生成的負(fù)載大約有50%的查詢的執(zhí)行結(jié)果為空,造成了測(cè)試資源很大的浪費(fèi).同時(shí) RGAS使用的差異測(cè)試方法需要數(shù)據(jù)和負(fù)載在不同的數(shù)據(jù)庫(kù)上去執(zhí)行,不同數(shù)據(jù)庫(kù)的語(yǔ)法可能還不 兼容,是一種耗時(shí)耗力的方法.

    文獻(xiàn)[16]中介紹了微軟提出的一個(gè)基于突變的負(fù)載生成工具,主要通過(guò)增減關(guān)鍵字來(lái)對(duì)已有的 SQL語(yǔ)句進(jìn)行突變,能保證語(yǔ)法的正確性,但是無(wú)法保證語(yǔ)義的正確性.

    目前,有一些通用模糊測(cè)試工具支持生成結(jié)構(gòu)化的SQL.但文獻(xiàn)[14]提出的工具生成的SQL 大多數(shù)語(yǔ)法不正確,AFL(American Fuzzy Lop)|15]生成的SQL語(yǔ)句中只有30%語(yǔ)法正確,其中語(yǔ)義正 確的SQL比例不到5%.這些通用型模糊測(cè)試工具無(wú)法很好地對(duì)數(shù)據(jù)庫(kù)進(jìn)行測(cè)試.故后續(xù)出現(xiàn)了專門 針對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的模糊測(cè)試工具,比如SQLSmith、SQLFuzz、SQLancer、SQUIRREL、SparkFuzz、 MutaSQL 等.

    SQLSmith[8]是基于生成的模糊測(cè)試工具,基于給定的數(shù)據(jù)庫(kù)模式(Schema)隨機(jī)生成大量語(yǔ)法正 確的SQL,用于發(fā)現(xiàn)DBMS的系統(tǒng)崩潰問(wèn)題(Crash),但是它無(wú)法保證生成SQL的語(yǔ)義正確,同時(shí)也 不包含查詢結(jié)果的正確性驗(yàn)證模塊.SQLFuzz[13]是數(shù)據(jù)庫(kù)系統(tǒng)性能回歸測(cè)試工具APOLLO中的一部 分,通過(guò)隨機(jī)生成SQL在數(shù)據(jù)庫(kù)的不同版本上執(zhí)行以檢測(cè)數(shù)據(jù)庫(kù)系統(tǒng)的性能回退.SQLancer[9]是主要 用于檢測(cè)數(shù)據(jù)庫(kù)系統(tǒng)邏輯Bug的模糊測(cè)試工具,其中的PQS(Pivoted Query Synthesis)測(cè)試方法通過(guò) 選擇表中的一行作為Pivot Row,然后去構(gòu)造一定可以包含該行的查詢,如果數(shù)據(jù)庫(kù)執(zhí)行該查詢后結(jié) 果中沒(méi)有出現(xiàn)預(yù)設(shè)的Pivot Row,則表明數(shù)據(jù)庫(kù)實(shí)現(xiàn)有Bug.但是,PQS在測(cè)試Left Join、Group By等關(guān)鍵字時(shí)存在缺陷,同時(shí)無(wú)法驗(yàn)證查詢中間結(jié)果集大小,不支持測(cè)試聚集運(yùn)算.8卩。1只只瓦^(guò)12]通 過(guò)保留語(yǔ)法的突變來(lái)提高生成SQL的語(yǔ)法正確性,使用語(yǔ)義指導(dǎo)的查詢參數(shù)實(shí)例化算法來(lái)提高生成 SQL的語(yǔ)義正確性,發(fā)現(xiàn)了許多數(shù)據(jù)庫(kù)中內(nèi)存相關(guān)的Bug. SparkFuzz[11]通過(guò)隨機(jī)生成數(shù)據(jù)和負(fù)載,以 測(cè)試SparkSQL的查詢執(zhí)行引擎Bug,但是它分別在PostgreSQL和SparkSQL上執(zhí)行生成的負(fù)載,耗 時(shí)耗力.MutaSQL[10]使用基于突變的方法將SQL改寫成結(jié)果等價(jià)但形式不同的其他SQL,如果兩個(gè) SQL執(zhí)行結(jié)果不同,表明數(shù)據(jù)庫(kù)存在Bug.但是MutaSQL的缺點(diǎn)是需要將SQL在數(shù)據(jù)庫(kù)上執(zhí)行才能 知道結(jié)果.

    綜上所述,由于SQL的高度結(jié)構(gòu)化,需要保證語(yǔ)法語(yǔ)義的嚴(yán)格正確性才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行測(cè)試,通 用的模糊測(cè)試工具[14—15,17—181無(wú)法對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行很好的測(cè)試;一部分負(fù)載生成工具[7,16]生成的負(fù)載質(zhì) 量需要提升;針對(duì)數(shù)據(jù)庫(kù)的模糊測(cè)試工具[8,,10-11]需要在真實(shí)數(shù)據(jù)庫(kù)上執(zhí)行生成的SQL才能獲得查詢的 基準(zhǔn)結(jié)果,測(cè)試代價(jià)太高.

    2系統(tǒng)整體架構(gòu)

    系統(tǒng)的整體架構(gòu)如圖1所示.用戶首先在配置文件中定義本次測(cè)試所需要生成數(shù)據(jù)庫(kù)模式中表的 數(shù)目、每張表的屬性列數(shù)目分布、屬性列數(shù)據(jù)分布、每張表的大小、生成查詢中連接算子的數(shù)目等關(guān) 鍵信息;Schema生成器會(huì)讀取配置文件,根據(jù)要生成的屬性列的數(shù)據(jù)類型及分布情況進(jìn)行屬性生成 函數(shù)生成,同時(shí)根據(jù)每張表的外鍵數(shù)量進(jìn)行表的參照關(guān)系生成;接著進(jìn)入數(shù)據(jù)生成器進(jìn)行大規(guī)模數(shù)據(jù) 生成,其中屬性生成函數(shù)是數(shù)據(jù)生成機(jī)制的核心,所有的非主鍵屬性是基于主鍵通過(guò)屬性生成函數(shù)確 定性計(jì)算得出.

    負(fù)載生成器也會(huì)用到Schema生成器的結(jié)果,在負(fù)載生成器中,首先會(huì)根據(jù)定義的連接算子的數(shù)目進(jìn)行復(fù)雜負(fù)載模板的生成,負(fù)載生成器所生成的負(fù)載模板保證語(yǔ)法和語(yǔ)義正確.為了進(jìn)一步提升生 成負(fù)載的質(zhì)量,使用參數(shù)實(shí)例化器進(jìn)行合理的查詢參數(shù)填充.

    生成完數(shù)據(jù)和負(fù)載后,將這些數(shù)據(jù)和負(fù)載導(dǎo)入數(shù)據(jù)庫(kù)中執(zhí)行,獲得數(shù)據(jù)庫(kù)執(zhí)行結(jié)果,同時(shí)將負(fù)載 輸入算子基數(shù)計(jì)算器進(jìn)行算子中間結(jié)果的計(jì)算,可與數(shù)據(jù)庫(kù)查詢優(yōu)化器基數(shù)預(yù)估的結(jié)果進(jìn)行對(duì)比;最 后再到查詢結(jié)果計(jì)算器中進(jìn)行最終查詢結(jié)果的計(jì)算,與數(shù)據(jù)庫(kù)執(zhí)行的結(jié)果進(jìn)行對(duì)比.如果兩者不一樣, 則表明數(shù)據(jù)庫(kù)有Bug,工具會(huì)把生成的數(shù)據(jù)以及該條SQL保存下來(lái)以便對(duì)Bug進(jìn)行復(fù)現(xiàn).

    2.1基于主鍵的數(shù)據(jù)生成

    在數(shù)據(jù)生成模塊中使用了關(guān)聯(lián)主鍵的確定性的數(shù)據(jù)生成機(jī)制,為后續(xù)在算子基數(shù)計(jì)算器和查 詢結(jié)果計(jì)算器中構(gòu)建約束優(yōu)化問(wèn)題奠定基礎(chǔ).確定性數(shù)據(jù)生成機(jī)制具有關(guān)聯(lián)主鍵的性質(zhì),即所有非主 鍵屬性以主鍵為自變量使用生成函數(shù)確定性計(jì)算,其中主鍵值是采用自增形式產(chǎn)生,即被設(shè)置為 AUTO_INCREMENT.

    數(shù)據(jù)生成器首先根據(jù)擬生成的屬性列的數(shù)據(jù)分布情況進(jìn)行屬性生成函數(shù)的生成,從而使得生成 的數(shù)據(jù)滿足一定的數(shù)據(jù)分布,比如高斯分布、ZipFian分布,具體做法是生成隨機(jī)的分段函數(shù).如果生 成的數(shù)據(jù)不需要滿足任何分布,則默認(rèn)為隨機(jī)分布.具體做法是先確定要生成的屬性列的數(shù)據(jù)類型, 如INT類型的范圍是-2 147483648?2147483647,再確定生成函數(shù),確保主鍵經(jīng)過(guò)生成的函數(shù)映射 后的值不能超過(guò)預(yù)定數(shù)據(jù)類型的范圍.

    假如要生成10000個(gè)值域?yàn)??100并滿足高斯分布的數(shù),首先將10000個(gè)數(shù)按照高斯分布序列 分塊,將這些塊隨機(jī)裝到100個(gè)桶中,這100桶即代表值域?yàn)??100.按照上述方法生成的分段函數(shù) 如圖2所示,1?10000的主鍵值通過(guò)該分段函數(shù)生成的10000個(gè)數(shù)即為值域?yàn)??100、滿足高斯分 布的數(shù).

    函數(shù)生成完成后,主鍵就可以通過(guò)已經(jīng)生成的函數(shù)進(jìn)行確定性數(shù)據(jù)生成.具體過(guò)程如圖3所示. 首先,數(shù)據(jù)生成器根據(jù)配置文件的要求生成滿足特定分布的數(shù)據(jù):如果某一列需要滿足分布,則根據(jù) 分布的參數(shù)A盧等隨機(jī)生成分段函數(shù),否則根據(jù)列的屬性(如值域Domain)隨機(jī)生成普通函數(shù).接著 生成數(shù)據(jù),最后再進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換.

    2.2表間依賴關(guān)系生成

    在Schema生成器中,重點(diǎn)關(guān)注表間參照依賴關(guān)系生成.Schema生成器會(huì)根據(jù)配置文件生成每張 表,基于依賴的拓?fù)浒葱蛏擅繌埍淼乃型怄I以及這些外鍵的參照關(guān)系.一張表中可能有很多外鍵, Schema生成器確保單個(gè)表中的每個(gè)外鍵參照的表都不同,以此構(gòu)建表的參照依賴關(guān)系圖,如圖4所示.

    2.3有效負(fù)載生成

    負(fù)載生成器會(huì)參考Schema生成器的結(jié)果,同時(shí)組合不同種類的關(guān)鍵字生成語(yǔ)法和語(yǔ)義正確的負(fù)載模板,并使用查詢參數(shù)實(shí)例化算法填充模板,最終生成有效負(fù)載.

    2.3.1負(fù)載模板生成

    負(fù)載模板生成器使用SQL生成模型,根據(jù)配置選擇SQL關(guān)鍵字來(lái)生成語(yǔ)法語(yǔ)義正確的負(fù)載模板. 如圖5所示,首先SQL生成模型會(huì)根據(jù)Schema定義獲得表間參照依賴關(guān)系,然后選擇有依賴關(guān)系的 表來(lái)生成多表連接;接著從這些表中預(yù)先生成一個(gè)謂詞生成順序,按照該順序進(jìn)行謂詞語(yǔ)句的生成以 及查詢參數(shù)實(shí)例化,接著再生成Group By和Order By關(guān)鍵字;最后生成Select關(guān)鍵字以及5種聚集 運(yùn)算表達(dá)式.

    2.3.2查詢參數(shù)實(shí)例化

    負(fù)載模板生成器生成的是參數(shù)化的查詢模板.如圖6所示,該查詢模板以A、B、C、D四表連接為 例,查詢參數(shù)實(shí)例化器將按照的謂詞順序進(jìn)行相關(guān)參數(shù)(K)的實(shí)例化.進(jìn)行查詢參數(shù)實(shí) 例化后負(fù)載才能被DBMS正常執(zhí)行.查詢參數(shù)實(shí)例化十分重要,因?yàn)樗梢钥刂撇樵冎兴阕拥闹虚g結(jié) 果集大小,從而使得查詢優(yōu)化器選擇代價(jià)不同的查詢執(zhí)行計(jì)劃,直接影響查詢的執(zhí)行時(shí)間.

    負(fù)載生成器使用查詢參數(shù)實(shí)例化器進(jìn)行有效查詢參數(shù)實(shí)例化,按照查詢模板中的預(yù)定的連接順 序?qū)λ械闹^詞進(jìn)行查詢參數(shù)實(shí)例化.

    基于關(guān)聯(lián)主鍵的確定性數(shù)據(jù)生成機(jī)制,預(yù)生成的謂詞參數(shù)的取值范圍可以由已經(jīng)實(shí)例化完成的 算子的連接結(jié)果確定性得到.查詢參數(shù)實(shí)例化器會(huì)根據(jù)這個(gè)取值范圍選擇合理的參數(shù)對(duì)查詢模板進(jìn) 行填充.這種感知數(shù)據(jù)的查詢參數(shù)實(shí)例化算法可以確保每個(gè)過(guò)濾謂詞(Filter)算子以及每個(gè)連接 (Join)算子的有效性,故查詢的最終結(jié)果不會(huì)為NULL,從而提高了生成負(fù)載的測(cè)試效果.

    2.4算子基數(shù)的高效計(jì)算

    查詢優(yōu)化器依賴代價(jià)模型為搜索空間中的每個(gè)執(zhí)行計(jì)劃進(jìn)行代價(jià)預(yù)估.代價(jià)模型中的一個(gè)關(guān)鍵 參數(shù)就是算子的基數(shù),現(xiàn)代查詢優(yōu)化器使用基數(shù)預(yù)估技術(shù)來(lái)獲取算子的基數(shù)大小,但是會(huì)有很大的誤 差,而且誤差會(huì)隨著連接算子數(shù)量的增多而越來(lái)越嚴(yán)重,最終導(dǎo)致優(yōu)化器選擇不到良好的執(zhí)行計(jì)劃. 如果能夠提供算子的精確基數(shù),消除基數(shù)預(yù)估帶來(lái)的影響,可以對(duì)查詢優(yōu)化器進(jìn)行很好的評(píng)測(cè).

    例 1 select * from a join b on a.fkx = b.primaryKey where a.colx < 1 993 and b.col2 > 2 000 算子基數(shù)計(jì)算器參照確定性的數(shù)據(jù)生成機(jī)制為每個(gè)算子構(gòu)造約束優(yōu)化問(wèn)題來(lái)表示其結(jié)果.以例 1為例,單表、Filter算子、Join算子的約束優(yōu)化表達(dá)式如圖7所示.在本例中,表a和表b的主鍵的取 值范圍分別是[0, 23444]和[0, 32345],所以表a未加過(guò)濾謂詞(Filter)的約束為[Ka, [0, 23444]].表 a存在一個(gè)過(guò)濾謂詞為a.col1 < 1993,屬性a.col1是主鍵Ka使用生成函數(shù)F1(Ka)生成,所以 Filter的約束表示為[F1(Ka) < 1993, [0, 23444]].對(duì)于連接(Join)算子,涉及約束的轉(zhuǎn)移,由于連接 條件是a.fki = b.primaryKey, &.&1屬性同時(shí)又是表a的主鍵Ka使用f(Ka)函數(shù)生成的,所以可推導(dǎo) 出表b的主鍵Kb = f(Ka),將表b上的過(guò)濾謂詞約束F2(Kb) > 2000加入Filter的約束中,連接(Join) 算子的約束表達(dá)式即為[FjKa) < 1993, F2(f(Ka)) > 2000,[0, 23444]].

    對(duì)于每個(gè)算子的約束表達(dá)式,使用Mathematical進(jìn)行約束求解.查詢中所有算子的精確基數(shù)被 基數(shù)計(jì)算器計(jì)算出后,查詢結(jié)果計(jì)算器會(huì)以主鍵對(duì)的形式表示每個(gè)算子的具體結(jié)果,接著參照查詢中 Select關(guān)鍵字后面的復(fù)雜表達(dá)式的情況再計(jì)算查詢的最終結(jié)果.基數(shù)計(jì)算器和查詢結(jié)果計(jì)算器為生成 的復(fù)雜分析型負(fù)載提供了基準(zhǔn)結(jié)果高效自計(jì)算、不用去執(zhí)行額外負(fù)載即可獲得算子的精確基數(shù),可服 務(wù)于查詢優(yōu)化器的評(píng)估,同時(shí)查詢的精準(zhǔn)結(jié)果可用于發(fā)現(xiàn)數(shù)據(jù)庫(kù)執(zhí)行引擎的執(zhí)行問(wèn)題.

    3實(shí)驗(yàn)分析

    本章首先展示了工具的生成效率;然后,在開源的分布式數(shù)據(jù)庫(kù)TiDB的不同版本上來(lái)驗(yàn)證本文 提出的模糊測(cè)試工具的有效性.

    3.1實(shí)驗(yàn)環(huán)境

    TiDB部署在UCloud集群中的5臺(tái)機(jī)器上.本工具使用Java語(yǔ)言開發(fā),運(yùn)行環(huán)境為OpenJDK 14, 約束求解工具使用的是Mathematica12[24]. TiDB集群中有1臺(tái)主TiDB節(jié)點(diǎn)用于處理客戶端連接, 3臺(tái)TiKV節(jié)點(diǎn)用于存儲(chǔ)數(shù)據(jù),1臺(tái)PD節(jié)點(diǎn)用于調(diào)度以及1臺(tái)Monitor節(jié)點(diǎn)用于監(jiān)控整個(gè)TiDB集群 的情況.部署TiDB模塊和TiKV模塊的機(jī)器的主要配置是16核心CPU、16GB內(nèi)存,部署PD模塊 的機(jī)器的主要配置是2核心CPU、2GB內(nèi)存,部署Monitor監(jiān)控節(jié)點(diǎn)的機(jī)器的主要配置是8核心 CPU、8GB 內(nèi)存.

    3.2負(fù)載生成效率

    本節(jié)展示工具的負(fù)載生成效率,設(shè)置生成1000個(gè)Query,在每個(gè)Query中分別設(shè)置生成0 ~ 8個(gè) 連接算子,查看Query中連接算子的個(gè)數(shù)對(duì)Query平均生成時(shí)間的影響,實(shí)驗(yàn)結(jié)果如圖8所示.由于 負(fù)載生成過(guò)程中需要根據(jù)預(yù)定的連接順序進(jìn)行每個(gè)過(guò)濾謂詞的參數(shù)范圍計(jì)算,所以Query中連接算 子的個(gè)數(shù)會(huì)影響單條Query的生成效率.

    3.3測(cè)試有效性展示

    本節(jié)展示了利用該工具測(cè)試TiDB的不同版本,發(fā)現(xiàn)的一些查詢處理功能的缺陷或者Bug.

    3.3.1Decimal 類型轉(zhuǎn)換 Bug

    本例展示了 TiDB Master:1cebae2b版本的一個(gè)已經(jīng)確認(rèn)的Bug.在表中創(chuàng)建decimal(17, (3)類型 的屬性列,并插入相應(yīng)數(shù)據(jù),但是在查詢結(jié)果時(shí)使用cast as decimal關(guān)鍵字轉(zhuǎn)換的時(shí)候出現(xiàn)結(jié)果錯(cuò)誤. decimal默認(rèn)長(zhǎng)度為10,但是返回的結(jié)果長(zhǎng)度為11.本工具通過(guò)生成如下的數(shù)據(jù)和查詢發(fā)現(xiàn)了該問(wèn)題: ---創(chuàng)建表

    create table table_0_0 (primaryKey bigint,col_0 int,col_1 double,col_2 int,col_3 int,col_4 int,col_5 int,col_6 double,col_7 decimal(17,(3),primary key (primaryKey));

    ---插入工具生成的數(shù)據(jù)

    insert into table_0_0 values (1,1,544.67,65,766,5 544,65 554, 44 336.7,93 994 883 422 334.30(1); ---執(zhí)行工具生成的負(fù)載

    select length (cast(col_7 as decimal)) from table_0_0;

    -工具計(jì)算出的理想結(jié)果 10

    ---數(shù)據(jù)庫(kù)執(zhí)行的真實(shí)結(jié)果 11

    3.3.2TiDB Float類型不精確的問(wèn)題

    本例展示了 TiDB的表中屬性列設(shè)置float數(shù)據(jù)類型不能被精確查找出來(lái)的問(wèn)題.由于本工具中 的數(shù)據(jù)生成器采用確定性的數(shù)據(jù)生成機(jī)制,所有的數(shù)據(jù)都能被精確地生成,同時(shí)約束求解器求解過(guò)程 準(zhǔn)確,所以可以對(duì)float類型參與的計(jì)算進(jìn)行精確的表示.該問(wèn)題盡管已經(jīng)證實(shí)是TiDB的原始設(shè)計(jì)意 圖,但是這也證明了本工具的計(jì)算結(jié)果是精確而有效的,不用依賴權(quán)威數(shù)據(jù)庫(kù).測(cè)試樣例如下:

    …創(chuàng)建表

    create table table_0_13 (primaryKey bigint, col_0 int, col_1 double, col_2 int, col_3 int, col_4 int, col_5 float, primary key (primaryKey));

    ---插入工具生成的數(shù)據(jù)

    insert into table_0_13 values (7, 1, 9 983.22, 62, 76, 55, -8 888.9(5);

    ---執(zhí)行工具生成的負(fù)載

    select col_5 from table_0_13 where table_0_13.col_5 = 8 888.95;

    一工具計(jì)算出的理想結(jié)果 -8 888.95

    ---數(shù)據(jù)庫(kù)執(zhí)行的真實(shí)結(jié)果 Empty set

    3.3.3TiDB主鍵自增Bug

    本例展示了在TiDB5.0版本表中設(shè)置float或double類型的主鍵同時(shí)設(shè)置auto_increment,使用 insert into或者replace into插入數(shù)據(jù),每次插入會(huì)出現(xiàn)增量步長(zhǎng)不是1的問(wèn)題.本文提出的模糊測(cè)試 工具生成的如下負(fù)載發(fā)現(xiàn)了這個(gè)Bug,因?yàn)?個(gè)值之間的增量變成了 2,所以求和為錯(cuò)誤的結(jié)果49而 不是理想的結(jié)果28.測(cè)試樣例如下:

    ---創(chuàng)建表

    create table table_0_2 (id double primary key AUTO_INCREMENT, col1 int);

    ---插入工具生成的數(shù)據(jù)

    replace into table_0_2 (col(1) values (1); insert into table_0_2 (col(1) values (1); replace into table_0_2 (col(1) values (1); insert into table_0_2 (col(1) values (1); replace into table_0_2 (col(1) values (1); insert into table_0_2 (col(1) values (1); replace into table_0_2 (col(1) values (1); ---執(zhí)行工具生成的負(fù)載

    select sum(id) from table_0_2; 一工具計(jì)算出的理想結(jié)果28

    ---數(shù)據(jù)庫(kù)執(zhí)行的真實(shí)結(jié)果 49

    4結(jié)論

    針對(duì)分析型數(shù)據(jù)庫(kù)查詢處理功能正確性的測(cè)試問(wèn)題,本文實(shí)現(xiàn)了一個(gè)模糊測(cè)試工具.使用關(guān)聯(lián)主 鍵的確定性數(shù)據(jù)生成機(jī)制生成滿足給定分布的數(shù)據(jù);使用SQL生成模型生成語(yǔ)法語(yǔ)義正確的負(fù)載模 板并使用查詢參數(shù)實(shí)例化算法使得負(fù)載有效;通過(guò)構(gòu)建約束優(yōu)化問(wèn)題高效求解算子基數(shù)及查詢結(jié)果. 經(jīng)過(guò)小規(guī)模測(cè)試,在開源的NewSQL分布式數(shù)據(jù)庫(kù)TiDB上檢測(cè)出了一些問(wèn)題,驗(yàn)證了工具的可用性.

    [參考文獻(xiàn)]

    [1]SILBERSCHATZ A, KORTH H F, SUDARSHAN S. Database Systems Concepts [M]. 5th ed. New York: McGraw-Hill Book Company, 2005.

    [2] CHAUDHURI S. An overview of query optimization in relational systems [C]//Proceedings of the Seventeenth ACM SIGACT- SIGMOD-SIGART Symposium on Principles of Database Systems - PODS '98. Seattle: ACM Press, 1998: 34-43.

    [3 ] LAN H, BAO Z, PENG Y. A survey on advancing the DBMS query optimizer: Cardinality estimation, cost model, and plan enumeration [J]. Data Science and Engineering, 2021, 6(1): 86-101.

    [4 ] LEIS V, GUBICHEV A, MIRCHEV A, et al. How good are query optimizers, really? [J]. Proceedings of the VLDB Endowment, 2015, 9(3): 204-215.

    [5 ] LI J, ZHAO B, ZHANG C. Fuzzing: A survey [J]. Cybersecurity, 2018, 1(1): 6.

    [6 ] MANES V J M, HAN H, HAN C, et al. The art, science, and engineering of fuzzing: A survey [J]. IEEE Transactions on Software Engineering, 2019. DOI: 10.1109/TSE.2019.2946563.

    [7]SLUTZ D R. Massive stochastic testing of SQL [C]//Very Large Data Base. 1998: 618-622.

    [8 ] SELTENREICH A, TANG B, MULLENDER S. SQLSmith [CP/OL]. [2021-08-01]. https://github.com/anse1/sqlsmith.

    [9]RIGGER M, SU Z. Testing database engines via pivoted query synthesis [C]//14th Symposium on Operating Systems Design and Implementation. 2020: 667-682.

    [10]CHEN X, WANG C, CHEUNG A. Testing query execution engines with mutations [C]//Proceedings of the Workshop on Testing Database Systems. Portland Oregon: ACM, 2020: 1-5.

    [11]GHIT B, POGGI N, ROSEN J, et al. SparkFuzz: Searching correctness regressions in modern query engines [C]//Proceedings of the Workshop on Testing Database Systems. Portland Oregon: ACM, 2020: 1-6.

    [12]ZHONG R, CHEN Y, HU H, et al. SQUIRREL: Testing database management systems with language validity and coverage feedback [C] //Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security. Virtual Event USA: ACM, 2020: 955-970.

    [13]JUNG J, HU H, ARULRAJ J, et al. APOLLO: Automatic detection and diagnosis of performance regressions in database systems [J]. Proceedings of the VLDB Endowment, 2019, 13(1): 57-70.

    [14]BLAZYTKO T, BISHOP M, ASCHERMANN C, et al. GRIMOIRE: Synthesizing structure while fuzzing [C]//28th Security Symposium (Security 19). 2019: 1985-2002.

    [15]ZALEWSKI M. American fuzzy lop (2.52b) [CP/OL]. [2021-08-01]. http://lcamtuf.coredump.cx/afl.

    [16]BATI H, GIAKOUMAKIS L, HERBERT S, et al. A genetic approach for random testing of database systems [C]//Proceedings of the 33rd International Conference on Very Large Data Bases. 2007: 1243-1251.

    [17]ASCHERMANN C, FRASSETTO T, HOLZ T, et al. NAUTILUS: Fishing for deep bugs with grammars [C]//NDSS. 2019.

    [18]PADHYE R, LEMIEUX C, SEN K, et al. Semantic fuzzing with zest [C] //Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis. 2019: 329-340.

    [19]STILLGER M, FREYTAG J C. Testing the quality of a query optimizer [J]. IEEE Data Engineering Bulletin, 1995, 18(3): 41-48.

    [20]GU Z, SOLIMAN M A, WAAS F M. Testing the accuracy of query optimizers [C] //Proceedings of the Fifth International Workshop on Testing Database Systems. 2012: 1-6.

    [21]CHAUDHURI S, NARASAYYA V, RAMAMURTHY R. Exact cardinality query optimization for optimizer testing [J] . Proceedings of the VLDB Endowment, 2009, 2(1): 994-1005.

    [22]TRUMMER I. Exact cardinality query optimization with bounded execution cost [C]//Proceedings of the 2019 International Conference on Management of Data. Amsterdam Netherlands: ACM, 2019: 2-17.

    [23]SHIN J H, RUSU F, SUHAN A. Exact selectivity computation for modern in-memory database query optimization [EB/OL]. (2019- 01-06)[2021-09-18]. https://arxiv.org/pdf/1901.01488.pdf.

    [24]WOLFRAM. Mathematica 12 [CP/OL]. [2021-08-01]. https://www.wolfram.com/mathematica/.

    (責(zé)任編輯:李萬(wàn)會(huì))

    aaaaa片日本免费| 日韩精品青青久久久久久| 亚洲在线观看片| av片东京热男人的天堂| 男人和女人高潮做爰伦理| 国模一区二区三区四区视频 | 不卡av一区二区三区| 欧美日韩一级在线毛片| 丁香欧美五月| 久久久久久久久中文| 日本在线视频免费播放| 狠狠狠狠99中文字幕| 免费在线观看影片大全网站| 校园春色视频在线观看| 日日干狠狠操夜夜爽| 波多野结衣高清作品| 久久亚洲精品不卡| 亚洲专区中文字幕在线| 久久久久国产精品人妻aⅴ院| 高潮久久久久久久久久久不卡| 国产亚洲欧美98| 热99re8久久精品国产| 国产精华一区二区三区| 精品久久久久久久毛片微露脸| www.999成人在线观看| 美女免费视频网站| 一级a爱片免费观看的视频| 久久欧美精品欧美久久欧美| 精品国产乱子伦一区二区三区| 国产单亲对白刺激| 女警被强在线播放| 香蕉国产在线看| 国产成人精品无人区| 国产精品精品国产色婷婷| 在线观看一区二区三区| 999久久久国产精品视频| 亚洲成人免费电影在线观看| 欧美精品啪啪一区二区三区| 无限看片的www在线观看| 美女被艹到高潮喷水动态| 欧美日本视频| www.精华液| 久久久久久久午夜电影| 91字幕亚洲| 精品一区二区三区视频在线观看免费| 少妇熟女aⅴ在线视频| 美女被艹到高潮喷水动态| 成人一区二区视频在线观看| 黄色丝袜av网址大全| 国产av一区在线观看免费| 一本精品99久久精品77| 91麻豆av在线| 精品久久蜜臀av无| 后天国语完整版免费观看| 俺也久久电影网| 最近最新免费中文字幕在线| 色播亚洲综合网| 麻豆国产av国片精品| 日韩有码中文字幕| 国产精品美女特级片免费视频播放器 | 欧美绝顶高潮抽搐喷水| 午夜精品一区二区三区免费看| 校园春色视频在线观看| 欧美极品一区二区三区四区| 成熟少妇高潮喷水视频| 国产激情久久老熟女| 亚洲国产色片| 99久久精品国产亚洲精品| aaaaa片日本免费| 亚洲av电影不卡..在线观看| 精品久久蜜臀av无| 毛片女人毛片| 亚洲色图 男人天堂 中文字幕| 丝袜人妻中文字幕| 亚洲欧美日韩卡通动漫| 熟女人妻精品中文字幕| 首页视频小说图片口味搜索| 美女高潮喷水抽搐中文字幕| 日韩成人在线观看一区二区三区| 久久久久久人人人人人| 免费无遮挡裸体视频| 国产亚洲av高清不卡| 精品国产亚洲在线| 国产亚洲精品综合一区在线观看| 一区二区三区国产精品乱码| 香蕉久久夜色| 亚洲最大成人中文| 高潮久久久久久久久久久不卡| 午夜久久久久精精品| 中文字幕久久专区| 国产精品亚洲美女久久久| 亚洲精品在线美女| 国内精品一区二区在线观看| 日韩 欧美 亚洲 中文字幕| 我要搜黄色片| 国产成人欧美在线观看| 亚洲av五月六月丁香网| 少妇人妻一区二区三区视频| 亚洲九九香蕉| 欧美极品一区二区三区四区| 老熟妇乱子伦视频在线观看| 久久久国产欧美日韩av| 亚洲 国产 在线| 亚洲精品国产精品久久久不卡| 真人一进一出gif抽搐免费| 中文字幕最新亚洲高清| 黄色 视频免费看| 草草在线视频免费看| 美女黄网站色视频| 久久久国产成人免费| 日韩大尺度精品在线看网址| 伊人久久大香线蕉亚洲五| 琪琪午夜伦伦电影理论片6080| 很黄的视频免费| 中文字幕最新亚洲高清| 国内精品美女久久久久久| 岛国视频午夜一区免费看| 桃红色精品国产亚洲av| 成人欧美大片| 国产三级在线视频| 69av精品久久久久久| 亚洲国产中文字幕在线视频| 国产精品99久久99久久久不卡| 99久久精品热视频| tocl精华| 人人妻人人看人人澡| 此物有八面人人有两片| 欧美日韩乱码在线| 日韩欧美在线二视频| 国产乱人伦免费视频| 国产高清激情床上av| 成人午夜高清在线视频| 欧美国产日韩亚洲一区| 脱女人内裤的视频| 精品人妻1区二区| 一个人免费在线观看的高清视频| 亚洲成人久久爱视频| 天堂av国产一区二区熟女人妻| 男人舔女人的私密视频| 91av网站免费观看| 法律面前人人平等表现在哪些方面| 老熟妇乱子伦视频在线观看| www.999成人在线观看| 国产欧美日韩一区二区精品| 成人永久免费在线观看视频| 国产精品久久久av美女十八| 免费看十八禁软件| 一区二区三区国产精品乱码| 在线观看一区二区三区| 好男人在线观看高清免费视频| 免费一级毛片在线播放高清视频| 少妇人妻一区二区三区视频| 黄片大片在线免费观看| 丁香六月欧美| 日本与韩国留学比较| 少妇裸体淫交视频免费看高清| www国产在线视频色| 一个人看视频在线观看www免费 | 国产精品精品国产色婷婷| 两性夫妻黄色片| 日韩欧美国产在线观看| 亚洲午夜理论影院| 欧美国产日韩亚洲一区| 成人欧美大片| 国产亚洲精品一区二区www| 一二三四在线观看免费中文在| 精品不卡国产一区二区三区| 嫩草影视91久久| 久久久成人免费电影| 久久久精品欧美日韩精品| 一本一本综合久久| 色尼玛亚洲综合影院| 国产伦在线观看视频一区| 午夜视频精品福利| 久久亚洲精品不卡| 久久中文字幕一级| 在线观看免费午夜福利视频| 亚洲第一电影网av| 欧美日韩精品网址| 日本五十路高清| 欧美黑人欧美精品刺激| 麻豆av在线久日| 欧美极品一区二区三区四区| 91在线观看av| 日本黄大片高清| 亚洲片人在线观看| 亚洲欧美日韩卡通动漫| 成熟少妇高潮喷水视频| 久久久久国产精品人妻aⅴ院| 男人舔女人的私密视频| 九九热线精品视视频播放| 久久草成人影院| 国产伦在线观看视频一区| 成人国产综合亚洲| 久久久久久国产a免费观看| 久久久国产成人精品二区| 欧美不卡视频在线免费观看| 哪里可以看免费的av片| x7x7x7水蜜桃| 国产精品1区2区在线观看.| 在线免费观看的www视频| 成人性生交大片免费视频hd| 欧美激情久久久久久爽电影| 亚洲av成人av| 老司机午夜福利在线观看视频| 国产精品一区二区三区四区免费观看 | 国产精品1区2区在线观看.| 久久久久久久久久黄片| 少妇的丰满在线观看| 黄色日韩在线| 成年女人永久免费观看视频| 日韩欧美在线二视频| 人妻夜夜爽99麻豆av| 日韩欧美免费精品| 亚洲在线自拍视频| 欧美av亚洲av综合av国产av| 欧美成狂野欧美在线观看| 一级毛片高清免费大全| 精品人妻1区二区| 国产精品久久视频播放| 国产午夜精品论理片| 国产精品久久久久久精品电影| 久久久国产成人免费| 特级一级黄色大片| 波多野结衣高清作品| 女人被狂操c到高潮| 国产精品1区2区在线观看.| 国产一区二区在线av高清观看| 成人鲁丝片一二三区免费| 亚洲人成网站在线播放欧美日韩| 亚洲性夜色夜夜综合| 国产精品久久电影中文字幕| 97碰自拍视频| 中国美女看黄片| 国产精品野战在线观看| 亚洲激情在线av| 女警被强在线播放| 日韩中文字幕欧美一区二区| 在线观看美女被高潮喷水网站 | 18禁裸乳无遮挡免费网站照片| 久久久国产成人免费| 国产亚洲精品综合一区在线观看| 88av欧美| 蜜桃久久精品国产亚洲av| 欧美日韩黄片免| 国产精品av久久久久免费| 成人18禁在线播放| 国产精品久久久久久亚洲av鲁大| 国产精华一区二区三区| 欧美不卡视频在线免费观看| 天天添夜夜摸| 精品久久久久久久久久免费视频| 美女免费视频网站| 狂野欧美白嫩少妇大欣赏| 老司机在亚洲福利影院| or卡值多少钱| 午夜精品一区二区三区免费看| 午夜福利18| 色精品久久人妻99蜜桃| 9191精品国产免费久久| 精品乱码久久久久久99久播| 老司机福利观看| 成人av一区二区三区在线看| 日韩av在线大香蕉| 观看免费一级毛片| 日本五十路高清| www.www免费av| 亚洲国产欧美网| 18禁黄网站禁片免费观看直播| 麻豆av在线久日| 色综合婷婷激情| 久久久久久九九精品二区国产| 日本免费a在线| 国产av一区在线观看免费| 久久欧美精品欧美久久欧美| 好男人在线观看高清免费视频| 欧美精品啪啪一区二区三区| 亚洲精品粉嫩美女一区| 观看免费一级毛片| 日本 av在线| 亚洲人与动物交配视频| 国产乱人伦免费视频| 综合色av麻豆| 怎么达到女性高潮| www日本黄色视频网| 好男人在线观看高清免费视频| 国内精品一区二区在线观看| 偷拍熟女少妇极品色| 欧美大码av| 国产野战对白在线观看| 成人av在线播放网站| 搡老熟女国产l中国老女人| 国产免费av片在线观看野外av| 最近在线观看免费完整版| 久久精品亚洲精品国产色婷小说| 日韩三级视频一区二区三区| 国产高清videossex| 最好的美女福利视频网| 成人av在线播放网站| 一二三四在线观看免费中文在| 最近视频中文字幕2019在线8| 蜜桃久久精品国产亚洲av| 午夜免费成人在线视频| 可以在线观看的亚洲视频| 欧美日韩综合久久久久久 | 男女那种视频在线观看| 一区福利在线观看| 欧美3d第一页| 久久久久久九九精品二区国产| 中国美女看黄片| 特级一级黄色大片| 国产私拍福利视频在线观看| 一级作爱视频免费观看| 少妇的逼水好多| 国产伦一二天堂av在线观看| 国内揄拍国产精品人妻在线| 欧美日韩亚洲国产一区二区在线观看| 少妇熟女aⅴ在线视频| 日韩成人在线观看一区二区三区| 国产精品av久久久久免费| 欧美黄色淫秽网站| 一个人看视频在线观看www免费 | 三级毛片av免费| 国产成+人综合+亚洲专区| 97人妻精品一区二区三区麻豆| 国产成人精品久久二区二区91| 国产成人一区二区三区免费视频网站| 色尼玛亚洲综合影院| 日本熟妇午夜| 日韩中文字幕欧美一区二区| 欧美日韩黄片免| 久久精品国产清高在天天线| 欧美黄色片欧美黄色片| 久久中文看片网| 一个人观看的视频www高清免费观看 | 亚洲av片天天在线观看| 悠悠久久av| 久久中文字幕一级| 国产久久久一区二区三区| 亚洲精品在线美女| 香蕉丝袜av| 99热这里只有精品一区 | 琪琪午夜伦伦电影理论片6080| 熟女少妇亚洲综合色aaa.| 三级男女做爰猛烈吃奶摸视频| 91av网一区二区| 国产精华一区二区三区| 亚洲无线观看免费| 国产精品久久久久久精品电影| 久久性视频一级片| 亚洲精品456在线播放app | 三级国产精品欧美在线观看 | 成年人黄色毛片网站| 91麻豆av在线| 曰老女人黄片| 亚洲精品色激情综合| 黄色片一级片一级黄色片| 免费在线观看视频国产中文字幕亚洲| 精华霜和精华液先用哪个| 成人无遮挡网站| 中文字幕久久专区| 午夜福利18| 高潮久久久久久久久久久不卡| 91在线观看av| ponron亚洲| 美女黄网站色视频| 三级毛片av免费| 女同久久另类99精品国产91| 听说在线观看完整版免费高清| 美女 人体艺术 gogo| 天堂影院成人在线观看| 亚洲国产精品sss在线观看| a在线观看视频网站| 欧美乱码精品一区二区三区| 少妇丰满av| 亚洲人成电影免费在线| 熟妇人妻久久中文字幕3abv| 日本精品一区二区三区蜜桃| 麻豆成人午夜福利视频| 午夜精品在线福利| 两性午夜刺激爽爽歪歪视频在线观看| 亚洲av免费在线观看| 99精品久久久久人妻精品| 可以在线观看的亚洲视频| 草草在线视频免费看| 国产精品九九99| 日本与韩国留学比较| 床上黄色一级片| 欧美丝袜亚洲另类 | 热99re8久久精品国产| 成人18禁在线播放| 欧美三级亚洲精品| 热99在线观看视频| 久久久色成人| 国产精品99久久久久久久久| 国产亚洲欧美在线一区二区| svipshipincom国产片| 国产一级毛片七仙女欲春2| 香蕉av资源在线| 香蕉国产在线看| 亚洲欧美日韩高清在线视频| 欧美+亚洲+日韩+国产| 国产精品av久久久久免费| 亚洲第一电影网av| 少妇人妻一区二区三区视频| 欧美日韩一级在线毛片| 女同久久另类99精品国产91| а√天堂www在线а√下载| 狂野欧美激情性xxxx| 搞女人的毛片| 青草久久国产| 免费观看精品视频网站| 两个人的视频大全免费| 国产野战对白在线观看| 99国产综合亚洲精品| 日本五十路高清| 久久中文看片网| 男人的好看免费观看在线视频| 日韩欧美国产在线观看| 日韩欧美 国产精品| 99国产综合亚洲精品| 人妻丰满熟妇av一区二区三区| 日韩欧美国产一区二区入口| 国产亚洲精品久久久com| 亚洲无线观看免费| 日韩 欧美 亚洲 中文字幕| 一本一本综合久久| 观看免费一级毛片| 亚洲专区中文字幕在线| 性色avwww在线观看| 女警被强在线播放| 男女下面进入的视频免费午夜| 中亚洲国语对白在线视频| 波多野结衣巨乳人妻| 国产高清激情床上av| 99久久精品国产亚洲精品| 九九在线视频观看精品| 成人特级av手机在线观看| 黄色片一级片一级黄色片| 黑人操中国人逼视频| 亚洲国产看品久久| 黄片大片在线免费观看| 一卡2卡三卡四卡精品乱码亚洲| 变态另类成人亚洲欧美熟女| 国产成人精品久久二区二区免费| avwww免费| 桃色一区二区三区在线观看| 午夜两性在线视频| 国内揄拍国产精品人妻在线| 国产成人一区二区三区免费视频网站| 最近最新免费中文字幕在线| 国产精品久久久久久亚洲av鲁大| 两个人的视频大全免费| 欧美性猛交黑人性爽| av黄色大香蕉| 神马国产精品三级电影在线观看| 亚洲五月婷婷丁香| 精品福利观看| 色综合亚洲欧美另类图片| 国产精品亚洲av一区麻豆| 亚洲无线观看免费| 琪琪午夜伦伦电影理论片6080| 真实男女啪啪啪动态图| 一级a爱片免费观看的视频| 久99久视频精品免费| 亚洲人成网站在线播放欧美日韩| 国产精品女同一区二区软件 | 黄色丝袜av网址大全| 午夜福利高清视频| 麻豆av在线久日| 亚洲国产精品合色在线| 日本精品一区二区三区蜜桃| 欧美一级毛片孕妇| av在线蜜桃| 嫩草影院入口| 日韩精品中文字幕看吧| 露出奶头的视频| 一级毛片女人18水好多| 草草在线视频免费看| 欧美黄色淫秽网站| 一进一出抽搐gif免费好疼| 欧美性猛交╳xxx乱大交人| 国内久久婷婷六月综合欲色啪| 在线视频色国产色| 三级毛片av免费| 12—13女人毛片做爰片一| 亚洲av第一区精品v没综合| 国产亚洲精品av在线| 19禁男女啪啪无遮挡网站| 中文字幕久久专区| 国产高清视频在线观看网站| 国产在线精品亚洲第一网站| 嫩草影视91久久| 99热6这里只有精品| 免费无遮挡裸体视频| 一个人免费在线观看电影 | 九色成人免费人妻av| 在线播放国产精品三级| 久久精品夜夜夜夜夜久久蜜豆| 国产v大片淫在线免费观看| 天天躁狠狠躁夜夜躁狠狠躁| 国产美女午夜福利| 精品国产超薄肉色丝袜足j| 性色avwww在线观看| 中文亚洲av片在线观看爽| a级毛片在线看网站| 国产精品一区二区精品视频观看| av在线天堂中文字幕| 精品国内亚洲2022精品成人| 97超视频在线观看视频| 日韩三级视频一区二区三区| 老司机午夜十八禁免费视频| 91字幕亚洲| 女警被强在线播放| 不卡一级毛片| 午夜免费激情av| 一级毛片女人18水好多| 天堂动漫精品| 亚洲在线自拍视频| 91av网一区二区| 男女视频在线观看网站免费| 国产精品野战在线观看| 国产一区在线观看成人免费| 老司机午夜十八禁免费视频| 国产精品久久久久久久电影 | 两个人视频免费观看高清| 久久午夜综合久久蜜桃| 神马国产精品三级电影在线观看| 亚洲成av人片免费观看| 一二三四在线观看免费中文在| 69av精品久久久久久| 麻豆一二三区av精品| 国产高清视频在线观看网站| 日本在线视频免费播放| 亚洲欧美日韩无卡精品| 18美女黄网站色大片免费观看| 亚洲成av人片在线播放无| 国产精品九九99| 国产伦精品一区二区三区四那| 国产精品av视频在线免费观看| 老司机午夜福利在线观看视频| av天堂在线播放| 亚洲欧美激情综合另类| 国产乱人视频| а√天堂www在线а√下载| 亚洲国产精品合色在线| 男人和女人高潮做爰伦理| 亚洲乱码一区二区免费版| 欧美极品一区二区三区四区| 99热只有精品国产| 人妻丰满熟妇av一区二区三区| 在线观看美女被高潮喷水网站 | 久久久国产成人免费| 亚洲一区二区三区色噜噜| 中文字幕人妻丝袜一区二区| 啦啦啦免费观看视频1| 免费人成视频x8x8入口观看| 久久久精品大字幕| 精品乱码久久久久久99久播| 国产 一区 欧美 日韩| 香蕉av资源在线| 色尼玛亚洲综合影院| 国产野战对白在线观看| 欧美丝袜亚洲另类 | 国产精品乱码一区二三区的特点| 听说在线观看完整版免费高清| 波多野结衣巨乳人妻| 99在线人妻在线中文字幕| 美女被艹到高潮喷水动态| 亚洲精品美女久久av网站| 欧美大码av| 丰满人妻一区二区三区视频av | 在线观看美女被高潮喷水网站 | 欧美一区二区精品小视频在线| 久久精品aⅴ一区二区三区四区| 桃色一区二区三区在线观看| 色在线成人网| 欧美另类亚洲清纯唯美| 神马国产精品三级电影在线观看| 99精品久久久久人妻精品| 精品一区二区三区视频在线观看免费| 亚洲国产欧美一区二区综合| 亚洲一区二区三区不卡视频| 啦啦啦观看免费观看视频高清| 久久久水蜜桃国产精品网| 久久国产精品人妻蜜桃| 视频区欧美日本亚洲| 在线十欧美十亚洲十日本专区| 好男人在线观看高清免费视频| www日本黄色视频网| 99热精品在线国产| 日日干狠狠操夜夜爽| 亚洲熟女毛片儿| 这个男人来自地球电影免费观看| 欧美+亚洲+日韩+国产| 高清在线国产一区| 舔av片在线| 久久久久免费精品人妻一区二区| 在线观看午夜福利视频| 午夜福利高清视频| 亚洲国产精品久久男人天堂| 国产精品一区二区三区四区久久| 国产亚洲欧美98| 99精品欧美一区二区三区四区| www.熟女人妻精品国产| 国产精品一区二区三区四区久久| netflix在线观看网站| 精品久久久久久久末码| 欧美+亚洲+日韩+国产| 99久久成人亚洲精品观看| 床上黄色一级片| 黄色成人免费大全| 99久久精品国产亚洲精品| 1024香蕉在线观看| 无限看片的www在线观看|