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

PostgreSQL 的并行框架

數據庫 其他數據庫
PostgreSQL 提供了一些簡單的機制使得編寫并行算法更加簡單。你可以通過使用 ParallelContext 數據結構去喚起后臺工作進程、初始化工作進程的進程狀態(以匹配喚起他們的后臺進程),使進程通過動態共享內存 (Dynamic Shared Memory) 進行通信和寫并不復雜的邏輯且不用意識到并行的存在就可以讓代碼跑在用戶后臺進程或者任一并行的工作進程。

前言

2016年4月,PostgreSQL 社區發布了 PostgreSQL 9.6,并首次引入了并行查詢的能力,進一步釋放了多核服務器的計算力。最近微擾醬則因為工作的原因需要調研 PostgreSQL 對并行化算子的實現,就隨手翻譯了 PostgreSQL 代碼中介紹 pg 所提供的并行查詢框架的一篇文檔,之后應該會再陸續輸出幾篇調研結果;文檔在代碼中的路徑為 src/backend/access/transam/README.parallel,翻譯如有疏漏還請各位大佬多多指正。

那如果有讀者對并行算子本身沒有任何概念,微擾醬這邊給各位舉一個簡單的例子。我們考慮一個簡單的 agg 語句 explain select count(*) from bmscantest2 where a>1。如果一張表內數據不多時,pg 的優化器是不會選擇采用并行化的,得到的查詢計劃如下所示。

postgres=# explain select count(*) from bmscantest2 where a>1;
QUERY PLAN
-----------------------------------------------------------------
Aggregate (cost=1.13..1.14 rows=1 width=8)
-> Seq Scan on bmscantest2 (cost=0.00..1.12 rows=3 width=0)
Filter: (a > 1)
(3 rows)

而如果表中數據比較多,pg 可能就會開始考慮并行化的查詢計劃,得到的查詢計劃如下,其中 Workers Planned: 4 就表示我們啟動了4個工作進程進行agg的計算。

postgres=*# explain select count(*) from bmscantest where a>1;
QUERY PLAN
-------------------------------------------------------------------------------------------
Finalize Aggregate (cost=1968.35..1968.36 rows=1 width=8)
-> Gather (cost=1568.33..1968.34 rows=4 width=8)
Workers Planned: 4
-> Partial Aggregate (cost=1568.33..1568.34 rows=1 width=8)
-> Parallel Seq Scan on bmscantest (cost=0.00..1547.50 rows=8333 width=0)
Filter: (a > 1)
(6 rows)

借一張 Thomas Munro 的圖,出自他18年做的 Parallelism in PostgreSQL 11 的演講的 slides。

圖片

而算子的并行化具體是如何實現的,又能帶來怎樣的性能提升則要因算子而異,且聽下回分解。

以下為文檔翻譯:

概述

PostgreSQL 提供了一些簡單的機制使得編寫并行算法更加簡單。你可以通過使用 ParallelContext 數據結構去喚起后臺工作進程、初始化工作進程的進程狀態(以匹配喚起他們的后臺進程),使進程通過動態共享內存 (Dynamic Shared Memory) 進行通信和寫并不復雜的邏輯且不用意識到并行的存在就可以讓代碼跑在用戶后臺進程或者任一并行的工作進程。

那個發起并行指令的進程(我們此后稱為發起進程)首先會創建一個動態共享內存區,該區域在整個并行運算的過程里都會存在。動態共享內存區會包含(1)用于傳遞錯誤信息(和通過 elog/ereport 上報的其他信息)的 shm_mq (2)用于同步工作進程狀態的發起進程私有狀態的序列化表示(3)任何其他 ParallelContext 使用者出于使用目的自定義的數據結構。一旦發起進程完成了動態共享內存區的初始化,它就會要求 postmaster 發起適當數量的工作進程。這些工作進程隨后會連接上動態共享內存區、初始化他們的狀態然后喚起入口函數,我們馬上會介紹這一部分內容。

