亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > PostgreSQL > 正文

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

2020-03-12 23:53:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了PostgreSQL教程(十):性能提升技巧,本文講解了使用EXPLAIN、批量數(shù)據(jù)插入、關(guān)閉自動(dòng)提交、使用COPY、 刪除索引、刪除外鍵約束等技巧,需要的朋友可以參考下
 

一、使用EXPLAIN:

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

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

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

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

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

     下面我們?cè)賮?lái)看一個(gè)帶有WHERE條件的查詢(xún)規(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)作一個(gè)"filter"應(yīng)用,這表示該規(guī)劃節(jié)點(diǎn)將掃描表中的每一行數(shù)據(jù),之后再判定它們是否符合過(guò)濾的條件,最后僅輸出通過(guò)過(guò)濾條件的行數(shù)。這里由于WHERE子句的存在,預(yù)計(jì)的輸出行數(shù)減少了。即便如此,掃描仍將訪問(wèn)所有10000行數(shù)據(jù),因此開(kāi)銷(xiāo)并沒(méi)有真正降低,實(shí)際上它還增加了一些因數(shù)據(jù)過(guò)濾而產(chǎn)生的額外CPU開(kāi)銷(xiāo)。
    上面的數(shù)據(jù)只是一個(gè)預(yù)計(jì)數(shù)字,即使是在每次執(zhí)行ANALYZE命令之后也會(huì)隨之改變,因?yàn)锳NALYZE生成的統(tǒng)計(jì)數(shù)據(jù)是通過(guò)從該表中隨機(jī)抽取的樣本計(jì)算的。
    如果我們將上面查詢(xún)的條件設(shè)置的更為嚴(yán)格一些的話,將會(huì)得到不同的查詢(xún)規(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é)點(diǎn)訪問(wèn)一個(gè)索引,找出匹配索引條件的行的位置,然后上層規(guī)劃節(jié)點(diǎn)再?gòu)谋砝镒x取這些行。單獨(dú)地讀取數(shù)據(jù)行比順序地讀取它們的開(kāi)銷(xiāo)要高很多,但是因?yàn)椴⒎窃L問(wèn)該表的所有磁盤(pán)頁(yè)面,因此該方法的開(kāi)銷(xiāo)仍然比一次順序掃描的開(kāi)銷(xiāo)要少。這里使用兩層規(guī)劃的原因是因?yàn)樯蠈右?guī)劃節(jié)點(diǎn)把通過(guò)索引檢索出來(lái)的行的物理位置先進(jìn)行排序,這樣可以最小化單獨(dú)讀取磁盤(pán)頁(yè)面的開(kāi)銷(xiāo)。節(jié)點(diǎn)名稱(chēng)里面提到的"位圖(bitmap)"是進(jìn)行排序的機(jī)制。

 

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

復(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ù)行是以索引的順序來(lái)讀取的,這樣就會(huì)令讀取它們的開(kāi)銷(xiāo)變得更大,然而事實(shí)上這里將要獲取的行數(shù)卻少得可憐,因此沒(méi)有必要在基于行的物理位置進(jìn)行排序了。
    現(xiàn)在我們需要向WHERE子句增加另外一個(gè)條件,如:
 
