亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > PostgreSQL教程(十):性能提升技巧

PostgreSQL教程(十):性能提升技巧

熱門標簽:打電話智能電銷機器人授權(quán) 重慶自動外呼系統(tǒng)定制 辦公外呼電話系統(tǒng) 合肥公司外呼系統(tǒng)運營商 海豐有多少商家沒有地圖標注 漯河外呼電話系統(tǒng) 外呼調(diào)研系統(tǒng) 地圖標注和圖片名稱的區(qū)別 美容工作室地圖標注

一、使用EXPLAIN:

    PostgreSQL為每個查詢都生成一個查詢規(guī)劃,因為選擇正確的查詢路徑對性能的影響是極為關(guān)鍵的。PostgreSQL本身已經(jīng)包含了一個規(guī)劃器用于尋找最優(yōu)規(guī)劃,我們可以通過使用EXPLAIN命令來查看規(guī)劃器為每個查詢生成的查詢規(guī)劃。
    PostgreSQL中生成的查詢規(guī)劃是由1到n個規(guī)劃節(jié)點構(gòu)成的規(guī)劃樹,其中最底層的節(jié)點為表掃描節(jié)點,用于從數(shù)據(jù)表中返回檢索出的數(shù)據(jù)行。然而,不同的掃描節(jié)點類型代表著不同的表訪問模式,如:順序掃描、索引掃描,以及位圖索引掃描等。如果查詢?nèi)匀恍枰B接、聚集、排序,或者是對原始行的其它操作,那么就會在掃描節(jié)點"之上"有其它額外的節(jié)點。并且這些操作通常都有多種方法,因此在這些位置也有可能出現(xiàn)不同的節(jié)點類型。EXPLAIN將為規(guī)劃樹中的每個節(jié)點都輸出一行信息,顯示基本的節(jié)點類型和規(guī)劃器為執(zhí)行這個規(guī)劃節(jié)點計算出的預(yù)計開銷值。第一行(最上層的節(jié)點)是對該規(guī)劃的總執(zhí)行開銷的預(yù)計,這個數(shù)值就是規(guī)劃器試圖最小化的數(shù)值。
    這里有一個簡單的例子,如下:
 

復(fù)制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1;
                             QUERY PLAN
    -------------------------------------------------------------
     Seq Scan on tenk1  (cost=0.00..458.00 rows=10000 width=244)
    

    EXPLAIN引用的數(shù)據(jù)是:
    1). 預(yù)計的啟動開銷(在輸出掃描開始之前消耗的時間,比如在一個排序節(jié)點里做排續(xù)的時間)。
    2). 預(yù)計的總開銷。
    3). 預(yù)計的該規(guī)劃節(jié)點輸出的行數(shù)。
    4). 預(yù)計的該規(guī)劃節(jié)點的行平均寬度(單位:字節(jié))。
    這里開銷(cost)的計算單位是磁盤頁面的存取數(shù)量,如1.0將表示一次順序的磁盤頁面讀取。其中上層節(jié)點的開銷將包括其所有子節(jié)點的開銷。這里的輸出行數(shù)(rows)并不是規(guī)劃節(jié)點處理/掃描的行數(shù),通常會更少一些。一般而言,頂層的行預(yù)計數(shù)量會更接近于查詢實際返回的行數(shù)。
    現(xiàn)在我們執(zhí)行下面基于系統(tǒng)表的查詢:
 
復(fù)制代碼 代碼如下:

    SELECT relpages, reltuples FROM pg_class WHERE relname = 'tenk1';
 

    從查詢結(jié)果中可以看出tenk1表占有358個磁盤頁面和10000條記錄,然而為了計算cost的值,我們?nèi)匀恍枰懒硗庖粋€系統(tǒng)參數(shù)值。
 
復(fù)制代碼 代碼如下:

    postgres=# show cpu_tuple_cost;
     cpu_tuple_cost
    ----------------
     0.01
    (1 row)
     cost = 358(磁盤頁面數(shù)) + 10000(行數(shù)) * 0.01(cpu_tuple_cost系統(tǒng)參數(shù)值)
    

     下面我們再來看一個帶有WHERE條件的查詢規(guī)劃。
 