錯誤上報

工作進程被啟動的時候,首先會綁定動態共享內存區并定位其中的 shm_mq,用于進行錯誤上報;工作進程會把所有的協議消息重定向給 shm_mq。而在此之前,所有后臺工作進程發生的錯誤并不會發送給發起進程。從發起進程的視角來看,這些工作進程只不過是初始化失敗了。發起進程也需要始終做好和比其發起的數量更少的工作進程協同工作的準備,所以即使出現這樣的情況也不會有什么額外的問題。

當有一條消息(在消息體很大被拆分的時候也可能是部分消息)被放入錯誤上報隊列時,PROCSIG_PARALLEL_MESSAGE 會被發送到發起進程。而發起進程的 CHECK_FOR_INTERRUPTS() 就會檢查到這一事件,從而讀取并重新在發起進程上重新發出該消息。大多數情況下,這就足以使得錯誤上報在并行的模式下可以工作了。當然,為了正常運行,發起進程需要定期執行 CHECK_FOR_INTERRUPTS() 并避免中斷長時間阻塞進程,但這些事情本就是應該做的。

(目前仍有的一個懸而未決的問題就是有時候一些消息會被寫到系統日志中兩次,一次是在上報發生的工作進程寫入,一次是在發起進程收到消息后重新拋出的消息。如果我們決定要避免其中一次的消息寫入,應該想辦法避免發起進程的重復寫。不然的話,如果工作進程因為一些原因未能將消息傳遞給發起進程,則整個消息就會被丟失了。)

狀態共享

在單進程狀態下可以工作的 C 代碼在并行模式下卻失敗了的情況是時有發生的。只要全局變量存在,就沒有并行的框架可以完全解決這個問題。沒有通用的機制可以保證每個全局變量在工作進程中可以和發起進程有一樣的值。即使我們可以保證這一點,只要我們調用了一些函數去改變這些變量,那么只有在這些改變發生的進程才可以立刻看到更新后的新值。相似的問題在任何一個我們使用的更復雜的數據結構中都會出現。比如偽隨機數生成器在指定隨機種子的情況下,每次都應該產生同樣的可預測的隨機序列。而這背后依賴的是執行生成器的進程內部的私有狀態,這本身不會跨進程共享。所以一個并行安全的偽隨機器應該要將其狀態存儲在動態共享內存中,并用鎖保證其安全性。而并行框架本身沒有辦法知道用戶所調用的代碼是否有這樣的問題,也就沒有辦法對此做出什么措施。

取而代之的,我們采用了更加實用主義的策略。首先,我們試著讓更多的操作在并行模式下和單進程模式下工作的一樣正確。其次,我們試著通過錯誤檢查禁止一些常見的不安全操作。這些機制可以 100% 保證 SQL 中的不安全行為被禁止,但是 C 代碼中的不安全行為卻可能并不會觸發這些檢查。這些檢查會通過調用 EnterParallelMode() 函數啟用。因而,在創建并行上下文的時候,我們就應該調用這個函數,并在 ExitParallelMode() 調用時解除這些檢查。最后,最重要的一個限制則是我們要求所有的操作在只讀的時候才可以使用并行模式,所有的寫操作和 DDL 都是不會被并行的。也許以后我們可以減少這樣的限制。

