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

CMU15-445 數(shù)據(jù)庫系統(tǒng)播客:深入解析數(shù)據(jù)庫并發(fā)控制 - 兩階段鎖(2PL)

數(shù)據(jù)庫 其他數(shù)據(jù)庫
本文將深入探討實(shí)現(xiàn)隔離性的經(jīng)典協(xié)議—— 兩階段鎖(Two-Phase Locking, 2PL) 。我們將從最基本的問題出發(fā),層層遞進(jìn),揭示2PL的工作原理、它面臨的挑戰(zhàn)以及在現(xiàn)代數(shù)據(jù)庫系統(tǒng)(如 MySQL 和 PostgreSQL)中的實(shí)際應(yīng)用。

在構(gòu)建任何多用戶應(yīng)用程序時(shí),數(shù)據(jù)庫的并發(fā)控制都是一個(gè)無法回避的核心問題。我們?nèi)绾卧试S多個(gè)用戶同時(shí)讀寫數(shù)據(jù),同時(shí)又能保證數(shù)據(jù)的完整性和一致性?這正是數(shù)據(jù)庫事務(wù)隔離性(Isolation)所要解決的難題。

本文將深入探討實(shí)現(xiàn)隔離性的經(jīng)典協(xié)議—— 兩階段鎖(Two-Phase Locking, 2PL) 。我們將從最基本的問題出發(fā),層層遞進(jìn),揭示2PL的工作原理、它面臨的挑戰(zhàn)以及在現(xiàn)代數(shù)據(jù)庫系統(tǒng)(如 MySQL 和 PostgreSQL)中的實(shí)際應(yīng)用。

問題的起點(diǎn):為什么不能“隨用隨放”鎖?

一個(gè)很自然的想法是:當(dāng)一個(gè)事務(wù)需要訪問某個(gè)數(shù)據(jù)時(shí),就給它加上鎖;用完之后,立刻釋放鎖,讓其他事務(wù)可以繼續(xù)使用。這種策略看似高效,但卻隱藏著巨大的風(fēng)險(xiǎn)。

讓我們看一個(gè)經(jīng)典的例子—— 不可重復(fù)讀(Unrepeatable Read) :

  1. 事務(wù) T1 讀取賬戶 A 的余額為 100 元,并對(duì)其加上鎖。
  2. T1 釋放了對(duì) A 的鎖。
  3. 此時(shí),事務(wù) T2 介入,它也讀取賬戶 A 的余額,并將其修改為 200 元后提交。
  4. 隨后,T1 因?yàn)闃I(yè)務(wù)需要, 再次讀取 賬戶 A 的余額,卻發(fā)現(xiàn)余額變成了 200 元。

對(duì)于 T1 而言,在同一個(gè)事務(wù)中兩次讀取同一數(shù)據(jù),得到的結(jié)果卻不一致。這破壞了事務(wù)的隔離性,可能導(dǎo)致嚴(yán)重的業(yè)務(wù)邏輯錯(cuò)誤。根本原因在于,我們 無法預(yù)知一個(gè)事務(wù)未來的所有操作 。T1 在釋放鎖時(shí),并不知道自己未來是否還會(huì)再次訪問該數(shù)據(jù)。

為了在這種“未來未知”的動(dòng)態(tài)場景下保證隔離性,我們需要一個(gè)更嚴(yán)謹(jǐn)?shù)牟l(fā)控制協(xié)議。兩階段鎖(2PL)應(yīng)運(yùn)而生,它是一種經(jīng)典的 悲觀并發(fā)控制 方法,其核心思想是“先鎖定,再操作”。

兩階段鎖(2PL)的核心思想

2PL 協(xié)議非常直觀,它規(guī)定了事務(wù)在獲取和釋放鎖時(shí)必須遵守的一個(gè)簡單規(guī)則。在了解規(guī)則之前,我們先明確鎖的類型和對(duì)象。

鎖的類型

2PL 主要使用兩種基本鎖:

  • 共享鎖(Shared Lock, S-LOCK) :用于 讀 操作。多個(gè)事務(wù)可以同時(shí)持有同一個(gè)數(shù)據(jù)對(duì)象的共享鎖。可以把它理解為“大家可以一起讀”。
  • 排他鎖(Exclusive Lock, X-LOCK) :用于 寫 操作。一旦某個(gè)事務(wù)持有了數(shù)據(jù)對(duì)象的排他鎖,其他任何事務(wù)都不能再對(duì)該對(duì)象施加任何鎖(無論是 S 鎖還是 X 鎖)。可以理解為“我正在寫,誰都別動(dòng)”。