復(fù)制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 7000;
   
                             QUERY PLAN
    ------------------------------------------------------------
     Seq Scan on tenk1  (cost=0.00..483.00 rows=7033 width=244)
       Filter: (unique1 7000)
   

    EXPLAIN的輸出顯示,WHERE子句被當(dāng)作一個"filter"應(yīng)用,這表示該規(guī)劃節(jié)點將掃描表中的每一行數(shù)據(jù),之后再判定它們是否符合過濾的條件,最后僅輸出通過過濾條件的行數(shù)。這里由于WHERE子句的存在,預(yù)計的輸出行數(shù)減少了。即便如此,掃描仍將訪問所有10000行數(shù)據(jù),因此開銷并沒有真正降低,實際上它還增加了一些因數(shù)據(jù)過濾而產(chǎn)生的額外CPU開銷。
    上面的數(shù)據(jù)只是一個預(yù)計數(shù)字,即使是在每次執(zhí)行ANALYZE命令之后也會隨之改變,因為ANALYZE生成的統(tǒng)計數(shù)據(jù)是通過從該表中隨機抽取的樣本計算的。
    如果我們將上面查詢的條件設(shè)置的更為嚴格一些的話,將會得到不同的查詢規(guī)劃,如:
 
復(fù)制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 100;

                                      QUERY PLAN
    ------------------------------------------------------------------------------
     Bitmap Heap Scan on tenk1  (cost=2.37..232.35 rows=106 width=244)
       Recheck Cond: (unique1 100)
       ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
             Index Cond: (unique1 100)
   


    這里,規(guī)劃器決定使用兩步規(guī)劃,最內(nèi)層的規(guī)劃節(jié)點訪問一個索引,找出匹配索引條件的行的位置,然后上層規(guī)劃節(jié)點再從表里讀取這些行。單獨地讀取數(shù)據(jù)行比順序地讀取它們的開銷要高很多,但是因為并非訪問該表的所有磁盤頁面,因此該方法的開銷仍然比一次順序掃描的開銷要少。這里使用兩層規(guī)劃的原因是因為上層規(guī)劃節(jié)點把通過索引檢索出來的行的物理位置先進行排序,這樣可以最小化單獨讀取磁盤頁面的開銷。節(jié)點名稱里面提到的"位圖(bitmap)"是進行排序的機制。

    現(xiàn)在我們還可以將WHERE的條件設(shè)置的更加嚴格,如:
 

復(fù)制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 3;

                                      QUERY PLAN
    ------------------------------------------------------------------------------
     Index Scan using tenk1_unique1 on tenk1  (cost=0.00..10.00 rows=2 width=244)
       Index Cond: (unique1 3)
   


    在該SQL中,表的數(shù)據(jù)行是以索引的順序來讀取的,這樣就會令讀取它們的開銷變得更大,然而事實上這里將要獲取的行數(shù)卻少得可憐,因此沒有必要在基于行的物理位置進行排序了。
    現(xiàn)在我們需要向WHERE子句增加另外一個條件,如:
 
復(fù)制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 3 AND stringu1 = 'xxx';
   
                                      QUERY PLAN
    ------------------------------------------------------------------------------
     Index Scan using tenk1_unique1 on tenk1  (cost=0.00..10.01 rows=1 width=244)
       Index Cond: (unique1 3)
       Filter: (stringu1 = 'xxx'::name)
   

    新增的過濾條件stringu1 = 'xxx'只是減少了預(yù)計輸出的行數(shù),但是并沒有減少實際開銷,因為我們?nèi)匀恍枰L問相同數(shù)量的數(shù)據(jù)行。而該條件并沒有作為一個索引條件,而是被當(dāng)成對索引結(jié)果的過濾條件來看待。
    如果WHERE條件里有多個字段存在索引,那么規(guī)劃器可能會使用索引的AND或OR的組合,如:
 