為了使得更多的操作可以在并行模式下安全執行,我們會從發起進程中拷貝出許多重要的狀態到工作進程里,包括:

  • dfmgr.c 動態加載的一系列動態庫。
  • 被驗證的用戶 ID 和當前數據庫。每個工作進程都會和發起進程用同樣的 ID 連接同樣的數據庫。
  • 所有 GUC 值。在并行模式下禁止任何 GUC 的永久改變;但暫時的變化,比如進入一個帶有非空 proconfig 的函數,則是可以的。
  • 當前子事務的 XID,最上層事務的 XID,以及當前的 XID 列表(即正在進行中或提交的事務)。需要這些信息以確保元組可見性檢查在工作進程中與在發起進程中返回相同的結果。細節請參閱下面的事務集成部分。
  • CID 映射。這也是為了保證一致的元組可見性檢查。需要同步這個數據結構的是我們不能支持并行模式寫入的一個主要原因:因為寫入可能會創建新的 CID,而我們無法讓其他工作進程了解它們。
  • 事務快照。
  • 活躍快照,可能和事務快照不同。
  • 當前活動的用戶 ID 和安全上下文。
  • 與阻塞的 REINDEX 操作相關的狀態。這能阻止訪問正在被重建的索引。
  • 活躍的 relmapper.c 的映射狀態。這是為了保證獲取映射的關系表 oid 對應的 relfilenumber 一致所需要的。

為了防止在并行模式下運行時出現死鎖,代碼中還引入了針對主進程和工作進程的分組鎖 (group locking)。具體可以參考 src/backend/storage/lmgr/README 。

事務集成

不管主進程中的 TransactionState 棧是什么樣子,每個并行工作進程最終都會得到一個深度為 1 的事務狀態棧。這個棧中唯一的記錄會被標記為特殊的事務狀態 TBLOCK_PARALLEL_INPROGRESS,這樣它就不會與普通的最上層事務混淆。這個 TransactionState 的 XID 會被設置為發起進程的當前活動子事務中最里的 XID。發起進程的最上層 XID,以及所有當前(進行中或已提交)XID 與 TransactionState 堆棧分開存儲,但 GetTopTransactionId()、GetTopTransactionIdIfAny() 和 TransactionIdIsCurrentTransactionId() 調用時會返回和發起進程相同的值。我們可以復制整個事務狀態堆棧,但其中大部分狀態是無用的:例如,你不能從工作進程中回滾到保存點,并且沒有與內存上下文相關的資源或中間子事務的資源所有者。

在并行模式下不能對事務狀態進行有意義的更改。既不能分配 XID,也不能發起或結束子事務,因為我們無法將這些狀態更改傳達或同步給協作的其他進程。在所有工作進程退出之前,發起進程想要退出正在進行的任何事務或子事務顯然是不可行的;而對于工作進程來說,嘗試提交子事務或中止當前子事務并自行切換上下文執行一些非當前發起進程正在處理的事務,當然是更不被允許的。允許以并行模式執行內部子事務(例如,實現 PL/pgSQL EXCEPTION 塊)可能是可行的,只要它們不會產生 XID,因為其他進程實際上不需要知道這些事務的發生,也不需要為此做任何事情。但現在,我們選擇直接禁用他們。

在并行操作結束時,不管是得到了成功提交還是被錯誤中斷,與該操作關聯的并行工作進程都會退出。在錯誤發生的情況下,發起進程的終止事務處理模塊會發出終止所有剩余的工作進程的信號,然后等待他們退出。在并行操作成功的情況下,發起進程不發送任何信號,而是必須等待工作進程完成并自行退出。無論在哪種情況下,在發起進程清理被創建的(子)事務之前,都必須先等待工作進程全部退出;否則,可能會出現混亂。例如,如果發起進程正在回滾創建了某個正在被工作進程掃描的表的事務,則該表可能會在工作進程掃描它的過程中消失。這顯然是不安全的。

通常,此時每個工作進程執行的清理操作類似于最頂層事務的提交或中止時發生的。每個進程都有自己的資源所有者:buffer pins、catcache 或 relcache 的引用計數、元組描述符等由每個進程獨立管理,并且必須在退出之前釋放它們。但是,工作進程對事務的提交或中止與真正的最頂層事務的提交或中止之間仍存在一些重要區別,包括:

  • 不會有任何提交或終止記錄被寫入系統;發起進程會處理這件事。
  • pg_temp 命名空間的清理不會發生。并行進程不能安全的訪問發起進程的 pg_temp 命名空間,也不應該創建一個自己的副本。

編碼約定

