国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

MySQL 8.0 MVCC 核心源碼解析

共 8352字,需瀏覽 17分鐘

 ·

2020-09-05 12:14


前言


之前在?BATJTMD 面試必問的 MySQL,你懂了嗎?中簡單的介紹了 MVCC 的原理,掌握了這個原理其實在面試時是可以加分不少的。

因為現(xiàn)在很多人的理解還是停留在《高性能 MySQL》書中的版本,也就是通過創(chuàng)建版本號刪除版本號來判斷。這個時候如果你能給出正確的理解,則會讓面試官眼前一亮,這也是我們在面試中凸顯出“自己和其他候選者不一樣的地方”,會更有利于在眾多候選者中脫穎而出。

本文在此基礎(chǔ)上,對 MVCC 展開詳細(xì)的分析,同時修改了之前的一些不太準(zhǔn)確的說法,希望可以助你在面試中更好的發(fā)(zhuang)揮(bi)。

PS:本文的源碼基于MySQL 8.0.16,對于現(xiàn)階段生產(chǎn)環(huán)境常用的 5.7.* 版本,MVCC 部分的源碼基本相同,因此可以放心參考。而 5.6.* 則有比較大的不同,主要是一些數(shù)據(jù)結(jié)構(gòu)都改變了,但是究其核心原理還是基本一致的。


基礎(chǔ)概念



并發(fā)事務(wù)帶來的問題(現(xiàn)象)

臟讀:一個事務(wù)讀取到另一個事務(wù)更新但還未提交的數(shù)據(jù),如果另一個事務(wù)出現(xiàn)回滾或者進一步更新,則會出現(xiàn)問題。


不可重復(fù)讀:在一個事務(wù)中兩次次讀取同一個數(shù)據(jù)時,由于在兩次讀取之間,另一個事務(wù)修改了該數(shù)據(jù),所以出現(xiàn)兩次讀取的結(jié)果不一致。


幻讀:在一個事務(wù)中使用相同的 SQL 兩次讀取,第二次讀取到了其他事務(wù)新插入的行。


要解決這些并發(fā)事務(wù)帶來的問題,一個比較簡單粗暴的方法是加鎖,但是加鎖必然會帶來性能的降低,因此 MySQL 使用了 MVCC 來提升并發(fā)事務(wù)下的性能。

MVCC 帶來的好處?
試想,如果沒有 MVCC,為了保證并發(fā)事務(wù)的安全,一個比較容易想到的辦法就是加讀寫鎖,實現(xiàn):讀讀不沖突、讀寫沖突、寫讀沖突,寫寫沖突,在這種情況下,并發(fā)讀寫的性能必然會收到嚴(yán)重影響。

而通過 MVCC,我們可以做到讀寫之間不沖突,我們讀的時候只需要將當(dāng)前記錄拷貝一份到內(nèi)存中(ReadView),之后該事務(wù)的查詢就只跟 ReadView 打交道,不影響其他事務(wù)對該記錄的寫操作。

事務(wù)隔離級別
讀未提交(Read Uncommitted):最低的隔離級別,會讀取到其他事務(wù)還未提交的內(nèi)容,存在臟讀。
讀已提交(Read Committed):讀取到的內(nèi)容都是已經(jīng)提交的,可以解決臟讀,但是存在不可重復(fù)讀。
可重復(fù)讀(Repeatable Read):在一個事務(wù)中多次讀取時看到相同的內(nèi)容,可以解決不可重復(fù)讀,但是存在幻讀。但是在?InnoDB 中不存在幻讀問題,對于快照讀,InnoDB 使用 MVCC 解決幻讀,對于當(dāng)前讀,InnoDB 通過?gap locks 或?next-key locks?解決幻讀
串行化(Serializable):最高的隔離級別,串行的執(zhí)行事務(wù),沒有并發(fā)事務(wù)問題。



InnoDB MVCC 實現(xiàn)



核心數(shù)據(jù)結(jié)構(gòu)

trx_sys_t:事務(wù)系統(tǒng)中央存儲器數(shù)據(jù)結(jié)構(gòu)