復(fù)制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 100 AND unique2 > 9000;
    
                                         QUERY PLAN
    -------------------------------------------------------------------------------------
     Bitmap Heap Scan on tenk1  (cost=11.27..49.11 rows=11 width=244)
       Recheck Cond: ((unique1 100) AND (unique2 > 9000))
       ->  BitmapAnd  (cost=11.27..11.27 rows=11 width=0)
             ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
                   Index Cond: (unique1 100)
             ->  Bitmap Index Scan on tenk1_unique2  (cost=0.00..8.65 rows=1042 width=0)
                   Index Cond: (unique2 > 9000)
   

    這樣的結(jié)果將會導(dǎo)致訪問兩個索引,與只使用一個索引,而把另外一個條件只當(dāng)作過濾器相比,這個方法未必是更優(yōu)。
    現(xiàn)在讓我們來看一下基于索引字段進行表連接的查詢規(guī)劃,如:
 
復(fù)制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 100 AND t1.unique2 = t2.unique2;
     
                                          QUERY PLAN
    --------------------------------------------------------------------------------------
     Nested Loop  (cost=2.37..553.11 rows=106 width=488)
       ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244)
             Recheck Cond: (unique1 100)
             ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
                   Index Cond: (unique1 100)
       ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.00..3.01 rows=1 width=244)
             Index Cond: ("outer".unique2 = t2.unique2)
   

    從查詢規(guī)劃中可以看出(Nested Loop)該查詢語句使用了嵌套循環(huán)。外層的掃描是一個位圖索引,因此其開銷與行計數(shù)和之前查詢的開銷是相同的,這是因為條件unique1 100發(fā)揮了作用。 這個時候t1.unique2 = t2.unique2條件子句還沒有產(chǎn)生什么作用,因此它不會影響外層掃描的行計數(shù)。然而對于內(nèi)層掃描而言,當(dāng)前外層掃描的數(shù)據(jù)行將被插入到內(nèi)層索引掃描中,并生成類似的條件t2.unique2 = constant。所以,內(nèi)層掃描將得到和EXPLAIN SELECT * FROM tenk2 WHERE unique2 = 42一樣的計劃和開銷。最后,以外層掃描的開銷為基礎(chǔ)設(shè)置循環(huán)節(jié)點的開銷,再加上每個外層行的一個迭代(這里是 106 * 3.01),以及連接處理需要的一點點CPU時間。   
    如果不想使用嵌套循環(huán)的方式來規(guī)劃上面的查詢,那么我們可以通過執(zhí)行以下系統(tǒng)設(shè)置,以關(guān)閉嵌套循環(huán),如:
 
復(fù)制代碼 代碼如下:

    SET enable_nestloop = off;
    EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 100 AND t1.unique2 = t2.unique2;
     
                                            QUERY PLAN
    ------------------------------------------------------------------------------------------
     Hash Join  (cost=232.61..741.67 rows=106 width=488)
       Hash Cond: ("outer".unique2 = "inner".unique2)
       ->  Seq Scan on tenk2 t2  (cost=0.00..458.00 rows=10000 width=244)
       ->  Hash  (cost=232.35..232.35 rows=106 width=244)
             ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244)
                   Recheck Cond: (unique1 100)
                   ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
                         Index Cond: (unique1 100)
   

    這個規(guī)劃仍然試圖用同樣的索引掃描從tenk1里面取出符合要求的100行,并把它們存儲在內(nèi)存中的散列(哈希)表里,然后對tenk2做一次全表順序掃描,并為每一條tenk2中的記錄查詢散列(哈希)表,尋找可能匹配t1.unique2 = t2.unique2的行。讀取tenk1和建立散列表是此散列聯(lián)接的全部啟動開銷,因為我們在開始讀取tenk2之前不可能獲得任何輸出行。

    此外,我們還可以用EXPLAIN ANALYZE命令檢查規(guī)劃器預(yù)估值的準確性。這個命令將先執(zhí)行該查詢,然后顯示每個規(guī)劃節(jié)點內(nèi)實際運行時間,以及單純EXPLAIN命令顯示的預(yù)計開銷,如:
 