復(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)
   

    新增的過(guò)濾條件stringu1 = 'xxx'只是減少了預(yù)計(jì)輸出的行數(shù),但是并沒(méi)有減少實(shí)際開(kāi)銷(xiāo),因?yàn)槲覀內(nèi)匀恍枰L問(wèn)相同數(shù)量的數(shù)據(jù)行。而該條件并沒(méi)有作為一個(gè)索引條件,而是被當(dāng)成對(duì)索引結(jié)果的過(guò)濾條件來(lái)看待。
    如果WHERE條件里有多個(gè)字段存在索引,那么規(guī)劃器可能會(huì)使用索引的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é)果將會(huì)導(dǎo)致訪問(wèn)兩個(gè)索引,與只使用一個(gè)索引,而把另外一個(gè)條件只當(dāng)作過(guò)濾器相比,這個(gè)方法未必是更優(yōu)。 
    現(xiàn)在讓我們來(lái)看一下基于索引字段進(jìn)行表連接的查詢(xú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)
   

    從查詢(xún)規(guī)劃中可以看出(Nested Loop)該查詢(xún)語(yǔ)句使用了嵌套循環(huán)。外層的掃描是一個(gè)位圖索引,因此其開(kāi)銷(xiāo)與行計(jì)數(shù)和之前查詢(xún)的開(kāi)銷(xiāo)是相同的,這是因?yàn)闂l件unique1 < 100發(fā)揮了作用。 這個(gè)時(shí)候t1.unique2 = t2.unique2條件子句還沒(méi)有產(chǎn)生什么作用,因此它不會(huì)影響外層掃描的行計(jì)數(shù)。然而對(duì)于內(nèi)層掃描而言,當(dāng)前外層掃描的數(shù)據(jù)行將被插入到內(nèi)層索引掃描中,并生成類(lèi)似的條件t2.unique2 = constant。所以,內(nèi)層掃描將得到和EXPLAIN SELECT * FROM tenk2 WHERE unique2 = 42一樣的計(jì)劃和開(kāi)銷(xiāo)。最后,以外層掃描的開(kāi)銷(xiāo)為基礎(chǔ)設(shè)置循環(huán)節(jié)點(diǎn)的開(kāi)銷(xiāo),再加上每個(gè)外層行的一個(gè)迭代(這里是 106 * 3.01),以及連接處理需要的一點(diǎn)點(diǎn)CPU時(shí)間。    
    如果不想使用嵌套循環(huán)的方式來(lái)規(guī)劃上面的查詢(xú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)
   

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

 

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

