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

首頁 > 數據庫 > Oracle > 正文

ORACLE數據庫查看執行計劃的方法

2020-07-26 14:31:46
字體:
來源:轉載
供稿:網友
一、什么是執行計劃(explain plan)

執行計劃:一條查詢語句在ORACLE中的執行過程或訪問路徑的描述。

二、如何查看執行計劃

1: 在PL/SQL下按F5查看執行計劃。第三方工具toad等。

很多人以為PL/SQL的執行計劃只能看到基數、優化器、耗費等基本信息,其實這個可以在PL/SQL工具里面設置的??梢钥吹胶芏嗥渌畔ⅲ缦滤?

clip_image002

2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下執行下面步驟

復制代碼 代碼如下:

SQL>EXPLAIN PLAN FOR
SELECT * FROM SCOTT.EMP; --要解析的SQL腳本
SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

clip_image004

clip_image006

3: 在SQL*PLUS下(有些命令在PL/SQL下無效)執行如下命令:

復制代碼 代碼如下:

SQL>SET TIMING ON             --控制顯示執行時間統計數據
SQL>SET AUTOTRACE ON EXPLAIN       --這樣設置包含執行計劃、腳本數據輸出,沒有統計信息
SQL>執行需要查看執行計劃的SQL語句
SQL>SET AUTOTRACE OFF           --不生成AUTOTRACE報告,這是缺省模式
SQL> SET AUTOTRACE ON           --這樣設置包含執行計劃、統計信息、以及腳本數據輸出
SQL>執行需要查看執行計劃的SQL語句
SQL>SET AUTOTRACE OFF
SQL> SET AUTOTRACE TRACEONLY      --這樣設置會有執行計劃、統計信息,不會有腳本數據輸出
SQL>執行需要查看執行計劃的SQL語句
SQL>SET AUTOTRACE TRACEONLY STAT --這樣設置只包含有統計信息
SQL>執行需要查看執行計劃的SQL語句

SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

參考文檔:SQLPlus User's Guide and Reference Release 11.1

clip_image008

注意:PL/SQL Developer 工具并不完全支持所有的SQL*Plus命令,像SET AUTOTRACE ON 就如此,在PL/SQL Developer工具下執行此命令會報錯

SQL> SET AUTOTRACE ON;

Cannot SET AUTOTRACE

4:SQL_TRACE可以作為參數在全局啟用,也可以通過命令形式在具體SESSION啟用

4.1 在全局啟用,在參數文件(pfile/spfile)中指定SQL_TRACE =true,在全局啟用SQL_TRACE時會導致所有進程活動被跟蹤,包括后臺進程以及用戶進程,通常會導致比較嚴重的性能問題,所以在生產環境要謹慎使用。

提示:通過在全局啟用SQL_TRACE, 我們可以跟蹤到所有后臺進程的活動,很多在文檔中的抽象說明,通過跟蹤文件的實時變化,我們可以清晰的看到各個進程間的緊密協調。

4.2在當前SESSION級別設置,通過跟蹤當前進程可以發現當前操作的后臺數據庫遞歸活動(這在研究數據庫新特性時尤其有效),研究SQL執行時,發現后臺

錯誤等。

復制代碼 代碼如下:

SQL> ALTER SESSION SET SQL_TRACE=TRUE;
SQL> SELECT * FROM SCOTT.EMP;
SQL> ALTER SESSION SET SQL_TRACE =FALSE;

那么此時如何查看相關信息?不管你在SQL*PLUS抑或PL/SQL DEVELOPER工具里面執行上面腳本過后都看不到什么信息,你可以通過下面腳本查詢到trace日志信息
復制代碼 代碼如下:

SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||
P.SPID || '.trc' TRACE_FILE_NAME
FROM
( SELECT P.SPID
FROM V$MYSTAT M, V$SESSION S, V$PROCESS P
WHERE M.STATISTIC# =1
AND S.SID = M.SID
AND P.ADDR = S.PADDR
) P,
( SELECT T.INSTANCE
FROM V$THREAD T, V$PARAMETER V
WHERE V.NAME ='thread'
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))
) I,
(SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T

clip_image010

TKPROF的幫助信息如下

復制代碼 代碼如下:

TKPROF 選項
選項 說明
TRACEFILE 跟蹤輸出文件的名稱
OUTPUTFILE 已設置格式的文件的名稱
SORT=option 語句的排序順序
PRINT=n 打印前 n 個語句
EXPLAIN=user/password 以指定的用戶名運行 EXPLAIN PLAN
INSERT=filename 生成 INSERT 語句
SYS=NO 忽略作為用戶 sys 運行的遞歸 SQL 語句
AGGREGATE=[Y|N] 如果指定 AGGREGATE = NO TKPROF 不聚集相同
SQL 文本的多個用戶
RECORD=filename 記錄在跟蹤文件中發現的語句
TABLE=schema.tablename 將執行計劃放入指定的表而不是缺省的PLAN_TABLE

可以在操作系統中鍵入 tkprof 以獲得所有可用選項和輸出的列表
注 排序選項有

排序 選項說明
prscnt execnt fchcnt 調用分析執行提取的次數
prscpu execpu fchcpu 分析執行提取所占用的 CPU 時間
prsela exela fchela 分析執行提取所占用的時間
prsdsk exedsk fchdsk 分析執行提取期間的磁盤讀取次數
prsqry exeqry fchqry 分析執行提取期間用于持續讀取的緩沖區數
prscu execu fchcu 分析執行提取期間用于當前讀取的緩沖區數
prsmis exemis 分析執行期間庫高速緩存未命中的次數
exerow fchrow 分析執行期間處理的行數
userid 分析游標的用戶的用戶 ID

TKPROF 統計數據
Count: 執行調用數
CPU: CPU 的使用秒數
Elapsed: 總共用去的時間
Disk: 物理讀取次數
Query: 持續讀取的邏輯讀取數
Current: 當前模式下的邏輯讀取數
Rows: 已處理行數
TKPROF 統計信息
統計 含義
Count 分析或執行語句的次數以及為語句發出的提取調用數
CPU 每個階段的處理時間以秒為單位如果在共享池中找到該語句對于分析階段為 0
Elapsed 占用時間以秒為單位通常不是非常有用因為其它進程影響占用時間
Disk 從數據庫文件讀取的物理數據塊如果該數據被緩沖則該統計可能很低
Query 為持續讀取檢索的邏輯緩沖區通常用于 SELECT 語句
Current 在當前模式下檢索的邏輯緩沖區通常用于 DML 語句
Rows 外部語句所處理的行對于 SELECT 語句在提取階段顯示它對于 DML 語句在執行階段顯示它

Query 和Current 的總和為所訪問的邏輯緩沖區的總數

執行下面命令:tkprof D:/ORACLE/PRODUCT/10.2.0/DB_1/RDBMS/TRACE/wgods_ora_3940.trc h:/out.txtoutputfile explain=etl/etl

clip_image012

執行上面命令后,可以查看生成的文本文件
復制代碼 代碼如下:

TKPROF: Release 10.2.0.1.0 - Production on 星期三 5月 23 16:56:41 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Trace file: D:/ORACLE/PRODUCT/10.2.0/DB_1/RDBMS/TRACE/wgods_ora_3940.trc
Sort options: default
********************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
********************************************************************************
ALTER SESSION SET SQL_TRACE = TRUE
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
********************************************************************************
begin :id := sys.dbms_transaction.local_transaction_id; end;
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 2
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 0 0 0 2
Misses in library cache during parse: 0
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
********************************************************************************
SELECT *
FROM
SCOTT.EMP
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 7 0 14
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 0 7 0 14
Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
Rows Execution Plan
------- ---------------------------------------------------
SELECT STATEMENT MODE: CHOOSE
TABLE ACCESS MODE: ANALYZED (FULL) OF 'EMP' (TABLE)
********************************************************************************
ALTER SESSION SET SQL_TRACE = FALSE
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.00 0.00 0 0 0 0
Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
********************************************************************************
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 5 0.00 0.00 0 0 0 0
Execute 5 0.00 0.00 0 0 0 2
Fetch 1 0.00 0.00 0 7 0 14
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 11 0.00 0.00 0 7 0 16
Misses in library cache during parse: 2
Misses in library cache during execute: 1
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 0 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 0 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
user SQL statements in session.
internal SQL statements in session.
SQL statements in session.
statement EXPLAINed in this session.
********************************************************************************
Trace file: D:/ORACLE/PRODUCT/10.2.0/DB_1/RDBMS/TRACE/wgods_ora_3940.trc
Trace file compatibility: 10.01.00
Sort options: default
session in tracefile.
user SQL statements in trace file.
internal SQL statements in trace file.
SQL statements in trace file.
unique SQL statements in trace file.
SQL statements EXPLAINed using schema:
ETL.prof$plan_table
Default table was used.
Table was created.
Table was dropped.
lines in trace file.
elapsed seconds in trace file.

4.3跟蹤其它用戶的進程,在很多時候我們需要跟蹤其它用戶的進程,而不是當前用戶,可以通過ORACLE提供的系統包
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION來完成。
例如:
復制代碼 代碼如下:

SELECT SID, SERIAL#, USERNAME FROM V$SESSION WHERE USERNAME = 'ETL'
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,TRUE);
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,FALSE);