在開始任何并行操作之前,調用 EnterParallelMode();在所有并行操作完成后,調用 ExitParallelMode()。試圖并行化任何特定算子的時候,都請使用 ParallelContext。基本的編碼模式如下所示:

EnterParallelMode();  /* prohibit unsafe state changes */

pcxt = CreateParallelContext("library_name", "function_name", nworkers);

/* Allow space for application-specific data here. */
shm_toc_estimate_chunk(&pcxt->estimator, size);
shm_toc_estimate_keys(&pcxt->estimator, keys);

InitializeParallelDSM(pcxt); /* create DSM and copy state to it */

/* Store the data for which we reserved space. */
space = shm_toc_allocate(pcxt->toc, size);
shm_toc_insert(pcxt->toc, key, space);

LaunchParallelWorkers(pcxt);

/* do parallel stuff */

WaitForParallelWorkersToFinish(pcxt);

/* read any final results from dynamic shared memory */

DestroyParallelContext(pcxt);

ExitParallelMode();

如果需要,在調用 WaitForParallelWorkersToFinish() 之后,可以重置上下文,以便可以使用相同的并行上下文重新啟動新的工作進程。為此,我們需要首先調用 ReinitializeParallelDSM() 以重新初始化由并行上下文機制本身管理的狀態;然后重置任何所需要的狀態;之后,你就可以再次調用 LaunchParallelWorkers 去喚起新的工作進程了。

結語

PostgreSQL 確實是一個非常復雜的系統,微擾醬已經入職 Hashdata 半年,接觸到的代碼面積仍然是 PostgreSQL 中非常小的一部分;以至于翻譯這篇文章的時候對里面共享內存機制、鎖機制還有事務的機制都還仍有很多困惑,翻譯出來把握也不是很足,希望好朋友們多多交流。

本文轉載自微信公眾號??「微擾理論」??,作者微擾理論 。轉載本文請聯系微擾理論公眾號。

責任編輯:武曉燕 來源: 微擾理論
相關推薦

2012-10-10 09:14:50

PHPRPCPHP框架

2012-02-01 09:28:02

Java

2013-07-09 09:20:23

JPPFJava并行處理框架

2012-08-17 09:32:52

Python

2011-12-20 09:51:01

Java

2012-08-23 09:33:25

數據庫數組PostgreSQL

2023-07-10 13:51:45

測試并行計算框架

2010-04-09 14:48:41

Oracle數據庫

2024-02-23 09:36:57

C#工具并行處理

2011-12-30 15:01:36

淘寶

2012-04-10 10:04:26

并行編程

2010-10-27 13:54:18

Oracle并行查詢

2022-02-17 11:03:06

MySQL組件查詢

2017-08-17 15:13:52

PostgreSQL MVCC機制

2014-01-05 17:51:03

2023-11-01 20:10:53

分布式并行技術

2012-04-06 10:31:44

Java

2017-07-17 15:46:20

Oracle并行機制

2010-03-08 09:17:13

F#異步

2023-11-30 16:29:16

PostgreSQL數據庫Kubernetes
點贊
收藏

51CTO技術棧公眾號

