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

看完這篇,你就理解數據庫并發控制了

運維 數據庫運維
在介紹并發控制前,首先需要了解事務。數據庫提供了增刪改查等幾種基礎操作,用戶可以靈活地組合這幾種操作,實現復雜的語義。在很多場景下,用戶希望一組操作可以做為一個整體一起生效,這就是事務。

 

[[323145]]

1.數據庫并發控制的作用

1.1 事務的概念

在介紹并發控制前,首先需要了解事務。數據庫提供了增刪改查等幾種基礎操作,用戶可以靈活地組合這幾種操作,實現復雜的語義。在很多場景下,用戶希望一組操作可以做為一個整體一起生效,這就是事務。事務是數據庫狀態變更的基本單元,包含一個或多個操作(例如多條SQL語句)。經典的轉賬事務,就包括三個操作:(1)檢查A賬戶余額是否足夠。(2)如果足夠,從A扣減100塊。(3)B賬戶增加100塊。

事務有個基本特性:這一組操作要么一起生效,要么都不生效,事務執行過程中如遇錯誤,已經執行的操作要全部撤回,這就是事務的原子性。如果失敗發生后,部分生效的事務無法撤回,那數據庫就進入了不一致狀態,與真實世界的事實相左。例如轉賬事務從A賬戶扣款100塊后失敗了,B賬戶還未增加款項,如果A賬戶扣款操作未撤回,這個世界就莫名奇妙丟失了100塊。原子性可以通過記日志(更改前的值)來實現,還有一些數據庫將事務操作緩存在本地,如遇失敗,直接丟棄緩存里的操作。

事務只要提交了,它的結果就不能改變了,即使遇到系統宕機,重啟后數據庫的狀態與宕機前一致,這就是事務的持久性。數據只要存儲非易失存儲介質,宕機就不會導致數據丟失。因此數據庫可以采用以下方法來保證持久性:(1)事務完成前,所有的更改都保證存儲到磁盤上了?;?2)提交完成前,事務的更改信息,以日志的形式存儲在磁盤,重啟過程根據日志恢復出數據庫系統的內存狀態。一般而言,數據庫會選擇方法(2),原因留給讀者思考。

數據庫為了提高資源利用率和事務執行效率、降低響應時間,允許事務并發執行。但是多個事務同時操作同一對象,必然存在沖突,事務的中間狀態可能暴露給其它事務,導致一些事務依據其它事務中間狀態,把錯誤的值寫到數據庫里。需要提供一種機制,保證事務執行不受并發事務的影響,讓用戶感覺,當前仿佛只有自己發起的事務在執行,這就是隔離性。隔離性讓用戶可以專注于單個事務的邏輯,不用考慮并發執行的影響。數據庫通過并發控制機制保證隔離性。由于隔離性對事務的執行順序要求較高,很多數據庫提供了不同選項,用戶可以犧牲一部分隔離性,提升系統性能。這些不同的選項就是事務隔離級別。

數據庫反映的是真實世界,真實世界有很多限制,例如:賬戶之間無論怎么轉賬,總額不會變等現實約束;年齡不能為負值,性別最多只能有男、女、跨性別者三種選項等完整性約束。事務執行,不能打破這些約束,保證事務從一個正確的狀態轉移到另一個正確的狀態,這就是一致性。不同與前三種性質完全由數據庫實現保證,一致性既依賴于數據庫實現(原子性、持久性、隔離性也是為了保證一致性),也依賴于應用端編寫的事務邏輯。

1.2 事務并發控制如何保證隔離性

為了保證隔離性,一種方式是所有事務串行執行,讓事務之間不互相干擾。但是串行執行效率非常低,為了增大吞吐,減小響應時間,數據庫通常允許多個事務同時執行。因此并發控制模塊需要保證:事務并發執行的效果,與事務串行執行的效果完全相同(serializability),以達到隔離性的要求。

為了方便描述并發控制如何保證隔離性,我們簡化事務模型。事務是由一個或多個操作組成,所有的操作最終都可以拆分為一系列讀和寫。一批同時發生的事務,所有讀、寫的一種執行順序,被定義為一個schedule,例如:

  1. T1、T2同時執行,一個可能的schedule: T1.read(A),T2.read(B),T1.write(A),T1.read(B),T2.write(A) 