復(fù)制代碼 代碼如下:

    EXPLAIN ANALYZE SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 100 AND t1.unique2 = t2.unique2;     
                                                                QUERY PLAN
    ----------------------------------------------------------------------------------------------------------------------------------
     Nested Loop  (cost=2.37..553.11 rows=106 width=488) (actual time=1.392..12.700 rows=100 loops=1)
       ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244) (actual time=0.878..2.367 rows=100 loops=1)
             Recheck Cond: (unique1 100)
             ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0) (actual time=0.546..0.546 rows=100 loops=1)
                   Index Cond: (unique1 100)
       ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.00..3.01 rows=1 width=244) (actual time=0.067..0.078 rows=1 loops=100)
             Index Cond: ("outer".unique2 = t2.unique2)
     Total runtime: 14.452 ms
   

    注意"actual time"數(shù)值是以真實時間的毫秒來計算的,而"cost"預(yù)估值是以磁盤頁面讀取數(shù)量來計算的,所以它們很可能是不一致的。然而我們需要關(guān)注的只是兩組數(shù)據(jù)的比值是否一致。

    在一些查詢規(guī)劃里,一個子規(guī)劃節(jié)點很可能會運行多次,如之前的嵌套循環(huán)規(guī)劃,內(nèi)層的索引掃描會為每個外層行執(zhí)行一次。在這種情況下,"loops"將報告該節(jié)點執(zhí)行的總次數(shù),而顯示的實際時間和行數(shù)目則是每次執(zhí)行的平均值。這么做的原因是令這些真實數(shù)值與開銷預(yù)計顯示的數(shù)值更具可比性。如果想獲得該節(jié)點所花費的時間總數(shù),計算方式是用該值乘以"loops"值。
    EXPLAIN ANALYZE顯示的"Total runtime"包括執(zhí)行器啟動和關(guān)閉的時間,以及結(jié)果行處理的時間,但是它并不包括分析、重寫或者規(guī)劃的時間。
    如果EXPLAIN命令僅能用于測試環(huán)境,而不能用于真實環(huán)境,那它就什么用都沒有。比如,在一個數(shù)據(jù)較少的表上執(zhí)行EXPLAIN,它不能適用于數(shù)量很多的大表,因為規(guī)劃器的開銷計算不是線性的,因此它很可能對大些或者小些的表選擇不同的規(guī)劃。一個極端的例子是一個只占據(jù)一個磁盤頁面的表,在這樣的表上,不管它有沒有索引可以使用,你幾乎都總是得到順序掃描規(guī)劃。規(guī)劃器知道不管在任何情況下它都要進行一個磁盤頁面的讀取,所以再增加幾個磁盤頁面讀取用以查找索引是毫無意義的。

二、批量數(shù)據(jù)插入:

    有以下幾種方法用于優(yōu)化數(shù)據(jù)的批量插入。

    1. 關(guān)閉自動提交:

    在批量插入數(shù)據(jù)時,如果每條數(shù)據(jù)都被自動提交,當(dāng)中途出現(xiàn)系統(tǒng)故障時,不僅不能保障本次批量插入的數(shù)據(jù)一致性,而且由于有多次提交操作的發(fā)生,整個插入效率也會受到很大的打擊。解決方法是,關(guān)閉系統(tǒng)的自動提交,并且在插入開始之前,顯示的執(zhí)行begin transaction命令,在全部插入操作完成之后再執(zhí)行commit命令提交所有的插入操作。
    
    2. 使用COPY:

    使用COPY在一條命令里裝載所有記錄,而不是一系列的INSERT命令。COPY命令是為裝載數(shù)量巨大的數(shù)據(jù)行優(yōu)化過的,它不像INSERT命令那樣靈活,但是在裝載大量數(shù)據(jù)時,系統(tǒng)開銷也要少很多。因為COPY是單條命令,因此在填充表的時就沒有必要關(guān)閉自動提交了。 
    
    3. 刪除索引:

    如果你正在裝載一個新創(chuàng)建的表,最快的方法是創(chuàng)建表,用COPY批量裝載,然后創(chuàng)建表需要的任何索引。因為在已存在數(shù)據(jù)的表上創(chuàng)建索引比維護逐行增加要快。當(dāng)然在缺少索引期間,其它有關(guān)該表的查詢操作的性能將會受到一定的影響,唯一性約束也有可能遭到破壞。
    
    4. 刪除外鍵約束:
    和索引一樣,"批量地"檢查外鍵約束比一行行檢查更加高效。因此,我們可以先刪除外鍵約束,裝載數(shù)據(jù),然后在重建約束。
    
    5. 增大maintenance_work_mem:
    在裝載大量數(shù)據(jù)時,臨時增大maintenance_work_mem系統(tǒng)變量的值可以改進性能。這個系統(tǒng)參數(shù)可以提高CREATE INDEX命令和ALTER TABLE ADD FOREIGN KEY命令的執(zhí)行效率,但是它不會對COPY操作本身產(chǎn)生多大的影響。
    
    6. 增大checkpoint_segments:
    臨時增大checkpoint_segments系統(tǒng)變量的值也可以提高大量數(shù)據(jù)裝載的效率。這是因為在向PostgreSQL裝載大量數(shù)據(jù)時,將會導(dǎo)致檢查點操作(由系統(tǒng)變量checkpoint_timeout聲明)比平時更加頻繁的發(fā)生。在每次檢查點發(fā)生時,所有的臟數(shù)據(jù)都必須flush到磁盤上。通過提高checkpoint_segments變量的值,可以有效的減少檢查點的數(shù)目。
    
    7. 事后運行ANALYZE:
    在增加或者更新了大量數(shù)據(jù)之后,應(yīng)該立即運行ANALYZE命令,這樣可以保證規(guī)劃器得到基于該表的最新數(shù)據(jù)統(tǒng)計。換句話說,如果沒有統(tǒng)計數(shù)據(jù)或者統(tǒng)計數(shù)據(jù)太過陳舊,那么規(guī)劃器很可能會選擇一個較差的查詢規(guī)劃,從而導(dǎo)致查詢效率過于低下。