它們的兼容關(guān)系如下矩陣所示:


S-LOCK

X-LOCK

S-LOCK

兼容

不兼容

X-LOCK

不兼容

不兼容

兩個(gè)階段(The Two Phases)

2PL 的精髓在于,它將一個(gè)事務(wù)的生命周期嚴(yán)格劃分為兩個(gè)階段:

增長階段(Growing Phase)

  • 在此階段,事務(wù)可以 不斷地請求和獲取 它所需要的鎖。
  • 事務(wù)向數(shù)據(jù)庫的 鎖管理器(Lock Manager) 發(fā)送鎖請求。鎖管理器會(huì)根據(jù)鎖的兼容性矩陣來決定是立即授予鎖,還是讓事務(wù)阻塞等待。
  • 在此階段,事務(wù)絕對(duì)不能釋放任何鎖。

收縮階段(Shrinking Phase)

  • 當(dāng)事務(wù) 釋放了它的第一個(gè)鎖 時(shí),它就立即進(jìn)入收縮階段。
  • 一旦進(jìn)入此階段,事務(wù)就只能釋放已經(jīng)持有的鎖,而不能再請求任何新的鎖。

正是這個(gè)“先增長、后收縮”的規(guī)定,保證了由 2PL 管理的事務(wù)調(diào)度是 沖突可串行化(Conflict Serializable) 的。這意味著,盡管事務(wù)在并發(fā)執(zhí)行,其最終效果等同于以某種順序串行執(zhí)行,從而保證了數(shù)據(jù)的一致性。

兩階段鎖例子

為了更具體地理解這個(gè)過程,讓我們通過一個(gè)銀行轉(zhuǎn)賬的例子來逐步分解這兩個(gè)階段,并回答 “鎖何時(shí)釋放?” 以及 “階段何時(shí)轉(zhuǎn)換?” 這兩個(gè)核心問題。

場景設(shè)定:

事務(wù) T1 需要從賬戶 A 轉(zhuǎn)賬 50 元到賬戶 B。

整個(gè)過程如下:

第一階段:增長階段(Growing Phase)

事務(wù) T1 開始執(zhí)行,它的目標(biāo)是不斷獲取它完成任務(wù)所需的所有鎖。

T1: BEGIN TRANSACTION;

  • 事務(wù)開始。

T1: LOCK-X(A); // 請求對(duì) A 的排他鎖

  • T1 的第一個(gè)操作是修改賬戶 A。它向鎖管理器請求對(duì) A 的排他鎖(X-Lock)。
  • 鎖管理器授予該鎖。
  • 此時(shí),T1 正式進(jìn)入增長階段。 它只持有 LOCK-X(A)。

T1: READ(A); WRITE(A);

  • T1 讀取 A 的余額,減去 50 元,然后將新余額寫回。在整個(gè)操作期間,它都持有 A 的鎖。

T1: LOCK-X(B); // 請求對(duì) B 的排他鎖

  • 接下來,T1 需要修改賬戶 B。它向鎖管理器請求對(duì) B 的排他鎖。
  • 鎖管理器授予該鎖。
  • T1 仍然處于增長階段,因?yàn)樗栽讷@取新的鎖,并且沒有釋放任何已有的鎖。此刻,T1 同時(shí)持有 LOCK-X(A) 和 LOCK-X(B)。

T1: READ(B); WRITE(B);

  • T1 讀取 B 的余額,加上 50 元,然后將新余額寫回。

轉(zhuǎn)折點(diǎn):從增長階段到收縮階段

現(xiàn)在,T1 已經(jīng)完成了對(duì) A 和 B 的所有修改。它可以開始釋放鎖了。

T1: UNLOCK(A); // 釋放對(duì) A 的鎖

  • 這是整個(gè)過程最關(guān)鍵的轉(zhuǎn)折點(diǎn)!
  • 當(dāng) T1 執(zhí)行 UNLOCK(A),釋放它持有的第一個(gè)鎖時(shí):
  • T1 的增長階段(Growing Phase)立即結(jié)束。
  • T1 的收縮階段(Shrinking Phase)立即開始。

第二階段:收縮階段(Shrinking Phase)

一旦進(jìn)入此階段,T1 的行為將受到嚴(yán)格限制。

  • 核心規(guī)則生效 :從現(xiàn)在起,T1 絕對(duì)不能再請求任何新的鎖 。如果此時(shí)業(yè)務(wù)邏輯突然要求 T1 去檢查另一個(gè)賬戶 C 的狀態(tài)(需要獲取 LOCK-S(C)),根據(jù) 2PL 協(xié)議,該請求將被拒絕,T1 必須中止。這就是 2PL 保證可串行性的核心機(jī)制。