struct trx_sys_t {  TrxSysMutex mutex; /*! 互斥鎖 */
MVCC *mvcc; /*! mvcc */
volatile trx_id_t max_trx_id; /*! 要分配給下一個事務(wù)的事務(wù)id*/
std::atomic<trx_id_t> min_active_id; /*! 最小的活躍事務(wù)Id */ // 省略...
trx_id_t rw_max_trx_id; /*!< 最大讀寫事務(wù)Id */
// 省略...
trx_ids_t rw_trx_ids; /*! 當(dāng)前活躍的讀寫事務(wù)Id列表 */
Rsegs rsegs; /*!< 回滾段 */
// 省略...};


MVCC:MVCC 讀取視圖管理器

class MVCC { public:  // 省略...
/** 創(chuàng)建一個視圖 */ void view_open(ReadView *&view, trx_t *trx);
/** 關(guān)閉一個視圖 */ void view_close(ReadView *&view, bool own_mutex);
/** 釋放一個視圖 */ void view_release(ReadView *&view);
// 省略...
/** 判斷視圖是否處于活動和有效狀態(tài) */ static bool is_view_active(ReadView *view) { ut_a(view != reinterpret_cast(0x1));
return (view != NULL && !(intptr_t(view) & 0x1)); }
// 省略...
private: typedef UT_LIST_BASE_NODE_T(ReadView) view_list_t;
/** 空閑可以被重用的視圖*/ view_list_t m_free;
/** 活躍或者已經(jīng)關(guān)閉的 Read View 的鏈表 */ view_list_t m_views;};


ReadView:視圖,某一時刻的一個事務(wù)快照

class ReadView {
// 省略...
private: /** 高水位,大于等于這個ID的事務(wù)均不可見*/ trx_id_t m_low_limit_id;
/** 低水位:小于這個ID的事務(wù)均可見 */ trx_id_t m_up_limit_id;
/** 創(chuàng)建該 Read View 的事務(wù)ID*/ trx_id_t m_creator_trx_id;
/** 創(chuàng)建視圖時的活躍事務(wù)id列表*/ ids_t m_ids;
/** 配合purge,標(biāo)識該視圖不需要小于m_low_limit_no的UNDO LOG, * 如果其他視圖也不需要,則可以刪除小于m_low_limit_no的UNDO LOG*/ trx_id_t m_low_limit_no;
/** 標(biāo)記視圖是否被關(guān)閉*/ bool m_closed;
// 省略...};


增加隱藏字段

為了實現(xiàn) MVCC,InnoDB 會向數(shù)據(jù)庫中的每行記錄增加三個字段:

DB_ROW_ID:行ID,6字節(jié),隨著插入新行而單調(diào)遞增,如果有主鍵,則不會包含該列。
DB_TRX_ID:事務(wù)ID,6字節(jié),記錄插入或更新該行的最后一個事務(wù)的事務(wù)標(biāo)識,也就是事務(wù)ID。
DB_ROLL_PTR:回滾指針,7字節(jié),指向?qū)懭牖貪L段的 undo log 記錄。每次對某條記錄進行更新時,會通過 undo log 記錄更新前的行內(nèi)容,更新后的行記錄會通過 DB_ROLL_PTR 指向該 undo log 。當(dāng)某條記錄被多次修改時,該行記錄會存在多個版本,通過DB_ROLL_PTR 鏈接形成一個類似版本鏈的概念,大致如下圖所示。


源碼分析

在源碼中,添加這3個字段的方法在:/storage/innobase/dict/dict0dict.cc 的?dict_table_add_system_columns 方法中,核心部分如下圖。



增刪改的底層操作

當(dāng)我們更新一條數(shù)據(jù),InnoDB 會進行如下操作:

  1. 加鎖:對要更新的行記錄加排他鎖

  2. 寫 undo log:將更新前的記錄寫入 undo log,并構(gòu)建指向該 undo log 的回滾指針 roll_ptr

  3. 更新行記錄:更新行記錄的 DB_TRX_ID 屬性為當(dāng)前的事務(wù)Id,更新 DB_ROLL_PTR 屬性為步驟2生成的回滾指針,將此次要更新的屬性列更新為目標(biāo)值

  4. 寫 redo log:DB_ROLL_PTR 使用步驟2生成的回滾指針,DB_TRX_ID 使用當(dāng)前的事務(wù)Id,并填充更新后的屬性值

  5. 處理結(jié)束,釋放排他鎖


刪除操作:在底層實現(xiàn)中是使用更新來實現(xiàn)的,邏輯基本和更新操作一樣,幾個需要注意的點:1)寫 undo log 中,會通過 type_cmpl 來標(biāo)識是刪除還是更新,并且不記錄列的舊值;2)這邊不會直接刪除,只會給行記錄的 info_bits 打上刪除標(biāo)識(REC_INFO_DELETED_FLAG,之后會由專門的 purge 線程來執(zhí)行真正的刪除操作。


插入操作:相比于更新操作比較簡單,就是新增一條記錄,DB_TRX_ID?使用當(dāng)前的事務(wù)Id,同樣會有 undo log 和 redo log。


源碼分析

更新行記錄的核心源碼在:/storage/innobase/btr/btr0cur.cc/btr_cur_update_in_place 方法,核心部分如下圖。


構(gòu)建一致性讀取視圖(ReadView)

當(dāng)我們的隔離級別為 RR 時:每開啟一個事務(wù),系統(tǒng)會給該事務(wù)會分配一個事務(wù) Id,在該事務(wù)執(zhí)行第一個 select 語句的時候,會生成一個當(dāng)前時間點的事務(wù)快照 ReadView,核心屬性如下:
  • m_ids:創(chuàng)建 ReadView 時當(dāng)前系統(tǒng)中活躍的事務(wù) Id 列表,可以理解為生成 ReadView 那一刻還未執(zhí)行提交的事務(wù),并且該列表是個升序列表
  • m_up_limit_id:低水位,取 m_ids 列表的第一個節(jié)點,因為 m_ids 是升序列表,因此也就是 m_ids 中事務(wù) Id 最小的那個。
  • m_low_limit_id:高水位,生成 ReadView 時系統(tǒng)將要分配給下一個事務(wù)的 Id 值。
  • m_creator_trx_id:創(chuàng)建該 ReadView 的事務(wù)的事務(wù) Id。

源碼分析
MVCC 模式下的普通查詢主方法入口在:/storage/innobase/row/row0sel.cc 的?row_search_mvcc?方法中,之后的所有源碼分析基本都在該方法內(nèi)。

具體創(chuàng)建視圖的方法在 ReadView::prepare,調(diào)用鏈如下:

row_search_mvcc ->?trx_assign_read_view ->?MVCC::view_open ->?

ReadView::prepare,源碼如下:

最后,會將這個創(chuàng)建的 ReadView 添加到 MVCC 的 m_views 中。


視圖可見性判斷:SQL 查詢走聚簇索引

有了這個 ReadView,這樣在訪問某條記錄時,只需要按照下邊的步驟判斷記錄的某個版本是否可見:
  1. 如果被訪問版本的 trx_id 與 ReadView 中的 m_creator_trx_id 值相同,意味著當(dāng)前事務(wù)在訪問它自己修改過的記錄,所以該版本可以被當(dāng)前事務(wù)訪問。

  2. 如果被訪問版本的 trx_id 小于 ReadView 中的 m_up_limit_id(低水位),表明被訪問版本的事務(wù)在當(dāng)前事務(wù)生成 ReadView 前已經(jīng)提交,所以該版本可以被當(dāng)前事務(wù)訪問。

  3. 如果被訪問版本的 trx_id 大于等于 ReadView 中的 m_low_limit_id(高水位),表明被訪問版本的事務(wù)在當(dāng)前事務(wù)生成 ReadView 后才開啟,所以該版本不可以被當(dāng)前事務(wù)訪問。

  4. 如果被訪問版本的 trx_id 屬性值在 ReadView 的 m_up_limit_id 和 m_low_limit_id 之間,那就需要判斷 trx_id 屬性值是不是在 m_ids 列表中,這邊會通過二分法查找。如果在,說明創(chuàng)建 ReadView 時生成該版本的事務(wù)還是活躍的,該版本不可以被訪問;如果不在,說明創(chuàng)建 ReadView 時生成該版本的事務(wù)已經(jīng)被提交,該版本可以被訪問。


在進行判斷時,首先會拿記錄的最新版本來比較,如果該版本無法被當(dāng)前事務(wù)看到,則通過記錄的 DB_ROLL_PTR 找到上一個版本,重新進行比較,直到找到一個能被當(dāng)前事務(wù)看到的版本。

而對于刪除,其實就是一種特殊的更新,InnoDB 在 info_bits 中用一個標(biāo)記位 delete_flag 標(biāo)識是否刪除。當(dāng)我們在進行判斷時,會檢查下 delete_flag 是否被標(biāo)記,如果是,則會根據(jù)情況進行處理:1)如果索引是聚簇索引,并且具有唯一特性(主鍵、唯一索引等),則返回 DB_RECORD_NOT_FOUND;2)否則,會尋找下一條記錄繼續(xù)流程。