如果并發事務執行的schedule效果與串行執行的schedule(serial schedule)等價,就可以滿足serializability。一個schedule不斷調換讀寫操作的順序,總會變成一個serializable schedule,但是有的調換可能導致事務執行的結果不一樣。一個schedule中,相鄰的兩個操作調換位置導致事務結果變化,那么這兩個操作就是沖突的。沖突需要同時滿足以下條件:

1.這兩個操作來自不同事務

2.至少有一個是寫操作

3.操作對象相同

因此常見的沖突包括:

  • 讀寫沖突。事務先A讀取某行數據、事務B后修改該行數據,和事務B先修改某行事務、事務A后讀該行記錄兩種schedule。事務A讀到的結果不同。這種沖突可能會導致不可重復讀異象和臟讀異象。
  • 寫讀沖突。與讀寫沖突產生的原因相同。這種沖突可能會導致臟讀異象。
  • 寫寫沖突。兩個操作先后寫一個對象,后一個操作的結果決定了寫入的最終結果。這種沖突可能會導致更新丟失異象。

數據庫只要保證,并發事務的schedule,保持沖突操作的執行順序不變,只調換不沖突的操作,可以成為serial schedule,就可以認為它們等價。這種等價判斷方式叫做conflict equivalent:兩個schedule的沖突操作順序相同。例如下圖的例子,T1 write(A)與T3 read(A)沖突,且T1先于T3發生。T1 read(B)和 T2 write(B)沖突,且T2先于T1,因此左圖事務執行的schedule,與T2,T1,T3串行執行的serial schedule(右圖) 等價。左圖的執行順序滿足conflict serializablity。

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

再分析一個反例:T1 read(A)與T2 write(A)沖突且T1先于T2,T2 write(A)與T2 write(A)沖突且T2先于T1。下圖這個個schedule無法與任何一個serial schedule等價,是一個不滿足conflict serializablity的執行順序,會造成更新丟失的異象。

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

總體來說,serializability是比較嚴格的要求,為了提高數據庫系統的并發性能,很多用戶愿意去降低隔離性的要求以尋求更好的性能。數據庫系統往往會實現多種隔離級別,供用戶靈活選擇,關于事務隔離級別,可以參看這篇文章。

并發控制的要求清楚了,如何實現呢?后文將依據沖突檢測的樂觀程度,一一介紹并發控制常見的實現方法。

2.基于兩階段鎖的并發控制

2.1 2PL

既然要保證操作按正確的順序執行,最容易想到的方法就是加鎖保護訪問對象。數據庫系統的鎖管理器模塊,專門負責給訪問對象加鎖和釋放鎖,保證只有持有鎖的事務,才能操作相應的對象。鎖可以分為兩類:S-Lock和X-Lock,S-Lock是讀請求使用的共享鎖,X-Lock是寫請求使用的排他鎖。它們的兼容性如下:操作同一個對象,只有兩個讀請求相互兼容,可以同時執行,讀寫和寫寫操作都會因為鎖沖突而串行執行。

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

2PL(Two-phase locking)是數據庫最常見的基于鎖的并發控制協議,顧名思義,它包含兩個階段:

  • 階段一:Growing,事務向鎖管理器請求它需要的所有鎖(存在加鎖失敗的可能)。
  • 階段二:Shrinking,事務釋放Growing階段獲取的鎖,不允許再請求新鎖。

為什么加鎖和放鎖要涇渭分明地分為兩個階段呢?

2PL并發控制目的是為了達到serializable,如果并發控制不事先將所有需要的鎖申請好,而是釋放鎖后,還允許再次申請鎖,可能出現事務內兩次操作同一對象之間,其它事務修改這一對象(如下圖所示),進而無法達到conflict serializable,出現不一致的現象(下面的例子是lost update)。

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

2PL可以保證conflict serializability,因為事務必須拿到所有需要的鎖才能執行。例如正在執行的事務A與事務B沖突,事務B要么已經執行完,要么還在等待。因此那些沖突操作的執行順序,與BA或AB串行執行時沖突操作執行順序一致。