T1: UNLOCK(B); // 釋放對(duì) B 的鎖

  • T1 繼續(xù)處于收縮階段,它釋放了持有的最后一個(gè)鎖。

T1: COMMIT;

  • 事務(wù)提交,所有修改永久生效。

通過這個(gè)例子,我們可以清晰地回答之前的問題:

增長階段何時(shí)結(jié)束?

  • 在事務(wù)釋放其持有的第一個(gè)鎖的瞬間結(jié)束。在我們的例子中,是執(zhí)行 UNLOCK(A) 的那一刻。

收縮階段何時(shí)開始?

  • 與增長階段結(jié)束是同一時(shí)刻,即釋放第一個(gè)鎖時(shí)立刻開始。

鎖何時(shí)被釋放?

  • 在標(biāo)準(zhǔn)的 2PL 中,鎖可以在 收縮階段 的任何時(shí)候被釋放, 不一定需要等到事務(wù)提交 。然而,正如我們前文所討論的,這種提前釋放會(huì)導(dǎo)致“臟讀”和“級(jí)聯(lián)終止”等問題。因此,在實(shí)際系統(tǒng)中更常用的是 強(qiáng)嚴(yán)格兩階段鎖(SS2PL) ,它規(guī)定所有鎖必須持有到事務(wù)最終提交(Commit)或中止(Abort)時(shí)才能一次性釋放,這相當(dāng)于將整個(gè)收縮階段壓縮到了事務(wù)結(jié)束的最后一個(gè)點(diǎn)。

2PL 的挑戰(zhàn)與演進(jìn):從理論到實(shí)踐

雖然標(biāo)準(zhǔn)的 2PL 解決了可串行化的問題,但在實(shí)際應(yīng)用中,它仍然有兩個(gè)致命的缺陷: 級(jí)聯(lián)終止(Cascading Aborts) 和 死鎖(Deadlocks) 。

挑戰(zhàn)一:級(jí)聯(lián)終止

想象以下場景:

  1. 事務(wù) T1 修改了數(shù)據(jù) A,但 尚未提交 。
  2. 根據(jù)標(biāo)準(zhǔn) 2PL,T1 可以在不提交的情況下進(jìn)入收縮階段,釋放了對(duì) A 的 X 鎖。
  3. 事務(wù) T2 立即獲取了 A 的鎖,并讀取了 T1 修改后的(但未提交的)值。我們稱之為 臟讀(Dirty Read) 。
  4. 此時(shí),T1 由于某種原因執(zhí)行失敗,必須 中止(Abort) 并回滾其所有修改。
  5. 現(xiàn)在問題來了:T2 讀取了一個(gè)根本不存在的“臟”數(shù)據(jù)。為了維護(hù)數(shù)據(jù)一致性, 數(shù)據(jù)庫系統(tǒng)必須強(qiáng)制中止 T2 。如果還有 T3 讀取了 T2 的(同樣未提交的)修改,那么 T3 也必須被中止。

這種一個(gè)事務(wù)的失敗導(dǎo)致一連串相關(guān)事務(wù)被動(dòng)中止的現(xiàn)象,就是 級(jí)聯(lián)終止 。它不僅會(huì)造成大量計(jì)算資源的浪費(fèi),也讓系統(tǒng)恢復(fù)的邏輯變得異常復(fù)雜。

解決方案:嚴(yán)格與強(qiáng)嚴(yán)格 2PL

為了解決臟讀和級(jí)聯(lián)終止問題,現(xiàn)實(shí)世界的數(shù)據(jù)庫系統(tǒng)普遍采用了 2PL 的兩個(gè)增強(qiáng)版本:

  • 嚴(yán)格兩階段鎖(Strict 2PL) :該協(xié)議要求事務(wù) 在提交或中止之前,不得釋放任何它持有的排他鎖(X-LOCK) 。這意味著,任何事務(wù)所做的修改在它提交之前,對(duì)其他事務(wù)都是不可見的。這就徹底杜絕了臟讀。
  • 強(qiáng)嚴(yán)格兩階段鎖(Strong Strict 2PL, SS2PL) :也稱為 Rigorous 2PL,這是最常用的版本。它比 Strict 2PL 更進(jìn)一步,要求事務(wù) 在提交或中止之前,不得釋放任何它持有的鎖(包括 S-LOCK 和 X-LOCK) 。