其實很容易理解,如果是唯一索引查詢,必然只有一條記錄,如果被刪除了則直接返回空,而如果是普通索引,可能存在多個相同值的行記錄,該行不存在,則繼續(xù)查找下一條。

以上內(nèi)容是對于 RR 級別來說,而對于 RC 級別,其實整個過程幾乎一樣,唯一不同的是生成 ReadView 的時機,RR 級別只在事務(wù)第一次 select 時生成一次,之后一直使用該 ReadView。而 RC 級別則在每次 select 時,都會生成一個 ReadView。


源碼分析

走聚簇索引的核心流程在?row_search_mvcc?方法,如下:


視圖可見性判斷在方法:changes_visible,調(diào)用鏈如下:

row_search_mvcc ->?lock_clust_rec_cons_read_sees?->?

changes_visible,源碼如下:


判斷記錄是否被打上 delete_flag 標(biāo)的方法在:/storage/innobase/include/rem0rec.ic?的?rec_get_deleted_flag?方法,如下圖


獲取記錄的上一個版本

獲取記錄的上一個版本,主要是通過 DB_ROLL_PTR 來實現(xiàn),核心流程如下:

  1. 獲取記錄的回滾指針?DB_ROLL_PTR、獲取記錄的事務(wù)Id?

  2. 通過回滾指針拿到對應(yīng)的 undo log

  3. 解析 undo log,并使用 undo log 構(gòu)建用于更新向量 UPDATE

  4. 構(gòu)建記錄的上一個版本:先用記錄的當(dāng)前版本填充,然后使用 UPDATE(undo log)進行覆蓋。


源碼解析

構(gòu)建記錄的上一個版本:trx_undo_prev_version_build,調(diào)用鏈如下:

row_search_mvcc ->?row_sel_build_prev_vers_for_mysql?->?row_vers_build_for_consistent_read ->?trx_undo_prev_version_build,源碼如下:



視圖可見性判斷:SQL 查詢走普通(二級)索引

BATJTMD 面試必問的 MySQL,你懂了嗎? 只分析了走聚簇索引的情況,本文簡單的介紹下走普通(二級)索引的情況。

當(dāng)走普通索引時,判斷邏輯如下:

  1. 判斷被訪問索引記錄所在頁的最大事務(wù) Id 是否小于?ReadView 中的?m_up_limit_id(低水位),如果是則代表該頁的最后一次修改事務(wù) Id 在 ReadView?創(chuàng)建前以前已經(jīng)提交,則必然可以訪問;如果不是,并不代表一定不可以訪問,道理跟走聚簇索引一樣,事務(wù) Id 大的也可能提交比較早,所以需要做進一步判斷,見步驟2。

  2. 使用 ICP(Index Condition Pushdown)根據(jù)索引信息來判斷搜索條件是否滿足,這邊主要是在使用聚簇索引判斷前先進行過濾,這邊有三種情況:a)ICP 判斷不滿足條件但沒有超出掃描范圍,則獲取下一條記錄繼續(xù)查找;b)如果不滿足條件并且超出掃描返回,則返回?DB_RECORD_NOT_FOUNDc)如果?ICP 判斷符合條件,則會獲取對應(yīng)的聚簇索引來進行可見性判斷。


源碼分析

普通(非聚簇)索引的視圖可見性判斷在方法:lock_sec_rec_cons_read_sees,調(diào)用鏈如下:

row_search_mvcc ->?lock_sec_rec_cons_read_sees,源碼如下:



擴展理解



ICP(Index Condition Pushdown)

ICP 是 MySQL 5.6 引入的一個優(yōu)化,根據(jù)官方的說法:ICP 可以減少存儲引擎訪問基表的次數(shù) 和 MySQL 訪問存儲引擎的次數(shù),這邊涉及到 MySQL 底層的處理邏輯,不是本文重點,這邊不進行細(xì)講。


這邊用官方的例子簡單介紹下,我們有張 people 表,索引定義為:INDEX (zipcode, lastname, firstname),對于以下這個 SQL:

SELECT * FROM people  WHERE zipcode='95054'  AND lastname LIKE '%etrunia%'  AND address LIKE '%Main Street%';

當(dāng)沒有使用 ICP 時:此查詢會使用該索引,但是必須掃描 people 表所有符合 zipcode='95054' 條件的記錄。