所以,數據庫只要采用2PL就能保證一致性和隔離性了嗎?來看一下這個例子:

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

以上執行順序是符合2PL的,但T2讀到了未提交的數據。如果此時T1回滾,則會引發級聯回滾(T1的更改,不能被任何事務看到)。因此,數據庫往往使用的是加強版的S(trong)S(trict)2PL,它相較于2PL有一點不同:shrinking階段,只能在事務結束后再釋放鎖,完全杜絕了事務未提交的數據被讀到。

2.2 死鎖處理

并發事務加鎖放鎖必然繞不開一個問題--死鎖:事務1持有A鎖等B鎖,事務2持有B鎖等A鎖。目前解決死鎖問題有兩種方案:

  • Deadlock Detection:

數據庫系統根據waits-for圖記錄事務的等待關系,其中點代表事務,有向邊代表事務在等待另一個事務放鎖。當waits-for圖出現環時,代表死鎖出現了。系統后臺會定時檢測waits-for圖,如果發現環,則需要選擇一個合適的事務abort。

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

  • Deadlock Prevention:

當事務去請求一個已經被持有的鎖時,數據庫系統為防止死鎖,殺死其中一個事務(一般持續越久的事務,保留的優先級越高)。這種防患于未然的方法不需要waits-for圖,但提高了事務被殺死的比率。

2.3 意向鎖

如果只有行鎖,那么事務要更新一億條記錄,需要獲取一億個行鎖,將占用大量的內存資源。我們知道鎖是用來保護數據庫內部訪問對象的,這些對象根據大小可能是:屬性(Attribute)、記錄(Tuple)、頁面(Page)、表(Table),相應的鎖可分為行鎖、頁面鎖、表鎖(沒人實現屬性鎖,對于OLTP數據庫,最小的操作單元是行)。對于事務來講,獲得最少量的鎖當然是最好的,比如更新一億條記錄,或許加一個表鎖就足夠了。

層次越高的鎖(如表鎖),可以有效減少對資源的占用,顯著減少鎖檢查的次數,但會嚴重限制并發。層次越低的鎖(如行鎖),有利于并發執行,但在事務請求對象多的情況下,需要大量的鎖檢查。數據庫系統為了解決高層次鎖限制并發的問題,引入了意向(Intention)鎖的概念:

  • Intention-Shared (IS):表明其內部一個或多個對象被S-Lock保護,例如某表加IS,表中至少一行被S-Lock保護。
  • Intention-Exclusive (IX):表明其內部一個或多個對象被X-Lock保護。例如某表加IX,表中至少一行被X-Lock保護。
  • Shared+Intention-Exclusive (SIX):表明內部至少一個對象被X-Lock保護,并且自身被S-Lock保護。例如某個操作要全表掃描,并更改表中幾行,可以給表加SIX。讀者可以思考一下,為啥沒有XIX或XIS

意向鎖和普通鎖的兼容關系如下所示:

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

意向鎖的好處在于:當表加了IX,意味著表中有行正在修改。(1)這時對表發起DDL操作,需要請求表的X鎖,那么看到表持有IX就直接等待了,而不用逐個檢查表內的行是否持有行鎖,有效減少了檢查開銷。(2)這時有別的讀寫事務過來,由于表加的是IX而非X,并不會阻止對行的讀寫請求(先在表上加IX,再去記錄上加S/X),事務如果沒有涉及已經加了X鎖的行,則可以正常執行,增大了系統的并發度。

3.基于Timing Order(T/O)的并發控制

為每個事務分配timestamp,并以此決定事務執行順序。當事務1的timestamp小于事務2時,數據庫系統要保證事務1先于事務2執行。timestamp分配的方式包括:(1)物理時鐘;(2)邏輯時鐘;(2)混合時鐘。

3.1 Basic T/O

基于T/O的并發控制,讀寫不需加鎖, 每行記錄都標記了最后修改和讀取它的事務的timestamp。當事務的timestamp小于記錄的timestamp時(不能讀到”未來的”數據),需要abort后重新執行。假設記錄X上標記了讀寫兩個timestamp:WTS(X)和RTS(X),事務的timestamp為TTS,可見性判斷如下:

讀:

  • TTS < WTS(X):該對象對該事務不可見,abort事務,取一個新timestamp重新開始。
  • TTS > WTS(X):該對象對事務可見,更新RTS(X) = max(TTS,RTS(X))。為了滿足repeatable read,事務復制X的值。
  • 為了防止讀到臟數據,可以在記錄上做特殊標記,讀請求需等待事務提交后再去讀。

寫:

  • TTS < WTS(X) || TTS < RTS(X):abort事務,重新開始。
  • TTS > WTS(X) && TTS > RTS(X): 事務更新X,WTS(X) = TTS。

這里之所以要求TTS > RTS(X),是為了防止如下情況:讀請求的時間戳為rts,已經讀過X,時間戳設為RTS(X)=rts,如果新事務的TTS < RTS(X),并且更新成功,則rts讀請求再來讀一次就看到新的更改了,違反了repeatable read,因此這是為了避免讀寫沖突。記錄上存儲了最后的讀寫時間,可以保證conflict serializable

這種方式也能避免write skew,例如:初始狀態,X和Y兩條記錄,X=-3,Y=5,X+Y >0,RTS(X)=RTS(Y)=WTS(X)=WTS(Y)=0。事務T1的時間戳為TTS1=1,事務T2的時間戳TTS2=2。

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

它缺陷包括:

  • 長事務容易餓死,因為長事務的timestamp偏小,大概率會在執行一段時間后讀到更新的數據,導致abort。
  • 讀操作也會產生寫(寫RTS)。

4.基于Validation(OCC)的并發控制

執行過程中,每個事務維護自己的寫操作(Basic T/O在事務執行過程中寫就將數據寫入DB)和相應的RTS/WTS,提交時判斷自己的更改是否和數據庫中已存在的數據沖突,如果不沖突才寫入DB。OCC分為三個階段:

  • Read & Write Phase:即讀寫階段,事務維護讀的結果和即將提交的更改,以及寫入記錄的RTS和WTS。
  • Validation Phase:檢查事務是否與數據庫中的數據沖突。
  • Write Phase:不沖突就寫入,沖突就abort,restart。

Read & Write Phase結束,進入Validation Phase相當于事務準備完成,進入提交階段了,進入Validation Phase的時間被選做記錄行的時間戳,來定序。不用事務開始時間是因為:事務執行時間可能較長,導致后開始的事務可能先提交,這會加大事務沖突的概率,較小時間戳的事務后寫入數據庫,肯定會abort。

Validation過程

假設當前只有兩個事務T1和T2,并修改了相同數據行,T1的時間戳 < T2的時間戳(即validation順序:T1 < T2,對用戶而言,T1先發生于T2),則有如下情況:

(1)T1在validate階段,T2還在Read & Write Phase。此時只要T1和T2已經發生的讀寫沒有沖突,就可以提交。

  • 如果WS(T1) ∩ (RS(T2) ∪ WS(T2)) = ∅,說明T2和T1寫的記錄無沖突,validation通過,可以寫入。
  • 否則,T2與T1之間存在讀寫沖突或寫寫沖突,T1需要回滾。讀寫沖突:T2讀到了T1寫之前的版本,T1提交后,它可能讀到T1寫的版本,不可重復讀。寫寫沖突:T2有可能在舊版本基礎上更新,再次寫入,造成T1的更新丟失。

(2)T1完成validate階段,進入write階段直到提交完成,這已經是不可逆的了。T2在T1進入write phase之前的讀寫,肯定和T1的操作不沖突(因為T1 validation通過了)。T2之后繼續的讀寫操作,有可能沖突與T1要提交的操作,因此T2進入validate階段:

如果WS(T1) ∩ RS(T2)= ∅,說明T2沒讀到T1寫的記錄,validation通過,T2可以寫入。(為什么不驗證WS(T2)了呢?WS(T1)已經提交了,且它的時間戳小于WS(T2),WS(T2)里之前的一部分肯定沒有沖突,之后的一部分,因為沒有讀過T1的寫入的對象,寫進去也沒問題,不會覆蓋WS(T1)的寫)