SS2PL 實(shí)際上消除了獨(dú)立的“收縮階段” 。事務(wù)的所有鎖都在其生命周期結(jié)束時(shí)(commit 或 abort)一次性全部釋放。

SS2PL 的優(yōu)勢是巨大的:

  1. 完全避免級(jí)聯(lián)終止 :由于所有鎖都持有到最后,其他事務(wù)不可能讀到未提交的數(shù)據(jù)。
  2. 簡化恢復(fù)邏輯 :當(dāng)一個(gè)事務(wù)需要中止時(shí),DBMS 只需恢復(fù)它自己修改的原始值即可,無需擔(dān)心對(duì)其他并發(fā)事務(wù)的影響。

當(dāng)然,SS2PL 的代價(jià)是犧牲了一部分并發(fā)度(因?yàn)殒i的持有時(shí)間變長了)。但在實(shí)踐中,它帶來的安全性和簡明性遠(yuǎn)比這點(diǎn)并發(fā)度損失更重要。

挑戰(zhàn)二:死鎖(Deadlock)

死鎖是所有基于鎖的并發(fā)控制協(xié)議都可能面臨的問題。當(dāng)兩個(gè)或多個(gè)事務(wù)循環(huán)等待對(duì)方持有的鎖時(shí),死鎖就發(fā)生了。

經(jīng)典例子

  • T1 持有數(shù)據(jù) A 的鎖,并請求數(shù)據(jù) B 的鎖。
  • T2 持有數(shù)據(jù) B 的鎖,并請求數(shù)據(jù) A 的鎖。

此時(shí),T1 和 T2 都將無限期地等待下去,系統(tǒng)陷入停滯。

處理死鎖通常有兩種策略: 死鎖檢測 和 死鎖預(yù)防 。

策略一:死鎖檢測(Deadlock Detection)

這是一種“事后處理”的策略。

  1. 構(gòu)建等待圖(Waits-For Graph) :DBMS 在后臺(tái)維護(hù)一個(gè)有向圖。圖中的每個(gè)節(jié)點(diǎn)代表一個(gè)事務(wù),如果 T1 正在等待 T2 釋放鎖,就有一條從 T1 指向 T2 的邊。
  2. 周期性檢測 :系統(tǒng)會(huì)定期檢查這個(gè)等待圖中是否存在 循環(huán) 。一旦發(fā)現(xiàn)循環(huán),就證明發(fā)生了死鎖。
  3. 選擇受害者并中止 :檢測到死鎖后,DBMS 必須選擇一個(gè)“受害者”事務(wù)并將其中止,以打破循環(huán)。受害者釋放其所有鎖,讓其他事務(wù)得以繼續(xù)。

如何選擇受害者是一個(gè)復(fù)雜的問題,通常會(huì)基于一些啟發(fā)式規(guī)則,例如:

  • 選擇最年輕的事務(wù)(時(shí)間戳最大)。
  • 選擇已執(zhí)行工作最少的事務(wù)。
  • 選擇持有鎖最少的事務(wù)。
  • 為防止某個(gè)事務(wù)總是被選為受害者( 饑餓 Starvation ),也會(huì)考慮其歷史重啟次數(shù)。
策略二:死鎖預(yù)防(Deadlock Prevention)

這是一種“防患于未然”的策略,它通過制定規(guī)則來確保死鎖從一開始就不會(huì)發(fā)生,從而避免了構(gòu)建和檢測等待圖的開銷。

一種常見的方法是 基于事務(wù)時(shí)間戳分配優(yōu)先級(jí) (通常時(shí)間戳越小,即越老的事務(wù),優(yōu)先級(jí)越高)。當(dāng)發(fā)生鎖沖突時(shí),按以下策略之一處理:

Wait-Die(“老”等“新”)

  • 如果請求鎖的事務(wù) T_req優(yōu)先級(jí)更高 (更老),則 T_req等待 持有鎖的 T_hold 。
  • 如果請求鎖的事務(wù) T_req優(yōu)先級(jí)更低 (更年輕),則 T_req中止 (Die)并稍后重啟。

Wound-Wait(“老”搶“新”)

  • 如果請求鎖的事務(wù) T_req優(yōu)先級(jí)更高 (更老),則它會(huì) 強(qiáng)制 持有鎖的 T_hold中止 (Wound),搶占鎖。
  • 如果請求鎖的事務(wù) T_req優(yōu)先級(jí)更低 (更年輕),則 T_req等待T_hold 。