復(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ù)值是以真實(shí)時(shí)間的毫秒來(lái)計(jì)算的,而"cost"預(yù)估值是以磁盤(pán)頁(yè)面讀取數(shù)量來(lái)計(jì)算的,所以它們很可能是不一致的。然而我們需要關(guān)注的只是兩組數(shù)據(jù)的比值是否一致。

 

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

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

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

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

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

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
久草综合在线视频| 亚洲国产激情一区二区三区| 日韩中文理论片| 欧美人与牲动交xxxx| 日韩电影在线观看中文字幕| 久久精品视频网站| melody高清在线观看| 精品国产一区二区三区av性色| 99精品中文字幕在线不卡| 欧美三日本三级少妇99| 亚洲欧洲精品一区| 成年网站在线看| 中文字幕有码热在线视频| 一区二区久久精品66国产精品| 久久夜色精品国产| 黄色免费视频观看| 国产精品久久久亚洲| 老师让我她我爽了好久视频| 成年人网站在线观看免费| 天堂地址在线www| 亚洲视频专区在线| 欧美激情91| 性欧美精品中出| 97国产精品久久久| 五月久久久综合一区二区小说| 国产精品毛片一区视频| 一区二区三区不卡视频在线观看| jizz亚洲少妇| 国产精品欧美一级免费| 亚洲色图视频免费播放| 国产精品视频色| 日本一区二区三区视频在线| 在线影院av| 亚洲一区免费在线观看| 中文字幕在线国产精品| 中文字幕高清av| 欧美在线视频精品| 久久艹这里只有精品| 日本在线观看高清完整版| 国产精品99久久久久久大便| 欧美特级黄色片| 四虎精品一区二区免费| 亚洲另类av| www色aa色aawww| 亚洲综合极品香蕉久久网| 精品sm在线观看| 91精品国产91久久久久福利| 国产福利小视频在线| 在线观看黄网站免费继续| 久9re热视频这里只有精品| 国产亚洲精品成人av久久ww| 美女流白浆视频| 欧美性色黄在线视频| 日韩欧美国产精品| 亚洲石原莉奈一区二区在线观看| 亚洲综合自拍偷拍| 男人靠女人免费视频网站| 美女爆乳18禁www久久久久久| 77777影视视频在线观看| 国产精品综合不卡av| 特黄特色大片免费视频大全| 中文字幕在线播放不卡一区| 国产视频久久网| 高清视频在线观看一区| 日韩毛片在线免费看| 国产无套精品一区二区三区| h色网站在线观看| 欧美二区三区的天堂| 国产精品国产a| 国产精品视频在线看| 在线国产精品视频| 国产videos| 国产又黄又猛视频| 在线精品亚洲| 国产精品久久久久久久久久久久久久久久| 欧美视频在线观看一区| 亚洲永久网站| 国产娇喘精品一区二区三区图片| 天天做天天干天天操| 亚洲成人资源网| 久久人人爽爽爽人久久久| 黑人狂躁日本娇小| 国产亚洲欧洲黄色| 高清性色生活片在线观看| 中文字幕资源网在线观看免费| 成人av午夜影院| 一二三四日本在线| 亚洲国模精品私拍| 91丨精品丨国产| 亚洲欧美视频在线播放| 日韩av电影免费| 成人福利免费观看| 美女毛片在线观看| 久久久久久久久久久影院| 先锋影音亚洲资源| 成人小视频在线看| 美女扒开尿口让男人操亚洲视频网站| 亚洲成人福利片| 无码人妻一区二区三区线| 制服丨自拍丨欧美丨动漫丨| 欧美丰满美乳xxⅹ高潮www| 白嫩白嫩国产精品| 网站黄色在线观看| 天堂男人av| 91在线成人| 免费在线一区二区| 欧美日韩一区二区综合| 欧美日韩亚洲丝袜制服| 成人精品影视| 国产精品嫩草影院av蜜臀| 国产极品美女高潮无套嗷嗷叫酒店| 亚洲www啪成人一区二区麻豆| 欧美一级免费在线观看| 成人一级黄色大片| 欧美成人精品xxx| 少妇性l交大片| 男人的天堂久久精品| 狠狠干成人综合网| 男人舔女人下部高潮全视频| 亚洲卡通欧美制服中文| 黄视频在线观看www| 男人操女人的视频在线观看欧美| 逼特逼视频在线| 久久久午夜精品理论片中文字幕| 欧美专区在线观看| 精品久久久久久久久久久久包黑料| 蜜月aⅴ免费一区二区三区| 欧美一区二区三区免费视| 久久av老司机精品网站导航| 伊人中文字幕在线| 中文字幕大看焦在线看| 91桃色在线| 国产精品久久久久毛片| 久久香蕉精品视频| 91国产在线免费观看| 久久99久久99精品免视看婷婷| 在线播放黄网| 美女被黑人爆操网站| 久久中文字幕av| 成人免费性视频| 成品网站w灬+源码1688网页| 天天av天天翘天天综合网色鬼国产| 大香伊人中文字幕精品| 国产网友自拍电影在线| 8x8x华人在线| 国产免费观看久久| 亚洲午夜免费电影| 亚亚洲欧洲精品| 91视频九色网站| 国产91精品一区二区绿帽| 国产99久久精品一区二区永久免费| 内射无码专区久久亚洲| 国产成人在线网站| 神马久久高清| 精品人妻在线播放| 成年人视频在线免费| 天天色天天爱天天射综合| 6080成人| 国产亚洲精品午夜高清影院| 国产片侵犯亲女视频播放| 亚洲日本韩国在线| 黄色美女网站在线观看| 国产精品久久久久久久久快鸭| 日本一线产区和二线产区| 欧美日产国产精品| 日韩成人av在线资源| 麻豆av免费在线观看| 日韩在线第二页| 伊人影院在线视频| 在线观看老湿视频福利| 色琪琪原网站亚洲香蕉| 国精产品一区一区| 国产精品一区二区三区观看| silk一区二区三区精品视频| 嫩草影院在线观看网站成人| 九七影院97影院理论片免费| 中文字幕 国产| 精品久久久久久久久久久| 欧美日韩亚洲丝袜制服| 精品日韩中文字幕| 夜夜躁狠狠躁日日躁av| 美女又爽又黄视频毛茸茸| 亚洲另类中文字| 婷婷六月天丁香| 久久久久国产精品区片区无码| 国产suv精品一区二区33| 亚洲欧美日韩三级| 午夜毛片在线观看| 亚洲激情久久| 99久久精品免费看国产交换| 日本久久久久久久久久| 免费黄色在线网站| 久久久久免费| 国产精品网址在线| 国产精品久久国产三级国电话系列| 精品高清久久| 香蕉视频亚洲一级| 欧美特黄一区二区三区| 久久香蕉综合色一综合色88| 狂野欧美激情性xxxx| 人妻精品无码一区二区三区| 国产真人做爰视频免费| 极品久久久久久| 激情视频极品美女日韩| 欧美日韩午夜| 99re在线视频播放| 精品国产成人系列| 国产精品一级黄片| wwww在线观看免费视频| 黄色www在线观看| 久久久综合免费视频| 国产精品久久久久一区| 一本一本久久a久久| 亚洲欧美日本一区| 美女视频黄免费的亚洲男人天堂| 国产免费黄色av| 日本一区福利在线| 国产视频一二| 老司机久久99久久精品播放免费| 欧美亚韩一区二区三区| 欧美日韩99| 成人在线观看小视频| 国产亚洲精品一区二区在线观看| 亚洲精品www久久久| 亚洲图区在线| 亚洲人体大胆视频| 亚洲无码久久久久| 亚洲成人久久久| 久久精品人人做人人综合| 波多野结衣中文字幕在线播放| 手机看片一级片| 69久久夜色精品国产69蝌蚪网| xfplay资源站夜色先锋| 很黄很黄的网站免费的| 91九色porn| 女人扒开屁股爽桶30分钟| 国产亚洲成av人在线观看导航| 久草综合在线| 女人被狂躁c到高潮| 中文字幕av不卡在线| 中文字幕免费视频观看| a网站在线观看| 在线精品自拍| 国产精品传媒入口麻豆| 波多视频一区| 国产精品老牛影院在线观看| 国产videos久久| 91精品店在线| 成人福利网站| 欧美中文在线观看| 中国丰满熟妇xxxx性| 亚洲成在人线在线播放| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 国产高清不卡无码视频| 山东少妇露脸刺激对白在线| 麻豆电影在线观看| 亚洲国产中文字幕在线| 国产精品久久久久久吹潮| 国产在线视频精品视频免费看| 日韩一区免费| 国产成人精品免费视频| 久久影院一区二区| 国产视频精品va久久久久久| 亚洲免费影院| 久久久久久久久亚洲| 国产一级做a爰片在线看免费| www.九九热.com| 国产男女猛烈无遮挡a片漫画| 亚洲人免费视频| 中文字幕av一区二区三区佐山爱| 4438全国亚洲精品在线观看视频| 日韩欧美中文字幕在线观看| 欧美日韩亚洲一区二| 精品欧美国产一区二区三区| 国产又粗又猛又爽视频| 久久久久久久精| 少妇视频一区二区| 日韩欧美国产综合在线| 亚洲国产成人精品综合99| 欧美日本一区二区高清播放视频| 五月天久久狠狠| 免费在线你懂的| 91成人免费在线| 7m第一福利500精品视频| 国产精品福利一区二区| 亚洲日本护士毛茸茸| 欧美jizzhd欧美精品巨大| 日韩电影免费在线| 日韩福利电影在线| 久久一区二区三区电影| 欧美日韩亚洲一区二| 国产a精品视频| 久久久久久久久久久久久久| 欧美色网在线| 美女视频黄a大片欧美| 亚洲aa在线| 成人不卡视频| 亚洲精品小视频在线观看| 国产三级电影在线播放| 亚洲一卡二卡在线| 99精品久久免费看蜜臀剧情介绍| 色婷婷热久久| 性高潮久久久久久久久| 欧美精品videossex少妇| 亚洲视频一区二区三区四区| 精品少妇人妻av一区二区| 成人深夜福利app| 成人午夜两性视频| 91精品办公室少妇高潮对白| 成人性生交大片免费看视频直播| a√在线中文网新版址在线| 伊人中文字幕在线观看| 91精品国产91久久久久福利| 日本午夜精品视频| 影音先锋黄色资源| 日日干夜夜骑| 欧洲vodafonewi精品| 亚洲欧美一区二区三区极速播放| 国内精品久久久久伊人av| 成人手机在线| 久操免费在线视频| 校园春色亚洲| 国产成人综合亚洲欧美在| 国产午夜福利在线播放| 91色在线观看| 亚洲国产日韩欧美在线观看| 中日韩精品视频在线观看| 欧美日韩不卡合集视频|