国产91|九色| 亚洲第一精品自拍| 最新av网址在线观看| 国内老熟妇对白xxxxhd| 亚洲男女自偷自拍| 久久精品91久久香蕉加勒比| 精品国产aⅴ一区二区三区东京热| 国产色播av在线| 国产女人18水真多18精品一级做| 亚洲综合一区二区不卡| 一级成人黄色片| 欧美va天堂| 一区二区三区视频免费在线观看| 麻豆传媒在线看| 希岛爱理一区二区三区av高清| 综合自拍亚洲综合图不卡区| 日本不卡高清视频一区| 亚洲精品久久久狠狠狠爱 | 九九热这里只有精品6| 久久久久国产精品区片区无码| 日韩av黄色| 欧美午夜片在线免费观看| 中文字幕第一页亚洲| 九色在线播放| 成人av网站免费观看| 国产在线视频不卡| 国产99免费视频| 精品成人一区| 欧美成人久久久| jizz日本在线播放| 免费欧美视频| 亚洲精品国产精品乱码不99按摩| 欧美精品 - 色网| 精品肉辣文txt下载| 欧美日韩国产中字| 国产一二三在线视频| 国产成人高清精品| 中文字幕中文乱码欧美一区二区| 欧美日韩高清一区二区不卡| 欧美高清电影在线看| 懂色av蜜桃av| 深夜福利久久| 亚洲欧美精品一区二区| 免费a v网站| 国产调教精品| 欧美精品一区二区三区四区| 日韩大尺度视频| 欧美日本三级| 欧美一级日韩免费不卡| 亚洲第一天堂久久| 北岛玲精品视频在线观看| 欧美性猛交xxxx乱大交退制版| 久久网站免费视频| 在线观看爽视频| 一本色道久久加勒比精品| 丰满少妇久久久| 黄频免费在线观看| 偷拍与自拍一区| 黄色影院一级片| 成人免费短视频| 日本电影亚洲天堂一区| 北条麻妃在线一区| www.一区| 在线播放中文一区| 青娱乐国产精品视频| 色悠久久久久综合先锋影音下载| 日韩久久免费av| 国产白袜脚足j棉袜在线观看| 黑人久久a级毛片免费观看| 亚洲电影在线看| 精品人妻一区二区三区香蕉| 天天综合永久入口| 另类中文字幕国产精品| 亚洲成人av电影在线| 女人和拘做爰正片视频| 日韩国产网站| 欧美日本韩国一区| 久久久久99人妻一区二区三区| 黄色成人美女网站| 一道本无吗dⅴd在线播放一区 | 一区二区三区成人在线视频| 妺妺窝人体色www看人体| 91超碰在线| 色婷婷久久综合| 制服丝袜中文字幕第一页| 欧美二区观看| 亚洲欧美成人一区二区在线电影| 日韩中文字幕有码| 综合久久亚洲| 性色av一区二区三区在线观看| 久操视频在线免费观看| 国产91精品久久久久久久网曝门 | 欧美色另类天堂2015| 九九九在线观看视频| 日韩精品一区国产| 亚洲视频在线观看免费| 青青青在线免费观看| 国产手机视频一区二区| 国产一区私人高清影院| 五月激情丁香婷婷| 亚洲欧洲成人自拍| 日韩网址在线观看| 亚洲精品黑牛一区二区三区| 亚洲人成亚洲人成在线观看| 91成人福利视频| 久久久999| 高清视频一区| 黄色网址在线免费| 在线亚洲免费视频| 妖精视频一区二区| 久久国产亚洲| 国产成人一区二区在线| 成人av手机在线| 欧美国产日韩a欧美在线观看| www精品久久| 国产成人免费av一区二区午夜| 日韩精品极品视频免费观看| 青娱乐国产精品| 蜜乳av一区二区| 欧洲精品国产| 人人草在线视频| 日韩精品在线网站| 国产传媒免费在线观看| 视频在线观看国产精品| 精品国产一区二区三| 国产精品实拍| 欧美精品在线视频| 三年中国中文观看免费播放| 一本色道久久综合亚洲精品高清| 亚洲永久免费观看| 免费a级在线播放| 欧美熟乱第一页| 久久成人激情视频| 亚洲在线一区| 另类欧美小说| 人人草在线视频| 亚洲精品乱码久久久久久金桔影视| 看片网站在线观看| 国产美女视频一区| 亚洲欧美日韩在线综合| 成人在线免费av| 国产一区二区三区网站| 青青国产在线视频| 国产色综合久久| 99草草国产熟女视频在线| 免费黄色成人| 国产精品91久久久| 成人免费高清在线播放| 欧美色综合天天久久综合精品| 午夜影院黄色片| 麻豆视频观看网址久久| 中文字幕一区二区三区乱码| 四虎影视成人精品国库在线观看| 最近中文字幕日韩精品| 中文字幕在线播放av| 国产精品二三区| 污污视频在线免费| 欧美日韩三级| 精品国产第一页| 黑人巨大精品| 神马久久久久久| 国产三级漂亮女教师| 亚洲精品午夜久久久| 亚洲精品鲁一鲁一区二区三区| 欧美xxx在线观看| 国产欧美欧洲| 91精品影视| 久久九九亚洲综合| 黄色av网址在线| 色天天综合色天天久久| 毛片久久久久久| 国产一区二区三区不卡在线观看| 欧洲精品在线播放| 少妇高潮一区二区三区| 日韩美女写真福利在线观看| 中文日本在线观看| 精品少妇一区二区三区在线播放| 日本在线视频免费| 国产精品丝袜一区| 成人一区二区三区仙踪林| 国产精品入口66mio| 视频在线精品一区| 色妞ww精品视频7777| 日本一区二区三区在线播放| 久久精品视频观看| 亚洲国产另类 国产精品国产免费| 免费看毛片网站| 亚洲色图清纯唯美| 中文字幕在线播放视频| 免费高清成人在线| 欧美综合在线播放| 97精品国产| 国外成人免费视频| 99国内精品久久久久| 97免费视频在线播放| 1769视频在线播放免费观看| 亚洲国产精品久久久久秋霞蜜臀 | 国产精品原创视频| 欧美极品少妇xxxxⅹ裸体艺术| 性xxxxbbbb| 7777精品伊人久久久大香线蕉的| 在线观看精品国产| 一区在线观看视频| 香蕉视频黄色在线观看| 国产精品一区免费在线观看| 99热在线这里只有精品| 午夜国产一区二区| 日本免费高清不卡| 国产在线播放精品| 91情侣偷在线精品国产| 欧美色网在线| 午夜精品久久久久久久男人的天堂 | www.日本在线播放| 亚洲电影影音先锋| 四虎影视永久免费在线观看一区二区三区| 2021年精品国产福利在线| 国产精品高潮呻吟久久av黑人| 9999热视频在线观看| 久久久999精品视频| yw视频在线观看| 亚洲欧美日韩一区在线| 国产小视频一区| 日韩精品中文字幕一区二区三区| 国产一区二区在线视频聊天| 在线精品视频一区二区三四| 在线观看免费国产视频| 亚洲一二三专区| 激情五月婷婷在线| 亚洲人成伊人成综合网小说| 日本美女黄色一级片| 久久久99精品久久| 魔女鞋交玉足榨精调教| av亚洲精华国产精华精华| 丰满熟女人妻一区二区三区| 国产精品亚洲第一区在线暖暖韩国 | 国产乱对白刺激视频不卡 | av福利精品导航| 国产精品果冻传媒| 国产91丝袜在线18| 人妻巨大乳一二三区| 国产乱码精品1区2区3区| 色姑娘综合天天| 国产一区二区三区精品视频| 手机av在线网站| 国产精品一卡二| 日本少妇xxx| 成人中文字幕合集| 在线观看亚洲免费视频| 99视频精品全部免费在线| 中文字幕乱码一区| 91看片淫黄大片一级| 丰满少妇一区二区| 久久久久久亚洲综合| 中字幕一区二区三区乱码| 国产日韩欧美高清在线| 欧美成人短视频| 亚洲欧美另类图片小说| 欧美日韩在线国产| 亚洲成人1区2区| 在线精品免费视| 欧美日韩免费一区二区三区| 国产精品久久久久久久久毛片 | 久久久天堂国产精品| 欧美深夜福利| 久久久久久久久久久福利| 日本欧美在线观看| 红桃视频 国产| 床上的激情91.| 给我看免费高清在线观看| 国产亚洲综合性久久久影院| 亚洲性猛交xxxx乱大交| 国产精品国产三级国产有无不卡 | 欧美一区二区在线| 久久一区二区中文字幕| 欧美 日韩 国产精品| 国产日韩欧美三级| www.精品在线| 成人污视频在线观看| 熟女俱乐部一区二区| 最好看的中文字幕久久| 日本五十路女优| 欧美视频三区在线播放| 午夜精品久久久久久久99老熟妇| 日韩精品极品毛片系列视频| 2017亚洲天堂1024| 69久久夜色精品国产69| 黄色成人在线观看网站| 国产精品高清一区二区三区| 国产成人高清| 欧美国产日韩激情| 美女视频黄久久| 欧美无人区码suv| 亚洲男人电影天堂| 中文字幕免费观看| 欧美成人a∨高清免费观看| 国产原创av在线| 欧美黄色免费网站| 精品国产黄a∨片高清在线| 国产精品播放| 99国产**精品****| 久久婷婷五月综合色国产香蕉| 精品系列免费在线观看| av小说在线观看| 亚洲在线免费播放| 一本一道人人妻人人妻αv| 亚洲精品97久久| 中文字幕中文字幕在线中高清免费版 | 伊人久久男人天堂| 女人高潮被爽到呻吟在线观看| 成人深夜直播免费观看| 教室别恋欧美无删减版| 日韩av新片网| 粉嫩一区二区三区性色av| 欧洲性xxxx| 色综合天天在线| 色网站免费观看| 欧美不卡视频一区发布| 国产91在线播放精品| 农村寡妇一区二区三区| 好看不卡的中文字幕| 三年中文在线观看免费大全中国| 国产欧美中文在线| aaaaaa毛片| 日韩精品欧美激情| heyzo中文字幕在线| 91精品网站| 888久久久| 韩国一区二区在线播放| 国产精品国产自产拍高清av| 亚洲图片欧美日韩| 亚洲品质视频自拍网| yellow在线观看网址| 国产精品日韩一区二区| 欧美午夜精品| 亚洲视频天天射| 一区二区三区免费| 国产黄色大片网站| 免费不卡在线观看av| 日韩欧美中文在线观看| 亚洲精品天堂成人片av在线播放| 国产一区二区不卡在线| 性生交大片免费全黄| 5858s免费视频成人| 一区二区高清不卡| 成人天堂噜噜噜| 欧美激情一区| 亚洲av永久无码精品| 图片区小说区区亚洲影院| 四虎影视2018在线播放alocalhost| 午夜精品久久久久久久久久久久久| 久久porn| 久热免费在线观看| 亚洲国产成人在线| 国产精品久久777777换脸| 欧美理论片在线观看| 亚洲一区 二区| 黄色www网站| 91免费观看视频在线| 波多野结衣日韩| 日韩视频免费在线| 在线一区二区三区视频| www.xxx麻豆| 久久先锋影音av鲁色资源网| 亚洲成人第一网站| 久久精品一区中文字幕| 一区三区自拍| 国产精品宾馆在线精品酒店| 国产香蕉久久精品综合网| 在线观看视频中文字幕| 欧美成在线视频| 天堂网av成人| 性chinese极品按摩| 亚洲一区精品在线| 国产综合视频一区二区三区免费| 国产欧美日韩中文字幕在线| 欧美91大片| 黄色aaa视频| 91精品国产入口| 手机在线观看av| 在线成人性视频| 成人高清在线视频| 中国女人真人一级毛片| 欧美国产日韩一区二区在线观看| 亚洲人成网77777色在线播放| 日韩一级免费片| 午夜视频久久久久久| 91在线视频| 国产呦系列欧美呦日韩呦| 麻豆精品视频在线观看视频| 日本一级黄色录像| 最新中文字幕亚洲| 欧美巨大xxxx| 日本中文字幕在线不卡| 日本二三区不卡| 好久没做在线观看| 综合视频免费看| 国产日韩欧美精品在线| 欧美一区二区黄片| 国产综合香蕉五月婷在线| 先锋a资源在线看亚洲|