一個(gè)關(guān)鍵細(xì)節(jié)是:當(dāng)一個(gè)事務(wù)因死鎖預(yù)防而中止并重啟時(shí), 它會(huì)保留其原始的時(shí)間戳 。這保證了它最終會(huì)成為“最老”的事務(wù),從而獲得最高優(yōu)先級(jí),避免了饑餓問題。

2PL 的實(shí)際應(yīng)用:多粒度與意向鎖

如果一個(gè)事務(wù)需要更新一個(gè)包含數(shù)百萬行數(shù)據(jù)的表,難道要為每一行都獲取一個(gè)排他鎖嗎?這顯然是低效的。鎖管理器的開銷會(huì)變得巨大。

為了解決這個(gè)問題,數(shù)據(jù)庫引入了 多粒度鎖定(Multi-Granularity Locking) 的概念。鎖可以施加在不同的層級(jí)上:

Database → Table → Page → Tuple(Row)

事務(wù)可以在這個(gè)層次結(jié)構(gòu)的任何一層上請求鎖。當(dāng)一個(gè)事務(wù)在某個(gè)高層級(jí)節(jié)點(diǎn)(如 Table)上獲取鎖時(shí),它就 隱式地鎖定了其下的所有子節(jié)點(diǎn) (如該表的所有 Page 和 Tuple)。

但這又帶來了新問題:如果事務(wù) T1 鎖定了整個(gè)表,事務(wù) T2 如何知道它不能去修改表中的某一行呢?反之,如果 T2 鎖定了某一行,T1 又如何知道它不能直接鎖定整個(gè)表呢?

答案就是 意向鎖(Intention Locks) 。

意向鎖是施加在 高層級(jí)節(jié)點(diǎn) 的“標(biāo)記”或“提示”,它表明了事務(wù) 打算 在更低的層級(jí)上施加何種鎖。

  • 意向共享鎖(Intention-Shared, IS) :表明事務(wù)打算在下層節(jié)點(diǎn)獲取 S 鎖。例如,在對(duì)某個(gè)元組加 S 鎖之前,先在表上加 IS 鎖。
  • 意向排他鎖(Intention-Exclusive, IX) :表明事務(wù)打算在下層節(jié)點(diǎn)獲取 X 鎖。例如,在對(duì)某個(gè)元組加 X 鎖之前,先在表上加 IX 鎖。
  • 共享意向排他鎖(Shared+Intention-Exclusive, SIX) :一種組合鎖,表示對(duì)當(dāng)前節(jié)點(diǎn)(如表)加 S 鎖,同時(shí)打算在下層節(jié)點(diǎn)(如元組)加 X 鎖。一個(gè)典型的場景是:SELECT * FROM table; UPDATE table SET ... WHERE id=...

通過意向鎖,鎖管理器可以非常高效地判斷鎖請求是否沖突。例如,當(dāng)一個(gè)事務(wù)想對(duì)整個(gè)表加 X 鎖時(shí),它只需檢查表上是否有任何其他鎖(包括 IS, IX 等)。如果發(fā)現(xiàn)表上已有一個(gè) IX 鎖,它就知道有其他事務(wù)正在修改表內(nèi)的某些行,因此必須等待。

結(jié)論:2PL 在現(xiàn)代數(shù)據(jù)庫中的地位

時(shí)至今日,兩階段鎖協(xié)議及其變體(尤其是 強(qiáng)嚴(yán)格兩階段鎖 SS2PL )仍然是絕大多數(shù)關(guān)系型數(shù)據(jù)庫(如 MySQL InnoDB, PostgreSQL, SQL Server )并發(fā)控制的核心基石。

當(dāng)你在 MySQL 中將事務(wù)隔離級(jí)別設(shè)置為 SERIALIZABLE 時(shí),其底層正是通過 SS2PL 來防止所有并發(fā)異常,確保事務(wù)的可串行化。

作為開發(fā)者,你通常不需要在 SQL 中手動(dòng)聲明 LOCK TABLE。數(shù)據(jù)庫管理系統(tǒng)會(huì)根據(jù)你的查詢(SELECT, INSERT, UPDATE, DELETE)自動(dòng)為你獲取和管理所需的鎖。但理解 2PL 的工作原理,可以幫助你:

  • 分析和解決應(yīng)用中遇到的死鎖問題。
  • 理解不同隔離級(jí)別之間的性能和一致性權(quán)衡。
  • 更有效地使用 SELECT ... FOR UPDATE 這樣的語句來提前鎖定資源,優(yōu)化業(yè)務(wù)邏輯。