當(dāng)使用 ICP 時:不僅會使用?zipcode 的條件來進行過濾,還會使用?(lastname LIKE '%etrunia%')來進行過濾,這樣可以避免掃描符合 zipcode 條件而不符合 lastname 條件匹配的記錄行?。


ICP 的官方文檔:https://dev.mysql.com/doc/refman/8.0/en/index-condition-pushdown-optimization.html


當(dāng)前讀和快照讀

當(dāng)前讀:官方叫做 Locking Reads(鎖定讀?。?,讀取數(shù)據(jù)的最新版本。常見的 update/insert/delete、還有 select ... for update、select ... lock in share mode 都是當(dāng)前讀。

官方文檔:https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html


快照讀:官方叫做?Consistent Nonlocking Reads(一致性非鎖定讀取,也叫一致性讀?。x取快照版本,也就是 MVCC 生成的 ReadView。用于普通的 select 的語句。

官方文檔:https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html


MVCC 解決了幻讀了沒有?

MVCC 解決了部分幻讀,但并沒有完全解決幻讀。

對于快照讀,MVCC 因為因為從 ReadView 讀取,所以必然不會看到新插入的行,所以天然就解決了幻讀的問題。

而對于當(dāng)前讀的幻讀,MVCC 是無法解決的。需要使用 Gap Lock 或 Next-Key Lock(Gap Lock + Record Lock)來解決。

其實原理也很簡單,用上面的例子稍微修改下以觸發(fā)當(dāng)前讀:select * from user where id < 10 for update,當(dāng)使用了 Gap Lock 時,Gap 鎖會鎖住 id < 10 的整個范圍,因此其他事務(wù)無法插入 id < 10 的數(shù)據(jù),從而防止了幻讀。


Repeatable Read 解決了幻讀是什么情況?
SQL 標(biāo)準(zhǔn)中規(guī)定的 RR 并不能消除幻讀,但是 MySQL InnoDB 的 RR 可以,靠的就是 Gap 鎖。在 RR 級別下,Gap 鎖是默認(rèn)開啟的,而在 RC 級別下,Gap 鎖是關(guān)閉的。


幾個例子



例子1:RR(RC) 真正生成 ReadView 的時機

解析:RR 生成 ReadView 的時機是事務(wù)第一個 select 的時候,而不是事務(wù)開始的時候。右邊的例子中,事務(wù)1在事務(wù)2提交了修改后才執(zhí)行第一個 select,因此生成的 ReadView 中,a 的是 100 而不是事務(wù)1剛開始時的 50。


例子2:RR 和 RC 生成 ReadView 的區(qū)別

解析:RR 級別只在事務(wù)第一次 select 時生成一次,之后一直使用該 ReadView。而 RC 級別則在每次 select 時,都會生成一個 ReadView,所以 在第二次 select 時,讀取到了事務(wù)2對于 a 的修改值。



最后


MySQL 的源碼主要是?c++ 寫的,因此自己看起來比較吃力,花了挺多時間學(xué)習(xí)理的。如果你能掌握本文的內(nèi)容,面試?Java 崗位,無論是哪個公司,相信都能讓面試官眼前一亮。


現(xiàn)在互聯(lián)網(wǎng)的競爭越來越激烈,如果很多東西都只停留在表面,很難取得面試官的“芳心”,只有在適當(dāng)?shù)臅r候亮出自己的“長劍”,才能在眾多候選人中凸顯出自己的與眾不同。你需要向面試官證明,為什么是你而不是其他人。



瀏覽 128
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 午夜亚洲国产一区视频网站| 一本色道精品久久一区二区三区| 学生妹一级J人片内射视频| 亚洲成人视频免费在线观看| 91成人视频免费观看| www.怡春院| 天天日天天干天天日| 色老板在线免费观看| 肏屄视频在线看| 中国1级毛片| 午夜国产码网站码| 国产精品tv| 免费观看在线无码视频| 亚洲中文AV在线| 久久av综合| 男女草逼| 国产灬性灬淫灬欲水灬| a免费在线观看| 国产精品午夜在线| 国产潮吹| 人人摸人人干| 黄色国产在线观看| 日韩va中文字幕无码免费| 京东热av| 这里精品| 国产ts视频| a网站免费观看| 日本黄色中文字幕| 各国熟女HD合集| 久色99| 日韩二级片| 久久99高清视频| 欧美精产国品一二三| 亚洲加勒比在线| 欧美在线大香蕉| 色欲精品| AV-ThePorn| 日本少妇高清视频| 中文字字幕在线中文乱码更新时间 | 精品成人网| 91丨人妻丨国产| 天天做| 日本亚洲欧美| 国精产品一二四区黑人| 欧美一级黄色大片| 国外成人性视频免费| 91理伦| 久艹99| 欧美曰皮免费看| 四虎精品一区二区三区| 欧日无码| 亚洲第五页| 特级西西444www精品视频| 国产精品一色哟哟哟| 蜜臀久久99久久久久久宅男| 人人爱人人看| 成人区色情综合小说| 中文字幕在线看| 日韩人妻精品无码久久| 成人在线精品视频| 国产黄A| 亚洲成人影片在线观看| 国产三级片无码| 2024国产精品| 18禁网站在线播放| 国产成人免费观看视频| 九九九九精品视频| 国产中文字幕AV在线播放| 亚洲中文在线视频| 操逼视频在线免费观看| 欧美群交在线| 亚洲无码一区二区在线观看| 国产一a毛一a毛A免费| 韩国无码一区| 日韩中文字幕免费在线观看 | 国产无遮挡又黄又爽又色视频软件| 亚洲av无码精品| 天天爽夜夜爽精品成人免费| 成人AV免费| 甘肃WBBBB搡wBBBB| 欧美成人精品一区二区| 男女草逼| 国产精品扒开腿做爽爽爽A片唱戏| www.一区二区三区| 热热AV| 草草久久久无码国产专区的优势 | 人人插人人摸| 乱伦三区| 免费乱伦| 日韩黄色av| 人人操在线播放| 免费在线看黄网站| 日本特级片| 无码一道本一区二区无码| 精品国产欧美一区二区三区成人 | 亚洲无码高清视频在线观看| www.91麻豆| 99精品在线免费观看| 精品久久精品| 中文字幕精品亚洲熟女| 草久视频| 日韩中文字幕久久| 五月天国产精品| 99久久精品国产精品有折扣吗 | 99这里只有精品| 亚洲黄色成人网站| 亚洲操| 草久久| 在线中文字幕网站| 国产视频久久久| 久久xxx| 成人午夜精品| 一区二区三区AV| 黄色免费网站| 国产精品色在线回看| A一级横色大片| 久久午夜无码鲁片午夜精品男男 | 波多野结衣久久中文字幕| 日韩无码字幕| 怮交小拗女小嫩苞视频| 69网站| 日韩小电影免费观看高清完整版在线观| 国产在线拍偷自揄拍无码一区二区| 日韩精品久久久久久久酒店| 六月婷婷激情| 日本免费中文字幕| 国产黄色精品| 亚洲无码高清在线观看| 污网站在线观看| 日韩欧美亚洲| 天堂精品在线| 亚洲啊v| 激情婷婷亚洲| 日日夜夜天天综合| 免费色色网站| 亚洲热视频在线观看| 亚洲第一中文字幕| 国产成人大香蕉| 日韩一级黄色毛片| 亚洲精品成AV人片天堂无码| 97人妻精品一区二区三区视频 | 乱伦自拍| 亚洲人气无码AV| 亚洲国产女人| 人操人人人操| 人人操97| 韩国无码视频在线观看| 成人丁香五月| 天天日天天摸| 日逼91| 丁香五月影院| 日本免费黄色片| 国产熟女视频| 免费看性蜜桃| 大鸡巴影院| 澳门午夜黄色在线| 欧美一级免费视频| 亚洲淫秽视频| 肏屄一区| a4yy午夜福利| 成人网站免费在线观看| 内射免费看| 岛国AV在线| 日韩A人人| 欧美久久一区二区三区四区视频| 日韩国产综合| 久久久国产精品在线| 欧美A片免费| 亚洲激情在线观看| 青草精品| 西西888WWW大胆无码| 黄片www| 午夜精品久久久久久不卡8050| 韩国精品一区| 五月天激情av| 国产精品你懂得| 二区三区免费视频| 91网站免费| 成人无码区免费AV片| 无码人妻一区二区三区四区老鸭窝| 影音先锋中文字幕资源| 国产91www| 日本无码精品| 精品孕妇一区二区三区| 欧美群交在线观看| 欧美色图在线播放| 欧美成人18| 777性爱| 自慰一区二区| 伊人在线视频观看| 拍真实国产伦偷精品| 一级黄色电影网| 大香蕉国产在线| 精品一区二区三区毛片| 亚洲射射| 日韩十八禁网站| 任我操在线视频| 婷婷五月天亚洲| 麻豆国产在线| 亚洲精品69| 大香蕉伊人在线观看视频| 爱爱视频日本| 米奇7777狠狠狠狠| 亚洲操逼AV| 男女拍拍网站| 日韩欧美123| 91口爆| 99电影网手机在线观看| 婷婷丁香五月在线| 精品av在线观看| 久久精品毛片| 九九热在线观看| 免费18蜜桃久久19| 蜜桃人妻| 狠狠干综合网| 欧美丰满老熟妇XXXXX性| 一级片在线观看视频| 风情万种AV| 中国老少配BBwBBwBBW| 日韩理论在线| 99国产精品免费视频观看8| 超碰麻豆| AA级黄色视频| 99久久精品国产成人一区二区 | a天堂视频| 午夜福利高清在线观看| 簧片网站免费| 欧美日韩亚洲天堂| 精品av| 亚洲成人在线播放| 国产福利合集| 欧美一级A片在线观看| 台湾成人综合网| 91视频网址| 国产高清精品无码| 成人A片在线| 老湿机福利视频| 女人毛片| 日韩中文久久| www.操操操| 国精产品一二四区黑人| 欧美成人毛片| 国产精品偷拍视频| 囯产精品久久久| 草草在线视频| 美妇肥臀一区二区三区-久久99精品国 | 亚洲成人一区二区在线观看| 97人妻人人澡人人| 久久久成人片| 免费观看无码视频| 99久久精彩视频| 91麻豆精品国产91久久久久久 | 日韩精品综合| 波多野结衣一区| 粉嫩小泬BBBB免费看| 亚洲精品18禁| 婷婷色综合| 亚洲AV成人片色在线观看麻豆| 一本久久综合亚洲鲁鲁五月天| 欧美一级婬片AAAAAA片| 色婷五月天| 九九九九精品视频| 青青久热| 91aaa在线观看| 中文字幕人妻精品一区| 国产在线观看你懂的| 激情国产视频| 九九热精品| 青青草视频免费观看| 日本黄色录像| 9I成人免费版| 日本黄色大全| 成人精品一区二区区别解析| 51妺妺嘿嘿午夜成人A片| 爱无码| 中文字幕第11页| 操人人| 久久久久久一| 成人免费看A片| 韩日一区二区| 人人操人人干人人操| 可以免费看的黄色视频| 成人爽a毛片一区二区免费| 日本久久人体视频| 亚洲一级黄色大片| 精品99视频| 国产18女人水真多免费看| 无码一区视频| 91人妻无码成人精品一区二区| 欧美www| 99热热| 亚洲一区二区在线免费观看 | 狼友视频在线免费观看| 免费看性蜜桃| 国产熟睡乱子伦午夜视频_第1集 | 蜜桃av无码一区二区三区| 大香蕉伊人在线视频| 99热官网| 亚洲成人精品视频| 性爱免费专区| 精品码A片18| 欧美国产精品一二三产品在哪买| 成人视频观看| 青草超碰| 欧美性爱视频网站| 成人精品一区二区无码| 在线观看无码高清| 五月亚洲六月婷婷| 新版欧美内射大全| 免费无码婬片A片AAA毛片96| 99久久成人| 亚洲成人AV在线观看| 狠狠撸天天日| 91无码人妻一区二区成人aⅴ| 亚韩无码| 成人黄色一级A片| 中文无码一区二区三区| 国产在线欧美在线| 九九黄色| 精品视频在线免费观看| 国产精品久久7777777精品无码 | 国产AV高清| 日韩久久精品视频| 日韩爱爱视频| 爽爽午国产浪潮AV性色www| 日本成人无码| 91双飞会所双飞在线| 亚洲高清超级无码在线视频观看| 夜夜操夜夜爽| 亚洲欧美日韩成人| 91中文字幕+乱码| 麻豆91精品91久久久停运原因| 亚洲性爱在线播放| 亚洲第一黄色| 动漫一区二区| 亚洲无码视频播放| 大屌在线| 欧美成人A| 一区二区三区三级片| 日本特黄AA片免费视频| 巨乳无码噜噜噜久久久| 天干夜天干天天天爽视频| 日韩人妻精品无码| 麻豆传媒在线| 久久久毛片| 天天撸天天日| 国产操逼逼| 亚洲无码一区二区三| 国产精品国产精品国产专区不| 88av在线观看| 五月丁香婷婷综合网| 国产日本欧美韩国久久久久| 久久足交| 三级免费无限AV| 无码人妻精品一区二区蜜桃漫画 | 开心色情| MAD033_后宫秘密陶子.| 乱子伦毛片国产| 蜜臀AV在线| 久久夜色精品国产噜噜亚洲AV| 最近中文字幕免费MV第一季歌词十| 国产在线观看你懂的| 99精品视频在线观看免费| 精品无人区无码乱码毛片国产| 亚洲欧美日韩久久| 一本色道久久88亚洲精品综合| 在线成人免费视频| 成人日韩精品| 日老女人的逼| 热久久视频| 国产在线无码视频| 亚洲无码A区| 欧美性网站| 久久性爱免费视频| 十八禁免费网站| AV婷婷在线| 欧美性爱福利| 亚洲精品在线观看免费| 久久精品三级| 亚洲色图88| 中文字幕乱码人妻二区三区| 米奇狠狠干| 九九热精品在线| 精品视频日韩| 黄色在线网站| 欧美精品一卡二卡| 一级调教看片| a级网站| 亚洲国产精品一区二区三区| 成人做爰A片免费看网站| 久草视频在线免费| 久久99久久99精品免视看婷婷| 欧美A级黄片| 日本A级毛片| 中文字幕资源在线| 日韩AV小说| 青青草网站在线观看| 色中文字幕| 欧美老女人操逼视频| www.91av| 91av久久| 九九九九精品视频| 亚洲国产三级片| 黄色成人网站大全| 香蕉婷婷| 欧美插菊花综合网| 久热中文字幕| a免费在线观看| 操逼AⅤ| 男女啪啪| 久久黄片视频| 亚洲三级免费| 国产三级视频在线| 在线成人一区二区| 色婷婷成人| 一级日韩一级欧美| 日韩黄色av| 特写毛茸茸BBwBBwBBw| 日本A视频| 精品人妻二区三区蜜桃| 天堂vs亚洲| 免费视频91蜜桃| 午夜亚洲AⅤ无码高潮片苍井空| 无码人妻一区二区| 日本中文字幕中文翻译歌词| 色999在线播放视频| 国产一级婬片A片免费无成人黑豆| 狼友视频免费观看| 免费日韩| 天天搞天天干| 亚洲女与黑人正在播放| 国产视频一区二区三区四区五区 | 91精品国产闺蜜国产在线闺蜜| 亚洲图片一区| 一级黄片免费视频| 国产性爱网| 亚洲熟妇在线| 99伊人在线| 成人视频一区二区| 四季AV之日韩人妻无码| 江苏妇搡BBBB搡BBBB-百度| 三级片网站在线播放| 大香伊人国产| 99热精品在线播放| 欧美国产综合| 韩国午夜福利视频| 91探花在线观看| 91亚洲国产成人久久精品网站| 一欧美日韩免费/看| 久久精品99久久久久久| 亚洲青娱乐在线| 午夜无码电影| 精品人妻一区二区三区在线视频不卡| 大香蕉在线视频75| 青娱乐99| 老女人网站| 暴操美女网站| 亚洲天堂免费观看| 亚洲无码AV在线观看| а√天堂中文最新版8| 好吊妞在线| 国产成人福利| 91干穴穴在线观看| 丰满老妇高潮一级A片| 成人天堂一区二区三区| 精品乱伦| 最新国产在线| 亚洲在线一区二区| 怡红影院美乳| 国产二区三区| 99久久婷婷国产综合精品| 成人午夜精品福利免费| 欧美日韩日逼| 先锋成人av| 欧美一级夜夜爽| 免费毛片+一区二区三区| 五月停亭六月,六月停亭的英语| 久久精品v| 99精品视频在线播放免费| 日木毛片| 国产精品久久77777| 97精品国产| 日本一区免费| 人人妻人人躁人人DVD| 日韩一级黄片| 国产精品人妻AⅤ在线看| 欧美在线视频网| 亚洲精品无码人妻| 巨爆乳肉感一区二区三区视频| 亚洲精品国产成人无码区在线 | 99精品热视频| 日本中文字幕在线| 偷拍综合| 激情丁香五月天| 亚洲无码在线免费视频| jizz无码| AV电影天堂网| 神马午夜精品95| 另类罕见稀奇videos| 一道本无码在线视频| 国产午夜精品一区二区三区嫩A| 美女人人操| 国产粗大| 国产成人AV免费无码| 欧美第五页| 精品人妻一区二区蜜桃视频| 亚洲欧美性爱视频| 日韩人妻无码一区| 女人一级A片色黄情免费| 欧美日韩中文字幕在线| 伊人久艹| 综合天堂AV久久久久久久| 一本大道东京热av无码| 日韩黄色在线观看| 一本久久精品一区二区| 波多野结衣Av在线| 无码专区一区二区三区| 丁香五月婷婷在线| 久久综合久| 久久伊人在| 特级毛片在线观看| 亚洲AV无码乱码| 人人精品| 国产91在线播放| 丁香五月天AV| 久久成人无码| 欧美亚洲国产一区二区三区| 蜜桃av秘无码一区三区四| 黄片网站在线看| 天天日天天色天天干| 天天夜夜爽| 国产熟妇搡BBBB搡BBBB毛片| 97在线观看免费视频| 欧美aⅴ| 天天干夜夜操| 日韩精品欧美一区二区三区 | 乱子伦国产精品www| 中文字幕在线无码视频| 91视频美女内射| 97操逼| 色婷婷色99国产综合精品| 内射老熟女| 日韩欧美黄色片| 91丨牛牛丨国产人妻| 久久久大香蕉| 超碰AV在线| 18国产免费视频在线观看| 天天插天天狠天天透| 99福利视频| 国产精品婷婷午夜在线观看| 四虎麻豆| 成人不卡视频| 天堂网中文字幕| 97一区二区三区| 青青精品| 亚洲精品视频在线观看网站| 婷婷日韩中文字幕| 亚欧洲精品在线视频免费观看| 一个人看的视频www| 欧洲在线观看| 一本色道88久久加勒比精品 | 中文字幕在线观看完整av| 97在线超碰| 精品久久ai| 日韩一区二区三| 无码国产+白浆| 欧美日韩加勒比| 天天操天天操免费视频| 高清国产av| 福利在线播放| 狠狠躁日日躁夜夜躁A片无码视频| 精品自拍视频| 婷婷91| 操骚屄视频| 一级特黄AAAA片| 日本久久网站| 99热在线看| 亚洲v欧美| а√最新版天堂中文在线| 成人精品免费视频| 日韩激情视频| 天天色天天日| 欧美一区二区三区在线| 亚洲日韩精品中文字幕| 嫩BBB槡BBBB槡BBBB二一| 五月丁香综合久久| 黄色福利视频| 色诱av| 午夜av在线观看| 久久午夜一级A片| 伊大香蕉| 大香蕉伊人视频在线观看| 欧美日韩伊人| 午夜精品久久久久久久久久久久| 久久精品福利| 秋霞A片| 中文字幕亚洲区| 高潮国产视频| 91毛片在线观看| 美女免费AV| 操逼视频在线免费看| 久久精品国产AV| 亚洲免费成人| 一级黄色A片| 国产在线小视频| 水蜜桃在线视频| 国产剧情一区二区av在线观看| 亚洲V在线观看| 国产性播放| 大BBBw大BBBW另类| 操逼视频电影| 做爰视频毛片蜜桃| 日本亚洲欧美| 嘿咻无码推油| 国产一区二区久久| 中文字幕特黄A片| 国产美女自拍| 丰滿人妻一区二区三区| 黄色电影A| 超碰97在线精品国产| 午夜老司机福利一二三区| 嗯啊在线视频| 日日视频| 91香蕉国产在线观看| 操极品美女| 伊人色女操穴综合网| 波多野结衣黄色| 超碰免费在线观看| 日毛片| 国产色情在线| 免费网站观看www在线观看| 农村一级婬片A片AAA毛片古装| 成人福利午夜A片公司| 亚州在线中文字幕经典a| AV无码一区二区三区| 草草影院第一页YYCCC| 亚洲aa| 加勒比无码在线| 91丝袜一区二区| 国产精品国产三级片| 欧美成人手机在线观看| 高清无码视频18| 97国产超碰| 大香蕉视频网| 国产精品啪啪啪| 天天干天天天天| 亚洲一区AV| 天天爽夜夜爽夜夜爽精品视频| 一区无码视频| 久久97人妻AⅤ无码一区| 乱伦五月| 99免费在线观看| 国产夫妻在线视频| AV2014天堂网| 亚洲成人二区| 国外成人性视频免费| 国产成人综合电影| 九九久久精品视频| 国产精品囯产三级囯产AV野外| 国产一二三四| 国产免费啪啪视频| 人人操人人网站| 操逼专区| 日本成人不卡| 青青操天天干| 免费av中文字幕| 人妻丰满熟妇av无码| 亚洲砖区免费| 国产女人18水真多18精品| 国产精品人妻无码一区牛牛影视| 插逼免费视频| 日本乱轮视频| 8050网午夜| 中文字幕日韩欧美在线| 伊人久久大香蕉国产| 婷婷五月天性爱| 日韩五月天| 中文字幕日本电影| 免费毛片在线| 中文精品字幕人妻熟女| 国产一区| 午夜性福利视频| av在线精品| 影音先锋男人天堂| 亚洲av免费在线| 国产AV福利| 久久高清亚洲| 国产www视频| 性满足BBWBBWBBW| 亚洲在线大香蕉| a级毛片在线观看| 强伦轩人妻一区二区三区四区| 亚洲无码1区| 奇米影视狠狠干| 欧美精品日韩在线观看| 久热国产精品| 国产资源在线观看| 色五月天婷婷| 国产欧美日本| 中国一级A片| 99精品免费视频| 国产69精品久久久久久久久久久久| 麻豆成人91精品二区三区| 久草福利视频| 成人AV电影在线观看| 波多野结衣av在线观看窜天猴| 水多多成人网站A片| 人人人妻人人人操| 日本天堂网在线观看| 成人网站中文字幕| 欧美日韩字幕| 日韩TV| 可以免费观看的毛片| 国产黄色免费观看| 五月天激情午夜福利| av在线一区二区三区| 精品人妻中文字幕| 国产精品久久在线| 国产伊人大香蕉| 蜜桃av秘一区二区三区| 亚洲免费观看高清完整版在va线观看| 在线观看一区| 欧美日韩色图| 青青操成人| 先锋资源av在线| 伊人网站| 开心激情婷婷| 成人在线黄色视频| 国产91在线拍揄自揄拍无码九色| 招土一级黄色片| 美妇肥臀一区二区三区-久久99精品国| 久久精品免费看| 女人一区二区| 五月天久久综合| 另类性爱视频| 日韩在线视频免费播放| 91久久久久国产一区二区| 婷婷丁香五月综合| 欧美午夜福利在线观看| av在线无码| 亚洲字幕在线播放| 国产精品爽爽久久久| 牛牛无码| 国产AⅤ无码一区二区| 日韩人妻精品中文字幕专区不卡| AV手机在线| 极品人妻疯狂3p超刺激| 国产a√| 亚洲综合伊人| 丝袜足交视频在线观看| 大香蕉啪啪啪啪| 99欧美精品| 亚洲经典免费视频| 成人午夜福利网站| 日本爱爱片| 91在线播放视频| 亚洲午夜福利视频在线观看| 中文字幕在线资源| 91黑人丨人妻丨国产丨| 91视频网站| 中文字幕无码人妻在线视频| 四季AV一区二区凹凸懂色桃花 | 国产免费国产| 久久久三级| 激情五月婷婷色| 天天搞天天色| 日本在线小视频| 亚洲精品视频在线观看免费| 国产—a毛—a毛A免费| 亚洲五月天色| 久久嫩草精品久久久久精| 激情视频免费看| 亚洲欧美在线成人| 久久午夜无码鲁丝片主演是谁| 三级片网站在线播放| 99精品在线免费观看| 黄色伊人| 五月天久久久久久| re久久| 亚洲在线中文| 黑巨茎大战欧美白妞小说| 九九成人视频| 久久久婷婷| 色狠狠AV| 色狠久| 亚洲精品无码a片| 五月婷丁香| 国产xxxx| 亚洲欧美日韩在线| 国产91探花精品一区二区| 亚洲视频一区二区三区四区娇小视频在线观看视频 | 91中文字幕网| 亚洲三级国产| 成人不卡| 久久精品国产亚洲AV成人婷婷 | 五月婷婷丁香综合| 日韩一级毛| 日韩AV性爱| 国产熟妇码视频| 成人片免费| 中文字幕+乱码+中文字幕一区| 黄色成人视频在线免费观看| 青娱乐免费视频| 最美人妖系列国产Ts涵涵| 国产精品视频播放| 三根一起进菊眼| 美女免费AV| 色天堂色男人| 午夜日韩| 囯产精品99久久久久久WWW| 亚洲成人情趣大香蕉| 熟妇人妻中文字幕无码老熟妇| 亚洲三级黄色视频| 国产性爱av| 中文字幕午夜福利| 黑人精品XXX一区一二区| 国产熟女露脸普通话对白| 国产妞干网| 亚洲天堂视频在线观看| 天堂综合网久久| 玖玖在线播放| 人人澡人人爽人人精品| 一级片免费在线观看| 亚洲一区自拍| 婷婷国产精品视频| 亚洲AV无码免费| AV毛片| 亚洲天堂女人| 一区二区有限公司| 午夜精品18视频国产17c| 人妻电影亚洲av| 国产乱色精品成人免费视频| 欧美AⅤ在线| 日韩中文字幕一区| 三级一区二区| 久久久久久久9999| 日韩日日日| 欧美一级日韩一级| 国产免费av在线观看| 国产久久久久久久久| 99视频精品全部免费看| 青娱乐日韩| 在线观看免费高清无码| 日韩人妻丰满无码区A片| 91亚洲精品乱码久久久久久蜜桃| 嫩草入口| 四虎www| 五月天福利网| 国产欧美二区综合中文字幕精品一| 国产精品久久久久久久久久乐趣播| 亭亭五月丁香| 国产一区二区三区四区五区在线| 国产农村乱婬片A片AAA图片| 人妻少妇被猛烈进入中文字幕| A片在线免费观看| 国产操片| 精品偷拍视频| 女生自慰网站在线观看| 午夜蜜桃人妻一区二区| 成人免费精品| 福利视频在线| 无码电影视频| 日韩成人无码全裸视频| 91九色口爆吞精| 影音先锋国产资源| AV一级片| 久久精品色| 成人免费乱码大片a毛片蜜芽| 久99视频| 五月婷婷六月丁香| 91精品人妻一区二区三区四区| 91无码人妻一区二区成人AⅤ| 亚洲欧洲在线视频| 综合天堂| 亚洲AV性爱| 成人无码精品| 国产又粗又大又爽| 国产无码一二三| 亚洲一区二区无码| 在线观看黄色小电影| 午夜福利91| 狠狠躁日日躁夜夜躁A片无码视频| 黄色搞逼视频| 三级国产AV| 欧美精品一区二区三区使用方法| 操逼网123首页| 在线观看污网站| 亚洲一级黄片| 99久久性爱| 男女www视频| 婷婷五月天青草| 伊人精品| 亚洲精品成人无码毛片| 国产av一二三区| 骚逼逼影院| 免费无码一区二区三区| 成人午夜视频精品一区| 黄片WWW| 中文字幕婷婷五月天| 久操手机在线|