否則,T2與T1之間存在讀寫沖突和寫寫沖突,T2需要回滾。讀寫沖突:T2讀到了T1寫之前的版本,T1提交后,它可能讀到T1寫的版本,不可重復讀。寫寫沖突:T2有可能在舊版本基礎上更新,再次寫入,造成T1的更新丟失。

5.基于MVCC的并發控制

數據庫維護了一條記錄的多個物理版本。事務寫入時,創建寫入數據的新版本,讀請求依據事務/語句開始時的快照信息,獲取當時已經存在的最新版本數據。它帶來的最直接的好處是:寫不阻塞讀,讀也不阻塞寫,讀請求永遠不會因此沖突失敗(例如單版本T/O)或者等待(例如單版本2PL)。對數據庫請求來說,讀請求往往多于寫請求。主流的數據庫幾乎都采用了這項優化技術。

MVCC是讀和寫請求的優化技術,沒有完全解決數據庫并發問題,它需要與前述的幾種并發控制技術組合,才能提供完整的并發控制能力。常見的并發控制技術種類包括:MV-2PL,MV-T/O和MV-OCC,它們的特點如下表:

 

建議收藏!看完這篇,你就理解數據庫并發控制了(純干貨)

 

MVCC還有兩個關鍵點需要考慮:多版本數據的存儲和多余多版本數據的回收。

多版本數據存儲方式,大致可以分為兩類:(1)Append only的方式,新舊版本存儲在同一個表空間,例如基于LSM-Tree的存儲引擎。(2)主表空間記錄最新版本數據,前鏡像記錄在其它表空間或數據段,例如InnoDB的多版本信息記錄在undo log。多版本數據回收又稱為垃圾回收(GC),那些沒有機會再被任何讀請求獲取的舊版本記錄,應該被及時刪除。

6.總結

本文依據沖突處理的時機(樂觀程度),依次介紹了基于鎖(在事務開始前預防沖突)、基于T/O(在事務執行中判斷沖突)和基于Validation(在事務提交時驗證沖突)的事務并發控制機制。不同的實現適用于不同的workload,并發沖突小的workload,當然適合更樂觀的并發控制方式。而MVCC可以解決只讀事務和讀寫事務之間相互阻塞的問題,提高了事務的并發讀,被大多數主流數據庫系統采用。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-03-27 09:06:25

vuexActionsMutations

2025-02-08 12:05:44

MySQLMyISAMInnoDB

2020-01-09 15:30:32

微服務架構互聯網

2020-02-08 16:46:29

微服務架構復雜

2022-09-02 19:10:46

高并發架構系統

2010-08-18 09:00:38

數據庫

2017-02-09 19:45:07

Linux系統Linux 發行版

2025-03-28 08:53:51

2021-06-16 00:57:16

JVM加載機制

2024-05-31 08:00:00

2021-09-06 07:58:47

鏈表數據結構

2023-10-08 08:41:04

JavaPython編程語言

2011-04-19 11:02:57

數據庫分頁

2018-02-08 18:16:39

數據庫MySQL鎖定機制

2022-05-08 23:05:38

Route-Poli路由策略

2021-08-26 11:10:42

架構運維技術

2015-12-02 18:11:06

百度地圖/地圖軟件

2020-01-06 08:40:11

阿里場景服務

2020-12-09 08:35:45

Shell腳本語法

2020-07-20 10:20:30

this前端代碼
點贊
收藏

51CTO技術棧公眾號