5 利用10046事件
復制代碼 代碼如下:

ALTER SESSION SET TRACEFILE_IDENTIFIER = 10046;
ALTER SESSION SET EVENTS='10046 trace name context forever, level 8';
SELECT * FROM SCOTT.EMP;
ALTER SESSION SET EVENTS ='10046 trace name context off';
然后你可以用腳本查看追蹤文件的位置
SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||
P.SPID || '.trc' TRACE_FILE_NAME
FROM
( SELECT P.SPID
FROM V$MYSTAT M, V$SESSION S, V$PROCESS P
WHERE M.STATISTIC# =1
AND S.SID = M.SID
AND P.ADDR = S.PADDR
) P,
( SELECT T.INSTANCE
FROM V$THREAD T, V$PARAMETER V
WHERE V.NAME ='thread'
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))
) I,
(SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T
查詢結果為wgods_ora_28279.trc文件, 但是去相應目錄卻沒有找到對應的追蹤文件,而是如下trace文件:wgods_ora_28279_10046.trc

6 利用10053事件

有點類似10046,在此略過、

7 系統視圖

通過下面一些系統視圖,你可以看到一些零散的執行計劃的相關信息,有興趣的話可以多去研究一下。
復制代碼 代碼如下:

SELECT * FROM V$SQL_PLAN
SELECT * FROM V$RSRC_PLAN_CPU_MTH
SELECT * FROM V$SQL_PLAN_STATISTICS
SELECT * FROM V$SQL_PLAN_STATISTICS_ALL
SELECT * FROM V$SQLAREA_PLAN_HASH
SELECT * FROM V$RSRC_PLAN_HISTORY

三、看懂執行計劃

1.執行順序

執行順序的原則是:由上至下,從右向左

由上至下:在執行計劃中一般含有多個節點,相同級別(或并列)的節點,靠上的優先執行,靠下的后執行

從右向左:在某個節點下還存在多個子節點,先從最靠右的子節點開始執行。

當然,你在PL/SQL工具中也可以通過它提供的功能來查看執行順序。如下圖所示:

clip_image014

2.執行計劃中字段解釋

clip_image016

SQL>
名詞解釋:
recursive calls           遞歸調用
db block gets           從buffer cache中讀取的block的數量當前請求的塊數目,當前模式塊意思就是在操作中正好提取的塊數目,而不是在一致性讀的情況下而產生的正常情況下,一個查詢提取的塊是在查詢查詢開始的那個時間點上存在的數據庫,當前塊是在這個時候存在數據塊,而不是這個時間點之前或者之后的的數據塊數目。
consistent gets          從buffer cache中讀取的undo數據的block的數量數據請求總數在回滾段Buffer中的數據一致性讀所需要的數據塊,,這里的概念是在你處理你這個操作的時侯需要在一致性讀狀態上處理多個塊,這些塊產生的主要原因是因為你在查詢過程中,由于其它會話對數據 塊進行操作,而對所要查詢的塊有了修改,但是由于我們的查詢是在這些修改之前調用的,所要需要對回滾 段中的數據塊的前映像進行查詢,以保證數據的一致性。這樣就產生了一致性讀。

physical reads           物理讀 就是從磁盤上讀取數據塊的數量。其產生的主要原因是:
                  1:在數據庫高速緩存中不存在這些塊。
                  2:全表掃描
                  3:磁盤排序
redo size              DML生成的redo的大小
sorts (memory)           在內存執行的排序量
sorts (disk)            在磁盤執行的排序量
2091 bytes sent via SQL*Net to client     從SQL*Net向客戶端發送了2091字節的數據
416 bytes received via SQL*Net from client  客戶端向SQL*Net發送了416字節的數據。
參考文檔:SQLPlus User's Guide and Reference Release 11.1

clip_image018

db block gets 、 consistent gets 、 physical reads這三者的關系可以概括為:邏輯讀指的是ORACLE從內存讀到的數據塊塊數量,一般來說是:
consistent gets + db block gets. 當在內存中找不到所需要的數據塊的話,就需要從磁盤中獲取,于是就產生了物理讀。
3.具體內容查看
1> Plan hash Value
這一行是這一條語句的的hash值,我們知道ORACLE對每一條ORACLE語句產生的執行計劃放在SHARE POOL里面,第一次要經過硬解析,產生hash值。下次再執行時比較hash值,如果相同就不會執行硬解析。
2> COST

COST沒有單位,是一個相對值,是SQL以CBO方式解析執行計劃時,供ORACLE來評估CBO成本,選擇執行計劃用的。沒有明確的含義,但是在對比是就非常有用。
公式:COST=(Single Block I/O COST + MultiBlock I/O Cost + CPU Cost)/ Sreadtim

3> 對上面執行計劃列字段的解釋:
Id: 執行序列,但不是執行的先后順序。執行的先后根據Operation縮進來判斷(采用最右最上最先執行的原則看層次關系,在同一級如果某個動作沒有子ID就最先執行。一般按縮進長度來判斷,縮進最大的最先執行,如果有2行縮進一樣,那么就先執行上面的。)
    Operation:當前操作的內容。
    Name:操作對象
    Rows:也就是10g版本以前的Cardinality(基數),Oracle估計當前操作的返回結果集行數。
    Bytes:表示執行該步驟后返回的字節數。
    Cost(CPU):表示執行到該步驟的一個執行成本,用于說明SQL執行的代價。
    Time:Oracle 估計當前操作的時間。
4.謂詞說明:
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("B"."MGR" IS NOT NULL)
4 - access("A"."EMPNO" = "B"."MGR")
    Access: 表示這個謂詞條件的值將會影響數據的訪問路勁(全表掃描還是索引)。
    Filter:表示謂詞條件的值不會影響數據的訪問路勁,只起過濾的作用。
    在謂詞中主要注意access,要考慮謂詞的條件,使用的訪問路徑是否正確。
5、 動態分析
如果在執行計劃中有如下提示:
Note
------------
-dynamic sampling used for the statement
這提示用戶CBO當前使用的技術,需要用戶在分析計劃時考慮到這些因素。 當出現這個提示,說明當前表使用了動態采樣。我們從而推斷這個表可能沒有做過分析。
這里會出現兩種情況:
(1) 如果表沒有做過分析,那么CBO可以通過動態采樣的方式來獲取分析數據,也可以或者正確的執行計劃。
(2) 如果表分析過,但是分析信息過舊,這時CBO就不會在使用動態采樣,而是使用這些舊的分析數據,從而可能導致錯誤的執行計劃。

四、表訪問方式

1.Full Table Scan (FTS) 全表掃描

2.Index Lookup 索引掃描
There are 5 methods of index lookup:
index unique scan --索引唯一掃描
通過唯一索引查找一個數值經常返回單個ROWID,如果存在UNIQUE或PRIMARY KEY約束(它保證了語句只存取單行的話),ORACLE
經常實現唯一性掃描
Method for looking up a single key value via a unique index. always returns a single value, You must supply AT LEAST the leading column of the index to access data via the index.
index range scan --索引局部掃描
Index range scan is a method for accessing a range values of a particular column. AT LEAST the leading column of the index must be supplied to access data via the index. Can be used for range operations (e.g. > < <> >= <= between) .
使用一個索引存取多行數據,在唯一索引上使用索引范圍掃描的典型情況是在謂詞(WHERE 限制條件)中使用了范圍操作符號(如>, < <>, >=, <=,BWTEEN)
index full scan --索引全局掃描
Full index scans are only available in the CBO as otherwise we are unable to determine whether a full scan would be a good idea or not. We choose an index Full Scan when we have statistics that indicate that it is going to be more efficient than a Full table scan and a sort. For example we may do a Full index scan when we do an unbounded scan of an index and want the data to be ordered in the index order.
index fast full scan --索引快速全局掃描,不帶order by情況下常發生
Scans all the block in the index, Rows are not returned in sorted order, Introduced in 7.3 and requires V733_PLANS_ENABLED=TRUE and CBO, may be hinted using INDEX_FFS hint, uses multiblock i/o, can be executed in parallel, can be used to access second column of concatenated indexes. This is because we are selecting all of the index.
index skip scan --索引跳躍掃描,where條件列是非索引的前提情況下常發生
Index skip scan finds rows even if the column is not the leading column of a concatenated index. It skips the first column(s) during the search.
3.Rowid 物理ID掃描
This is the quickest access method available.Oracle retrieves the specified block and extracts the rows it is interested in. --Rowid掃描是最快的訪問數據方式
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久免费视频在线观看| 国产91精品视频在线观看| 欧美福利视频网站| 清纯唯美亚洲激情| 精品国产欧美成人夜夜嗨| 亚洲淫片在线视频| 国产中文字幕亚洲| 久久99亚洲精品| 91国在线精品国内播放| 日韩精品在线观看一区| 久久久久久久久爱| 97婷婷大伊香蕉精品视频| 一区二区成人av| 精品久久久久久| 92版电视剧仙鹤神针在线观看| 91美女高潮出水| 欧美亚洲第一区| 国自产精品手机在线观看视频| 最近免费中文字幕视频2019| 亚洲精品一区二区网址| 在线免费观看羞羞视频一区二区| 久久69精品久久久久久久电影好| 国产91在线高潮白浆在线观看| 欧美激情videoshd| 欧美伦理91i| 国产精品18久久久久久麻辣| 欧美精品免费播放| 午夜精品久久久久久久99热浪潮| 日本精品一区二区三区在线| 国产亚洲成精品久久| 原创国产精品91| 日韩欧美在线播放| 国产伦精品免费视频| 欧美情侣性视频| 国内自拍欧美激情| 中文字幕日韩欧美在线| 91理论片午午论夜理片久久| 欧美视频在线免费看| 亚洲精品一区二三区不卡| 亚洲人精选亚洲人成在线| 精品久久久久久亚洲国产300| 国产精品中文字幕久久久| 精品五月天久久| 欧洲成人免费视频| 欧美最猛性xxxxx免费| 欧美黑人巨大精品一区二区| 午夜精品久久久久久久99黑人| 日韩av影院在线观看| 国产精品久久久久久av下载红粉| 久久精品国产精品| 午夜精品三级视频福利| 日韩成人激情视频| 亚洲成人网久久久| 最近2019中文字幕一页二页| 亚洲午夜未删减在线观看| 欧美电影在线免费观看网站| 日本精品久久久| 在线亚洲欧美视频| 亚洲精品成人久久| 久久这里有精品视频| 激情久久av一区av二区av三区| 欧美日韩国产二区| 亚洲一区国产精品| 精品视频一区在线视频| 国产精品日韩在线播放| 欧美日韩亚洲精品一区二区三区| www.亚洲一区| 中文字幕欧美日韩| xxxxx成人.com| 色中色综合影院手机版在线观看| 日韩av在线免费观看一区| 91久久久精品| 亚洲在线一区二区| 综合国产在线观看| 国产精品久久久久久久9999| 人人澡人人澡人人看欧美| 欧美性xxxxx极品| 亚洲三级黄色在线观看| 美女av一区二区| 日本精品免费一区二区三区| 欧美日韩国产区| 国产ts一区二区| 久久久久久久一区二区| 久久久久久久999| 91国在线精品国内播放| 福利精品视频在线| 亚洲欧美中文日韩在线v日本| 国产精品久久久久久久av大片| 久久久爽爽爽美女图片| 国产亚洲成av人片在线观看桃| 久久久伊人日本| 国产第一区电影| 日韩风俗一区 二区| 欧美黑人视频一区| 国产精品成人免费视频| 91精品美女在线| 国产精品久久久久不卡| 欧美又大又硬又粗bbbbb| 欧美美女18p| 国产精品久久婷婷六月丁香| 美日韩精品免费观看视频| 亚洲男人的天堂在线| 国产精品美女呻吟| 欧美黑人视频一区| 俺去亚洲欧洲欧美日韩| 亚洲精品日韩久久久| 日韩在线观看免费高清| 国产成人激情小视频| 亚洲视频在线观看免费| 亚洲人成在线一二| 精品国产31久久久久久| 国产精品高精视频免费| 国产精品美女呻吟| 国产精品午夜视频| 2019亚洲日韩新视频| 国产91ⅴ在线精品免费观看| 国产精品视频在线观看| 中文字幕亚洲天堂| 亚洲综合一区二区不卡| 国产美女久久精品| 国产欧美 在线欧美| 国产精品日韩久久久久| 久久久免费高清电视剧观看| 亚洲欧洲第一视频| 国产精品黄页免费高清在线观看| 亚洲va男人天堂| 欧美日韩中文字幕日韩欧美| 国内精品久久久久影院 日本资源| 成人综合网网址| 欧美午夜宅男影院在线观看| 欧美精品情趣视频| 国产精品一区二区三区成人| 欧美日韩在线第一页| 国产视频一区在线| 国产日韩在线一区| 欧美激情第三页| 亚洲乱码国产乱码精品精天堂| 97超视频免费观看| 亚洲欧美日韩区| 国产视频在线观看一区二区| 正在播放亚洲1区| 国产精品pans私拍| 在线观看国产成人av片| 日韩av电影在线免费播放| 亚洲人成在线播放| 精品无人国产偷自产在线| 91青草视频久久| 亚洲网站在线观看| 欧美高清电影在线看| 日韩在线中文字幕| 国产精品h片在线播放| 国产精品久久久久秋霞鲁丝| 亚洲男人天堂网| 国产欧美日韩免费| 精品女同一区二区三区在线播放| 亚洲最大的免费| 九九久久国产精品| 久久天天躁狠狠躁老女人| 97久久精品人搡人人玩| 国产精品久久久久久久久久东京| 日韩亚洲第一页| 日韩精品福利网站| 国产91亚洲精品| 欧美日韩在线第一页|