您可能感興趣的文章:
  • PostgreSQL教程(一):數(shù)據(jù)表詳解
  • PostgreSQL教程(二):模式Schema詳解
  • PostgreSQL教程(三):表的繼承和分區(qū)表詳解
  • PostgreSQL教程(四):數(shù)據(jù)類型詳解
  • PostgreSQL教程(五):函數(shù)和操作符詳解(1)
  • PostgreSQL教程(六):函數(shù)和操作符詳解(2)
  • PostgreSQL教程(七):函數(shù)和操作符詳解(3)
  • PostgreSQL教程(八):索引詳解
  • PostgreSQL教程(九):事物隔離介紹
  • PostgreSQL教程(十一):服務(wù)器配置
  • PostgreSQL教程(十二):角色和權(quán)限管理介紹
  • PostgreSQL教程(十三):數(shù)據(jù)庫管理詳解
  • PostgreSQL教程(十四):數(shù)據(jù)庫維護

標簽:晉城 來賓 衡陽 珠海 烏海 錦州 蚌埠 株洲

巨人網(wǎng)絡(luò)通訊聲明:本文標題《PostgreSQL教程(十):性能提升技巧》,本文關(guān)鍵詞  PostgreSQL,教程,十,性能,提升,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL教程(十):性能提升技巧》相關(guān)的同類信息!
  • 本頁收集關(guān)于PostgreSQL教程(十):性能提升技巧的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚欧乱色一区二区三区| 精品国产亚洲人成在线| 国产一级强片在线观看| 精品国产一级毛片| 欧美国产日韩一区二区三区| 精品久久久久久中文字幕2017| 一级女性全黄生活片免费| 日韩一级黄色大片| 久久精品免视看国产明星| 欧美激情一区二区三区在线 | 欧美另类videosbestsex高清| 91麻豆国产| 精品视频在线观看一区二区| 美女免费黄网站| 韩国三级一区| 午夜家庭影院| 日本免费乱人伦在线观看| 日本免费乱人伦在线观看| 日韩男人天堂| 精品国产亚一区二区三区| a级精品九九九大片免费看| 久久精品成人一区二区三区| 亚欧乱色一区二区三区| 亚洲www美色| 亚飞与亚基在线观看| 九九精品在线| 一级女人毛片人一女人| 夜夜操天天爽| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 一级毛片视频免费| 一级毛片视频播放| 99久久精品国产免费| 久久精品免视看国产明星| 亚久久伊人精品青青草原2020| 国产一级生活片| 午夜激情视频在线播放| 欧美a免费| 久久国产精品自线拍免费| 成人影院久久久久久影院| 国产精品自拍在线| 国产精品1024在线永久免费| 国产91精品一区二区| 国产美女在线观看| 黄视频网站免费| 精品国产一区二区三区精东影业| 高清一级淫片a级中文字幕| 韩国毛片| 精品国产亚一区二区三区| 欧美激情一区二区三区视频 | 高清一级毛片一本到免费观看| 999久久狠狠免费精品| 国产一区国产二区国产三区| 91麻豆国产| 午夜家庭影院| 亚洲女人国产香蕉久久精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产不卡在线观看| 九九精品久久| 欧美爱色| 国产韩国精品一区二区三区| 九九精品在线| 久久精品店| 可以免费看毛片的网站| 国产网站免费观看| 精品在线观看国产| 天天色色色| 亚欧成人乱码一区二区| 成人a大片在线观看| 欧美爱爱网| 日韩专区一区| 美女免费黄网站| 91麻豆国产级在线| 日本特黄特色aa大片免费| 欧美激情一区二区三区视频高清 | 久久精品道一区二区三区| 午夜欧美成人久久久久久| 精品国产一区二区三区精东影业 | 亚洲第一色在线| 成人a大片在线观看| 美女免费毛片| 国产一区国产二区国产三区| 99热精品在线| 可以免费看毛片的网站| 天天做日日爱| 国产91丝袜在线播放0| 国产一区二区精品在线观看| 精品视频在线看| 97视频免费在线观看| 九九久久国产精品| a级精品九九九大片免费看| 香蕉视频久久| 九九免费精品视频| 日韩在线观看免费完整版视频| 999久久66久6只有精品| 成人免费网站久久久| 国产精品自拍在线| 国产网站免费观看| 中文字幕97| 亚洲第一色在线| 欧美激情一区二区三区视频 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩免费在线观看视频| 国产不卡在线观看视频| 精品国产一区二区三区久久久狼| 成人高清视频在线观看| 亚洲天堂在线播放| 午夜激情视频在线播放| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 午夜激情视频在线观看| 精品视频在线观看一区二区三区| 国产精品自拍在线观看| 久久福利影视| 国产精品自拍在线| 免费一级片在线| 亚洲 男人 天堂| 黄视频网站免费观看| 成人免费一级纶理片| 成人高清免费| 久草免费在线视频| 99久久网站| 国产一区免费在线观看| 国产网站免费观看| 九九精品久久| 四虎影视久久| 国产不卡高清在线观看视频| 国产成a人片在线观看视频| 久久福利影视| 日韩男人天堂| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚欧乱色一区二区三区| 成人免费一级毛片在线播放视频| 精品视频免费在线| 美国一区二区三区| 久久99中文字幕| 亚久久伊人精品青青草原2020| 国产91精品一区| 韩国三级香港三级日本三级| 韩国毛片基地| 欧美激情一区二区三区在线 | 日本免费乱理伦片在线观看2018| 黄视频网站在线免费观看| 欧美激情在线精品video| 国产福利免费观看| 国产一区免费在线观看| 久久国产精品永久免费网站| 香蕉视频久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产精品自拍在线| 毛片电影网| 日日夜夜婷婷| 日韩免费在线| 国产不卡在线观看视频| 韩国三级视频在线观看| 日韩中文字幕一区二区不卡| 国产福利免费观看| 你懂的国产精品| 久久成人亚洲| 精品视频在线看 | 黄色福利| 二级特黄绝大片免费视频大片| 国产福利免费视频| 国产一区二区福利久久| 国产麻豆精品| 日韩av片免费播放| 欧美爱色| 香蕉视频三级| 91麻豆高清国产在线播放| 四虎影视久久久| 欧美1区2区3区| 四虎影视库国产精品一区| 国产原创中文字幕| 精品国产三级a| 国产麻豆精品视频| 成人免费观看男女羞羞视频| 日韩免费在线视频| 国产a毛片| 亚洲 男人 天堂| 尤物视频网站在线| 高清一级毛片一本到免费观看| 天天做日日爱| 九九久久国产精品大片| 精品在线观看一区| 91麻豆精品国产片在线观看| 91麻豆国产级在线| 九九久久国产精品大片| 成人高清视频免费观看| 一级片片| 国产一区二区精品尤物| 久久99这里只有精品国产| 久久成人综合网| 韩国三级视频网站| 九九久久国产精品| 成人a大片高清在线观看| 欧美a免费| 国产不卡高清| 一级女性大黄生活片免费| 美女免费毛片| 久久精品免视看国产成人2021| 九九精品影院| 亚洲精品影院|