五月婷婷综合在线观看| 日韩激情久久| 一级黄色免费网站| 成人羞羞在线观看网站| 日韩欧美国产系列| 日本免费一级视频| 国产激情在线观看| 99re66热这里只有精品3直播| 国产精品美女www| 国产日产精品一区二区三区的介绍| 99ri日韩精品视频| 欧美亚洲尤物久久| r级无码视频在线观看| 国产黄在线观看免费观看不卡| 国产一区二区三区高清播放| 2025国产精品视频| 久久久久亚洲av片无码| 亚瑟一区二区三区四区| 欧美一区二区三区免费在线看| 欧美性大战久久久久xxx| 伊人影院在线视频| 国产精品视频看| 精品视频高清无人区区二区三区| 97人妻精品一区二区三区软件| 国产精品综合| 欧美激情xxxx| 国产免费美女视频| 操欧美老女人| 精品亚洲一区二区三区在线观看| a级大片免费看| 69堂免费精品视频在线播放| 精品国产成人av| 日韩成人三级视频| 黄在线免费观看| 久久久不卡影院| 国产在线精品一区二区中文| wwwav在线播放| 奇米777第四色| 黄色一级片在线观看| 久久精品视频一区| 精品一区二区三区视频日产| xxxx国产精品| 国产美女精品人人做人人爽| 国产精品日韩久久久久| 国产99免费视频| 免费在线日韩av| 91精品国产高清久久久久久久久| 国产亚洲成人av| 国产一区二区三区四区三区四| 久久影院免费观看| 国产suv精品一区二区68| 精品不卡一区| 国产一区二区三区网站| 美女洗澡无遮挡| 久操精品在线| 亚洲人成自拍网站| 在线视频第一页| 最新精品国偷自产在线| 亚洲欧美国产精品va在线观看| 中文字幕一区二区三区人妻不卡| 性欧美lx╳lx╳| 亚洲女人天堂av| 国产精品扒开腿做爽爽| 日韩激情在线| 久久精品视频在线播放| 欧美成人精品欧美一| 欧美日韩三级电影在线| 97精品久久久| 无码人妻精品一区二区三区不卡| 日本不卡123| 国产欧美日韩精品丝袜高跟鞋| 亚洲综合视频在线播放| 国产乱子伦一区二区三区国色天香| 成人免费自拍视频| 亚洲免费不卡视频| 不卡av在线网| 日韩高清国产一区在线观看| 米奇777四色精品人人爽| 依依成人精品视频| 久久久久久久久久久99| 三上悠亚国产精品一区二区三区| 欧美性受极品xxxx喷水| 久久综合在线观看| 欧美精品中文字幕亚洲专区| 亚洲日韩欧美视频一区| 熟女少妇a性色生活片毛片| 国产精品jizz在线观看美国| 97超碰国产精品女人人人爽| 狠狠狠狠狠狠狠| 韩国v欧美v日本v亚洲v| 国产美女精品久久久| 久久电影中文字幕| 一区二区三区资源| 日韩欧美精品在线观看视频| www.久久久.com| 亚洲国产精久久久久久| 中文字幕黄色网址| 国内自拍一区| 国产精品一区二区久久精品| 欧美综合视频在线| 国产精品成人免费在线| 99视频在线免费播放| 国产精品天堂蜜av在线播放| 精品国产成人系列| 国产又粗又猛又爽又黄的视频四季 | 五月婷中文字幕| 国产精品国产三级国产a| 免费超爽大片黄| www.久久99| 国产亚洲欧洲高清| 日产精品久久久久久久| 精品综合久久久久久8888| 乱色588欧美| 污污影院在线观看| 欧美区在线观看| 无码人妻精品一区二区中文| 亚洲激情专区| 91香蕉亚洲精品| 国产免费a∨片在线观看不卡| 亚洲一区二区三区精品在线| jizzzz日本| 国产一区二区三区站长工具| 性欧美视频videos6一9| 精品国产av 无码一区二区三区 | 国产成人精品免费看| 亚洲国产高清国产精品| 欧洲亚洲两性| 日韩成人在线免费观看| 精品亚洲永久免费| 国产精品资源站在线| 亚洲人久久久| 韩国女主播一区二区| 亚洲欧美日韩成人| 毛片视频网站在线观看| www.成人网.com| av一区二区三区免费观看| 欧美午夜在线播放| 超薄丝袜一区二区| 国产叼嘿视频在线观看| 亚洲猫色日本管| 国产欧美精品一二三| 婷婷综合亚洲| 国产在线视频91| 免费看a在线观看| 678五月天丁香亚洲综合网| 国产在线免费av| 久久精品国产免费看久久精品| 日韩精品久久久免费观看 | 91精品国产高清久久久久久91裸体 | 午夜一区二区三区四区| 欧美高清在线视频| www.精品在线| 亚洲国产精品综合久久久| 成人免费在线视频网址| 婷婷色在线播放| 亚洲成人网av| 五月天综合激情| 久久伊99综合婷婷久久伊| 亚洲乱码国产一区三区| 日韩一区二区三区免费播放| 国产日韩欧美成人| 成人免费网址| 精品剧情在线观看| 日韩免费视频网站| 久久精品一二三| 亚洲这里只有精品| 欧美在线亚洲综合一区| 国产无套精品一区二区| 成人欧美magnet| 自拍偷拍亚洲精品| 亚洲经典一区二区三区| 精品欧美一区二区三区| 日韩精品无码一区二区三区久久久| 日本在线不卡一区| 人妻无码一区二区三区四区| 美女av一区| 国产精品免费视频xxxx| 中文字幕在线观看播放| 日韩av在线网站| 在线观看视频二区| 亚洲一区二区三区四区在线免费观看 | 日韩电影免费观看高清完整版在线观看| 久久精品99久久香蕉国产色戒| 亚洲国产精品无码久久| 色哟哟亚洲精品| 中文字幕在线有码| 91丝袜国产在线播放| 亚洲免费黄色网| 亚洲免费高清| 国产a级片免费看| 欧美日韩一本| 91精品中文在线| 热三久草你在线| 久久精品小视频| 男人的天堂av高清在线| 日韩三级视频在线观看| 黄色大全在线观看| 亚洲不卡av一区二区三区| 欧美巨胸大乳hitomi| eeuss国产一区二区三区| 在线观看av网页| 中国女人久久久| 日本一级黄视频| 日本久久综合| 蜜桃传媒视频麻豆一区| 午夜精品在线| 成人在线国产精品| 欧美日韩亚洲国产| 欧美亚洲日本网站| 欧美草逼视频| 日韩在线观看免费| 可以直接在线观看的av| 亚洲白拍色综合图区| 国产人妻精品一区二区三| 日本精品视频一区二区三区| 黄色小视频在线免费看| 亚洲欧美中日韩| 四季av中文字幕| 久久人人爽人人爽| 日韩综合第一页| 国产成人一区二区精品非洲| 伊人影院综合在线| 蜜臀va亚洲va欧美va天堂| 日韩免费毛片视频| 一区二区日韩免费看| 国产欧美精品aaaaaa片| 欧美黄在线观看| 91xxx视频| 亚洲成人tv| 一级一片免费播放| 日韩成人影院| 亚洲欧美日韩另类精品一区二区三区 | 日韩精品免费在线视频| 少妇av在线播放| 精品粉嫩超白一线天av| 精品人妻无码一区二区色欲产成人| 欧美男生操女生| 一起草av在线| 制服丝袜在线91| 国产精品伊人久久| 91精品国产色综合久久不卡蜜臀 | 国产精品久久久久久99| 精品日韩美女的视频高清| 日本网站在线免费观看| 亚洲成av人片一区二区梦乃| 国产精彩视频在线观看| 午夜久久电影网| 日韩三级视频在线| 激情成人中文字幕| 日本黄色中文字幕| 欧美午夜在线观看| 国产一区二区视频免费观看 | 国产精品视频不卡| 欧美男男gaygay1069| 91精品久久久久久久| 久久国产精品美女| 国产精品一区二区欧美黑人喷潮水| 美女福利一区| 日本精品二区| 99久久久久| 福利在线一区二区| 亚洲欧美日韩国产一区二区| 成人在线看视频| 日本视频中文字幕一区二区三区| 日日噜噜夜夜狠狠| 国产精品一二三四五| 亚洲激情 欧美| 国产午夜一区二区三区| 一本色道久久88| 亚洲自拍偷拍av| 中文在线第一页| 欧美性大战久久久久久久| 国产美女明星三级做爰| 337p日本欧洲亚洲大胆精品| 国产三级在线免费| 久久精品国产精品| 大黄网站在线观看| 国产精品高潮呻吟久久av无限| 亚洲我射av| 精品蜜桃传媒| 999成人网| 男女激情无遮挡| 美国欧美日韩国产在线播放| 老熟女高潮一区二区三区| 2021久久国产精品不只是精品| 欧美视频一区二区在线| 午夜精品久久久久久久99樱桃| 久久久久久无码精品大片| 日韩视频在线一区二区| 国内精品一区视频| 欧美巨大黑人极品精男| 日韩欧美看国产| 国产精品xxxx| 色999日韩| 欧美精品久久久久久久免费| 国精品**一区二区三区在线蜜桃 | 中文字幕五月欧美| 久久草视频在线| 欧美电影影音先锋| 欧美777四色影视在线| 欧美成人高清视频| 国产精品videossex撒尿| 国产视频一区二区三区四区| 欧美电影三区| 国产成人精品视频ⅴa片软件竹菊| 国产成人精品免费| 日本不卡一二区| 欧洲日韩一区二区三区| 香蕉久久国产av一区二区| 久久精品国产亚洲精品| 欧美成人app| 蜜桃av噜噜一区二区三区| 一区精品久久| 日本r级电影在线观看| 国产精品全国免费观看高清| 日韩 欧美 中文| 亚洲白虎美女被爆操| 18加网站在线| 91热福利电影| 色男人天堂综合再现| 国模杨依粉嫩蝴蝶150p| 成人动漫精品一区二区| 激情综合五月网| 91精品国产综合久久蜜臀| 五月香视频在线观看| 国产精品6699| 精品99久久| 狠狠操精品视频| 91丝袜呻吟高潮美腿白嫩在线观看| 久久久久亚洲av成人片| 欧美一区二区三区小说| 三区四区在线视频| 国产欧美日韩精品丝袜高跟鞋| 精品国产视频| 一区二区三区视频网| 国产精品免费久久久久| 一区二区自拍偷拍| 一道本无吗dⅴd在线播放一区 | 国产cdts系列另类在线观看| 91精品国产综合久久香蕉的用户体验| 欧美综合在线视频观看| 嫩草影院国产精品| 国产精品丝袜91| 亚洲视频在线免费播放| 日韩有码在线观看| 免费一区二区三区在线视频| 国产免费内射又粗又爽密桃视频 | 日韩乱码人妻无码中文字幕久久| 欧美日韩国产色| 黄色在线网站| 国产精品美女免费视频| 欧洲乱码伦视频免费| 色婷婷一区二区三区av免费看| 日韩美女啊v在线免费观看| 国产精品久久777777换脸| 久久av红桃一区二区小说| 天堂av一区| 97国产精东麻豆人妻电影| 久久久蜜臀国产一区二区| 日韩国产亚洲欧美| 久久精品精品电影网| 精品视频一区二区三区| 九色自拍视频在线观看| 国产日本欧美一区二区| 亚洲影院一区二区三区| 欧美人与性动交a欧美精品| 九九热播视频在线精品6| 91蝌蚪视频在线观看| 亚洲视频你懂的| 狠狠躁日日躁夜夜躁av| 国产suv精品一区二区| 91久久国产| 妖精视频一区二区| 欧洲一区在线电影| 在线观看操人| 久久99精品久久久久久三级| 日本va欧美va精品| 精品99在线观看| 日韩久久午夜影院| 99精品女人在线观看免费视频| 欧美亚洲色图视频| 欧美激情一区二区三区不卡| 国产三区在线播放| 秋霞av国产精品一区| 91精品天堂福利在线观看| 国产老熟女伦老熟妇露脸| 欧美亚日韩国产aⅴ精品中极品| 青春草免费在线视频| 区一区二区三区中文字幕| 国产麻豆成人精品| 久久亚洲精品石原莉奈| 久久99精品久久久久久噜噜| 自拍欧美一区| 亚洲欧美日韩中文字幕在线观看| 欧美午夜激情小视频| 性xxxfreexxxx性欧美| 色一情一乱一伦一区二区三区 | 中文在线资源| 成人区一区二区| 国产精品欧美精品|