總而言之,兩階段鎖協(xié)議是數(shù)據(jù)庫理論與工程實(shí)踐完美結(jié)合的典范。它通過一個(gè)簡單而優(yōu)雅的規(guī)則,為復(fù)雜的數(shù)據(jù)世界帶來了秩序和穩(wěn)定。

責(zé)任編輯:武曉燕 來源: Piper蛋窩
相關(guān)推薦

2025-08-11 02:00:00

2025-08-07 07:31:42

2025-08-12 07:31:11

2025-08-18 07:32:23

2025-08-18 01:23:00

2025-08-11 02:25:00

數(shù)據(jù)庫數(shù)據(jù)模型

2025-08-04 06:00:00

2025-08-18 01:01:00

樂觀并發(fā)控制

2025-08-21 06:39:13

2025-08-14 07:32:42

2025-08-06 00:00:00

2025-08-11 07:31:40

2025-08-06 01:22:00

2025-08-22 06:49:20

2025-08-04 07:31:30

2025-08-26 02:12:00

2025-08-26 03:15:00

2025-08-13 07:31:18

2025-08-08 07:37:07

2025-08-19 07:32:09

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久久久久久久黄色| 人妻av一区二区三区| 国产在线三区| 免费精品视频最新在线| 色妞色视频一区二区三区四区| 成人黄视频免费| 久久久久亚洲AV| 少妇高潮一区二区三区99| 中文字幕中文乱码欧美一区二区| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲丝袜美腿综合| 亚洲free嫩bbb| 久久久久久久久久综合| 久久久免费毛片| 91国偷自产一区二区三区观看| 成人免费在线看片| 日韩乱码一区二区| 日韩欧美电影| 在线亚洲免费视频| 国产一二三四五| 涩涩视频免费看| 日韩精品电影一区亚洲| 久久综合电影一区| 色天使在线视频| 亚州欧美在线| 欧美日韩中文字幕综合视频 | 人偷久久久久久久偷女厕| 久草手机视频在线观看| 天堂va欧美ⅴa亚洲va一国产| 欧美韩国日本一区| 成人精品久久一区二区三区| 日本一区二区三区免费视频| 国产欧美日韩视频在线| 日韩一级黄色大片| 欧美污视频网站| 韩国中文字幕在线| 久久蜜臀精品av| av资源站久久亚洲| 中文字幕第99页| 激情文学一区| 久久国产精品亚洲| 免费视频91蜜桃| 久久a爱视频| 欧美一区二区三区在线观看视频 | 男人的天堂影院| 农村妇女一区二区| 欧美三级xxx| 日韩美女爱爱视频| 黄在线免费观看| 久久久九九九九| 国产在线精品一区| 99国产在线播放| 麻豆91精品91久久久的内涵| 欧美中文在线免费| 日本在线小视频| 欧美成人日韩| 久久精品免费电影| 在线观看免费黄色网址| 国产精品一在线观看| 日韩精品视频免费在线观看| 漂亮人妻被黑人久久精品| 九色精品蝌蚪| 欧美一级高清片在线观看| 中文字幕在线观看日| 日韩成人一区| 欧美日韩成人高清| 中文字幕天天干| 国产经典一区| 在线精品视频免费观看| 久久久久久久久久久视频| 91色在线看| 亚洲国产视频a| 欧洲精品在线播放| 欧美一卡二卡| 亚洲一区二区3| 一本久道高清无码视频| 东凛在线观看| 国产亚洲成年网址在线观看| 欧美国产二区| 黄色网址在线播放| 欧美国产激情二区三区| 色噜噜狠狠一区二区三区| 国产精品免费播放| 国产精品精品国产色婷婷| 久久久久久久久久久久久久久久av| 无码人妻一区二区三区线| 亚洲一区二区成人| 茄子视频成人在线| 人妻中文字幕一区二区三区| 久久超级碰视频| 亚洲综合国产精品| 亚洲av综合色区无码一二三区| 久色成人在线| 国产美女久久精品| 国产老女人乱淫免费| 国产精品性做久久久久久| 999热视频| 日韩一级免费毛片| 久久无码av三级| 日韩精品福利视频| 国产在线高清视频| 性欧美疯狂xxxxbbbb| jizzjizz国产精品喷水| 久久91导航| 欧美精品国产精品| 国产高清999| 欧美网色网址| 色婷婷综合成人av| 国产无码精品久久久| 久久婷婷久久| 91福利视频导航| 天堂91在线| 国产精品成人一区二区艾草| 色乱码一区二区三区熟女| 超碰在线公开| 欧美午夜一区二区三区免费大片| 国产男女无遮挡| 国产69精品久久久久9999人| 欧美一激情一区二区三区| 50一60岁老妇女毛片| 成人在线电影在线观看视频| 欧美高清视频在线播放| 一级做a爰片久久毛片| 国产乱色国产精品免费视频| 蜜桃麻豆91| 在线观看午夜av| 欧美性猛交xxxx免费看久久久| av在线播放天堂| 成人mm视频在线观看| 欧美一区二区三区日韩视频| 一区二区三区免费在线观看视频| 久久悠悠精品综合网| 一道本无吗dⅴd在线播放一区 | 亚洲免费视频一区| 大香伊人中文字幕精品| 日本高清无吗v一区| 亚洲高清av一区二区三区| 亚洲欧洲美洲国产香蕉| 欧美成人免费网| 中文字幕 欧美激情| 99久久久精品免费观看国产蜜| 精品网站在线看| av中文字幕在线播放| 在线看国产一区| 中文字幕一区二区久久人妻网站| 午夜欧洲一区| 欧美黑人视频一区| 国产精品高潮呻吟AV无码| 国产无遮挡一区二区三区毛片日本| 久久久久久久免费| 日本小视频在线免费观看| 欧美精品久久久久久久多人混战| mm131国产精品| 国产麻豆精品久久| 欧美亚洲日本网站| 五月婷婷丁香网| 亚洲成av人片在线观看无码| 三级黄色片免费看| 午夜激情一区| 99re视频在线观看| 69成人在线| 欧美色图免费看| 国产91丝袜美女在线播放| 欧美综合国产| 久久亚洲综合网| 在线成人av观看| 国产手机视频精品| 久久99国产综合精品免费| 丰满白嫩尤物一区二区| 国产91在线亚洲| 亚洲一区二区电影| 欧美极品在线视频| 国产91绿帽单男绿奴| 一二三四区精品视频| 四川一级毛毛片| 欧美激情日韩| 国产亚洲精品久久飘花| 888av在线视频| 国产午夜精品麻豆| 成年人视频免费| 国产视频一区在线播放| 91小视频网站| 亚洲乱码精品| 国产精品久久亚洲7777| 国产免费拔擦拔擦8x在线播放| 69成人精品免费视频| 一区二区视频免费看| 国产精品18久久久久久久久久久久| 欧美日韩精品久久久免费观看| 成人在线直播| 亚洲大胆人体在线| 国产又大又黄又粗| 国产精品美女久久久久av爽李琼| 国产无限制自拍| 青青视频一区二区| 91av国产在线| av女优在线| 欧美va在线播放| 亚洲免费在线视频观看| 中文字幕的久久| 一个色综合久久| 影音先锋中文字幕一区| 日本一区二区免费看| 久久久成人av毛片免费观看| 久久久999精品免费| 日韩在线观看视频一区| 在线观看日韩电影| 丁香花五月激情| 久久久久久久综合日本| 中文字幕在线观看日| 日韩午夜免费视频| 久久资源亚洲| 精品一区二区三区视频在线播放 | 国产成人小视频在线观看| 在线观看免费高清完整| 欧美日韩视频第一区| 青青操视频在线播放| 久久综合久久综合九色| 亚洲一区二区三区四区精品| 亚洲欧美日韩专区| 一区二区三区视频在线播放| 麻豆一区一区三区四区| 国产精品一区二区久久久| 丰满大乳少妇在线观看网站| 国产一区二区三区18| 国产人妻精品一区二区三区| 色悠悠久久综合| 激情五月婷婷在线| 欧美激情中文不卡| 一出一进一爽一粗一大视频| 国产精品一卡二卡在线观看| 久久久久久久久久久免费视频| 自拍亚洲一区| 国产99在线免费| 男人最爱成人网| 97视频在线观看视频免费视频 | 日韩另类视频| 性色av一区二区三区在线观看 | 在线精品亚洲欧美日韩国产| 欧美大学生性色视频| 美女毛片在线看| 日韩你懂的在线观看| 国产有码在线观看| 欧美亚洲国产怡红院影院| 久久亚洲天堂网| 亚洲国产成人高清精品| 日韩激情小视频| 国产精品污网站| 三上悠亚ssⅰn939无码播放 | 在线免费观看一区二区| 色综合天天综合给合国产| 校园春色 亚洲| 国产精品国产三级国产| 内射毛片内射国产夫妻| 国产三级一区二区三区| 男人操女人动态图| 久久久午夜电影| 日韩精品卡通动漫网站| av电影在线观看完整版一区二区| 日韩在线第三页| 99热这里只有精品8| 免费一级特黄特色毛片久久看| 波多野结衣的一区二区三区| 日本成人黄色| 成人黄色小视频| 亚洲免费久久| 91视频精品| 一区二区三区四区久久| 欧美r级电影| 99精品一区二区三区的区别| 日韩欧美一区二区三区免费看| 99国内精品久久久久久久软件| 日韩成人av电影| 国产成人欧美在线观看| 欧美一级二级视频| 国产精品视频中文字幕91| 日韩精品一级毛片在线播放| 成人久久一区二区| 亚洲tv在线| 99精彩视频在线观看免费| 欧美有码在线| 任我爽在线视频精品一| 日韩.com| 色乱码一区二区三区熟女| 欧美一区国产在线| 日本免费不卡一区二区| 麻豆精品久久精品色综合| 欧美一级片在线免费观看| 久久久影院官网| 国产精品精品软件男同| 精品女厕一区二区三区| 在线观看黄色网| 亚洲第一精品夜夜躁人人爽| 91网页在线观看| 国内精品国产三级国产在线专| 人人超在线公开视频| 日韩av手机在线| 91精品国产自产在线丝袜啪| 亚洲欧美国产精品桃花| 亚洲毛片播放| 中文字幕色网站| 久久精品欧美一区二区三区不卡| 成人免费无码大片a毛片| 国产欧美一区视频| 精品人妻在线播放| 欧美日韩三级视频| 涩涩视频在线观看免费| 草民午夜欧美限制a级福利片| 麻豆电影在线播放| 日韩一区二区在线视频| 毛片电影在线| 国产高清精品一区二区| 91精品婷婷色在线观看| 狠狠操精品视频| 91麻豆swag| 国产精彩视频在线| 91精品久久久久久久91蜜桃| 爱久久·www| 欧美亚洲成人免费| 成人爽a毛片| 日韩在线视频在线| 国产真实乱子伦精品视频| 少妇无套高潮一二三区| 欧美视频裸体精品| 天堂在线视频免费| 欧美第一淫aaasss性| aa亚洲一区一区三区| 午夜精品一区二区三区在线观看 | 91九色丨porny丨国产jk| 美女免费视频一区| 欧美偷拍一区二区三区| 精品免费在线观看| 欧美视频久久久| 欧美国产极速在线| 免费精品一区| 中文字幕乱码免费| 国产在线精品一区二区三区不卡| 人妖粗暴刺激videos呻吟| 亚洲乱码精品一二三四区日韩在线| 国产性猛交普通话对白| 日韩视频在线你懂得| 欧美另类极品| 国产日韩欧美成人| 99久久久久久中文字幕一区| 超碰超碰在线观看| 国产精品理论在线观看| 中文字幕 亚洲视频| 日韩在线高清视频| 99久久这里有精品| 强开小嫩苞一区二区三区网站| 噜噜噜91成人网| 在线观看国产精品一区| 色老汉一区二区三区| 国产三级在线| 成人福利视频在线观看| 91精品综合| 日韩女优在线视频| 亚洲国产精品久久久久秋霞影院| 国产老妇伦国产熟女老妇视频| 亚洲精品99999| 午夜日韩成人影院| 日韩欧美一区二区在线观看| 蜜桃一区二区三区在线观看| av最新在线观看| 日韩精品一区二区三区中文精品| av中文字幕在线| 91日韩在线播放| 激情亚洲成人| 成人乱码一区二区三区av| 欧美三级韩国三级日本一级| 精品欧美色视频网站在线观看| 国产精品xxx视频| 国产精品88久久久久久| 天天爽夜夜爽视频| 精品国产1区2区| 阿v免费在线观看| 18成人在线| 国产亚洲永久域名| 久久爱一区二区| 亚洲大胆人体视频| 福利视频一区| 日韩小视频网站| 国产欧美一区二区三区网站| 国产成人精品毛片| 91sao在线观看国产| 国产精品久久久久久麻豆一区软件 | 亚洲精品一区二区在线观看| 345成人影院| 91制片厂免费观看| www欧美成人18+| 91丨九色丨蝌蚪丨对白| 51视频国产精品一区二区| 97视频热人人精品免费| 国产麻豆xxxvideo实拍| 欧美日韩久久久久久| 免费毛片b在线观看| 男人天堂成人网| 国产亚洲欧美一级| 丰满少妇在线观看bd| 国产在线视频2019最新视频|