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

MySQL 8.0新特性:徹底解決困擾運維的復制延遲問題,你信嗎?

數據庫 MySQL
MySQL 8.0可以說是MySQL發展歷史上里程碑式的一個版本,包括了多個重大更新,目前Generally Available版本已經已經發布,在此將介紹8.0版本中引入的一個重要的新特性——基于WriteSet的并行復制方案,此方案號稱是徹底解決困擾MySQL運維人員多年的復制延遲問題。

MySQL 8.0可以說是MySQL發展歷史上里程碑式的一個版本,包括了多個重大更新,目前Generally Available版本已經已經發布,在此將介紹8.0版本中引入的一個重要的新特性——基于WriteSet的并行復制方案,此方案號稱是徹底解決困擾MySQL運維人員多年的復制延遲問題。

說到并行復制,這里簡單的回顧一下各個版本的MySQL復制的演進,以幫助理解8.0版本中對并行復制MTS的優化。

一、MySQL主從復制模型

一切都要從MySQL的主從復制模型開始說起,下圖是最經典的MySQL主從復制模型架構圖:

MySQL復制模型

MySQL的主從架構依賴于MySQL Binlog功能,Master節點上產生Binlog并將Binlog寫入到Binlog文件中。

Slave節點上啟動兩個線程:一個IO線程,從MySQL上撈取Binlog日志并寫入到本地的RelayLog日志;另一個SQL線程,不斷從RelayLog日志中讀取日志,并解析執行,這樣通過在主機和從機上增加幾個文件的順序讀寫操作,就可以保證所有在主機上執行過的SQL語句都在從機上一摸一樣的執行過一遍。

復制延遲,指的就是一個事務在Master執行完成以后,要多久以后才能在Slave上執行完成。

由于對Binlog文件以及RelayLog文件的讀寫均為順序操作,在生產環境中,Slave上的IO線程對Binlog文件的Dump操作是很少產生延遲的。實際上,從MySQL 5.5開始,MySQL官方提供了半同步復制插件,每個事務的Binlog需要保證傳輸到Slave寫入 RelayLog 后才能提交,這種架構在主從之間提供了數據完整性,保證了主機在發生故障后從機可以擁有完整的數據副本。因此,復制延遲通常發生在SQL線程執行的過程中。

從架構圖上可以看到,最早的主從復制模型中,只有一個線程負責執行Relaylog,也就是說所有在主機上的操作,在從機上是串行回放的。這就帶來一個問題,如果主上寫入壓力比較大,那么從上的回放速度很有可能會一直跟不上主。(除此之外,MySQL的架構決定了Binlog只有在Commit階段才會寫入Binlog文件并Dump給從機,這也導致主從事務必然有執行延遲,這個問題在大事務中體現的特別明顯,不過這個問題就不在本文的討論范圍內了)

既然主從延遲的問題是單線程回放RelayLog太慢,那么減少主從延遲的方案自然就是提高從機上回放RelayLog的并行度。

二、5.7中的并行復制

1、Schema級別的并行復制

MySQL官方在5.6中引入了一個比較簡單并行復制方案,其架構如下:

(圖片來自姜承堯老師的博客)

紅色框部分為并行回放的關鍵,5.6中若開啟并行回放的功能,便會啟動多個WorkThread ,而原來負責回放的SQLThread會轉變成Coordinator角色,負責判斷事務能否并行執行并分發給WorkThread。

如果事務分別屬于不同的Schema,并且不是DDL語句,同時沒有跨Schema操作,那么就可以并行回放,否則需要等所有Worker線程執行完成后再執行當前日志中的內容。

這種并行回放是Schema級別的并行,如果實例上有多個Schema將會因此收益,而如果實例上只有一個Schema,那么事務將無法并行回放,而且還會因多了分發的操作導致效率略微下降。而在實際應用中,單庫多表才是更常見的情況。

2、基于Group Commit的并行復制

雖然5.6中的并行復制在大多數應用場景中對回放速度的提升不大,但是該架構卻成為了后來MySQL并行復制的基礎——即在Slave上并行回放RelayLog,SQL線程負責判斷能否并行回放,并分配給Work線程回放。

5.6 中引入Group Commit技術,是為了解決事務提交的時候需要fsync導致并發性不夠而引入的。簡單來說,就是由于事務提交時必須將Binlog寫入到磁盤上而調用fsync,這是一個代價比較高的操作,事務并發提交的情況下,每個事務各自獲取日志鎖并進行fsync會導致事務實際上以串行的方式寫入Binlog文件,這樣就大大降低了事務提交的并發程度。

5.6中采用的Group Commit技術將事務的提交階段分成了Flush、Sync、Commit三個階段,每個階段維護一個隊列,并且由該隊列中***個線程負責執行該步驟,這樣實際上就達到了一次可以將一批事務的Binlog fsync到磁盤的目的,這樣的一批同時提交的事務稱為同一個Group的事務。

Group Commit雖然是屬于并行提交的技術,但是卻意外解決了從機上事務并行回放的一個難題——即如何判斷哪些事務可以并行回放。如果一批事務是同時Commit的,那么這些事務必然不會有互斥的持有鎖,也不會有執行上的相互依賴,因此這些事務必然可以并行的回放。

因此MySQL 5.7 中引入了新的并行回放類型, 由參數 slave_parallel_type決定,默認值DATABASE將會采用5.6版本中的SCHEMA級別的并行回放,設置為LOGICAL_LOCK則會采用基于GroupCommit的并行回放,同一個Group內的事務將會在Slave上并行回放。

為了標記事務所屬的組,MySQL 5.7 版本在產生 Binlog 日志時會有兩個特殊的值記錄在 Binlog Event 中,last_committed 和 sequence_number,其中 last_committed指的是該事務提交時,上一個事務提交的編號,sequence_number是事務提交的序列號,在一個Binlog文件內單調遞增。如果兩個事務的last_committed值一致,這兩個事務就是在一個組內提交的。 

  1. root@localhost:~# mysqlbinlog mysql-bin.0000006 | grep last_committed  
  2. #150520 14:23:11 server id 88 end_log_pos 259 CRC32 0x4ead9ad6 GTID last_committed=0 sequence_number=1  
  3. #150520 14:23:11 server id 88 end_log_pos 1483 CRC32 0xdf94bc85 GTID last_committed=0 sequence_number=2  
  4. #150520 14:23:11 server id 88 end_log_pos 2708 CRC32 0x0914697b GTID last_committed=0 sequence_number=3  
  5. #150520 14:23:11 server id 88 end_log_pos 3934 CRC32 0xd9cb4a43 GTID last_committed=0 sequence_number=4  
  6. #150520 14:23:11 server id 88 end_log_pos 5159 CRC32 0x06a6f531 GTID last_committed=0 sequence_number=5  
  7. #150520 14:23:11 server id 88 end_log_pos 6386 CRC32 0xd6cae930 GTID last_committed=0 sequence_number=6  
  8. #150520 14:23:11 server id 88 end_log_pos 7610 CRC32 0xa1ea531c GTID last_committed=6 sequence_number=7  
  9. #150520 14:23:11 server id 88 end_log_pos 8834 CRC32 0x96864e6b GTID last_committed=6 sequence_number=8  
  10. #150520 14:23:11 server id 88 end_log_pos 10057 CRC32 0x2de1ae55 GTID last_committed=6 sequence_number=9  
  11. #150520 14:23:11 server id 88 end_log_pos 11280 CRC32 0x5eb13091 GTID last_committed=6 sequence_number=10  
  12. #150520 14:23:11 server id 88 end_log_pos 12504 CRC32 0x16721011 GTID last_committed=6 sequence_number=11  
  13. #150520 14:23:11 server id 88 end_log_pos 13727 CRC32 0xe2210ab6 GTID last_committed=6 sequence_number=12  
  14. #150520 14:23:11 server id 88 end_log_pos 14952 CRC32 0xf41181d3 GTID last_committed=12 sequence_number=13 

如上binlog文件中,sequence_number 1-6的事務last_committed都是0 ,因此屬于同一個組,可以在slave上并行回放,7-12的last_committed都是6,也屬于同一個組,因此可以并行回放。

5.7 中引入的基于Logical_Lock極大的提高了在主機并發壓力比較大的情況下從機上的回放速度,基本上做到了主機上如何提交的,在從機上如何回放。

三、MySQL MGR中的WriteSet

雖然如此,在 5.7 中,基于邏輯時鐘 Logical_Clock 的并行復制仍然有不盡人意的地方,比如必須是在主上并行提交的事務才能在從上并行回放,如果主上并發壓力不大,那么就無法享受到并行復制帶來的好處。5.7 中引入了binlog_group_commit_sync_delay和binlog_group_commit_sync_no_delay_count兩個參數,通過讓Binlog在執行fsync前等待一小會來提高Master上組提交的比率。但是無論如何,從上并行回放的速度還是取決于主上并行提交的情況。

MySQL 8.0中引入了一種新的機制來判斷事務能否并行回放,通過檢測事務在運行過程中是否存在寫沖突來決定從機上的回放順序,這使得從機上的并發程度不再依賴于主機。

事實上,該機制在MySQL 5.7.20版本中就已經悄悄的應用了。5.7.20版本引入了一個重要的特性:Group Replication,通過Paxso協議在多個MySQL節點間分發binlog,使得一個事務必須在集群內大多數節點(N/2+1)上提交成功才能提交。

為了支持多主寫入,MySQL MRG在Binlog分發節點完成后,通過一個Certify階段來決定Binlog中的事務是否寫入RelayLog中。這個過程中,Certify階段采用的就是WriteSet的方式驗證事務之間是否存在沖突,同時,在寫入RelayLog時會將沒有沖突的事務的last_committed值設置為相同的值。

比如在5.7.20中,進行如下操作: 

  1. -- create a group replication cluster.  
  2. > STOP GROUP_REPLICATION; START GROUP_REPLICATION;  
  3. Query OK, 0 rows affected (9.10 sec) 
  4. -- All the next commands on the primary member of the group:  
  5. CREATE DATABASE test_ws_mgr ;  
  6. Query OK, 1 row affected (0.01 sec)  
  7. CREATE TABLE  test_ws_mgr.test ( id int primary key auto_increment, str varchar(64) not null );  
  8. Query OK, 1 row affected (0.01 sec)  
  9. INSERT INTO test_ws_mgr.test(`str`) VALUES ("a");  
  10. Query OK, 1 row affected (0.01 sec)  
  11. INSERT INTO test_ws_mgr.test(`str`) VALUES ("b");  
  12. Query OK, 1 row affected (0.01 sec)  
  13. INSERT INTO test_ws_mgr.test(`str`) VALUES ("c");  
  14. Query OK, 1 row affected (0.01 sec) 

以上代碼在一個MGR集群中創建了一個數據庫和一個InnoDB表,并插入了三條記錄。這個時候,查詢Primary節點上的Binlog可能會得到如下結果: 

  1. # mysqlbinlog mysql-bin.N | grep last_ |  sed -e 's/server id.*last/[...] last/' -e 's/.rbr_only.*/ [...]/'  
  2. #180106 19:31:59 [...] last_committed=0 sequence_number=1 [...] -- CREATE DB  
  3. #180106 19:32:02 [...] last_committed=1 sequence_number=2 [...] -- CREATE TB  
  4. #180106 19:32:05 [...] last_committed=2 sequence_number=3 [...] -- INSERT a  
  5. #180106 19:32:08 [...] last_committed=3 sequence_number=4 [...] -- INSERT b  
  6. #180106 19:32:11 [...] last_committed=4 sequence_number=5 [...] -- INSERT c 

可以看到,由于是在一個Session中,這些操作按著串行的順序有著不同的 last_committed,正常情況下,這些BinlogEvent應該在從機上同樣以串行的方式回放。我們看一下在MGR集群中的RelayLog情況: 

  1. # mysqlbinlog mysql-relay.N | grep -e last_  |  sed -e 's/server id.*last/[...] last/' -e 's/.rbr_only.*/ [...]/'  
  2. #180106 19:31:36 [...] last_committed=0 sequence_number=0 [...]  
  3. #180106 19:31:36 [...] last_committed=1 sequence_number=2 [...] -- CREATE DB  
  4. #180106 19:31:36 [...] last_committed=2 sequence_number=3 [...] -- CREATE TB  
  5. #180106 19:31:36 [...] last_committed=3 sequence_number=4 [...] -- INSERT a  
  6. #180106 19:31:36 [...] last_committed=3 sequence_number=5 [...] -- INSERT b  
  7. #180106 19:31:36 [...] last_committed=3 sequence_number=6 [...] -- INSERT c 

有趣的是,在Secondary節點的RelayLog中, 這些事務有著相同的last_committed值,也就是說這些事務在MGR集群中,回放的時候可以以并行的方式回放。

MGR中,使用的正是WriteSet技術檢測不同事務之間是否存在寫沖突,并重規劃了事務的并行回放,這一技術在8.0中被移到了Binlog生成階段,并采用到了主從復制的架構中。

四、MySQL 8.0中的并行復制

說了這么多,終于講到了MySQL 8.0 ,通過以上描述,讀者應該對MySQL 8.0中并行復制的優化的原理有了一個大致的輪廓。通過基于WriteSet的沖突檢測,在主機上產生Binlog的時候,不再基于組提交,而是基于事務本身的更新沖突來確定并行關系。

1、相關的MySQL參數

在MySQL 8.0中,該版本引入了參數binlog_transaction_depandency_tracking用于控制如何決定事務的依賴關系。

該值有三個選項:

  • 默認的COMMIT_ORDERE表示繼續使用5.7中的基于組提交的方式決定事務的依賴關系;
  • WRITESET表示使用寫集合來決定事務的依賴關系;
  • 還有一個選項WRITESET_SESSION表示使用WriteSet來決定事務的依賴關系,但是同一個Session內的事務不會有相同的last_committed值。

在代碼實現上,MySQL采用一個vector<uint64>的變量存儲已經提交的事務的HASH值,所有已經提交的事務的所修改的主鍵和非空的UniqueKey的值經過HASH后與該vector中的值對比,由此來判斷當前提交的事務是否與已經提交的事務更新了同一行,并以此確定依賴關系。該向量的大小由參數binlog_transaction_dependency_history_size控制,取值范圍為1-1000000 ,初始默認值為25000。

同時參數transaction_write_set_extraction控制檢測事務依賴關系時采用的HASH算法有三個取值OFF|XXHASH64|MURMUR32, 如binlog_transaction_depandency_tracking取值為WRITESET或WRITESET_SESSION,那么該值取值不能為OFF,且不能變更。

2、WriteSet 依賴檢測條件

WriteSet是通過檢測兩個事務是否更新了相同的記錄來判斷事務能否并行回放的,因此需要在運行時保存已經提交的事務信息以記錄歷史事務更新了哪些行。記錄歷史事務的參數為binlog_transaction_dependency_history_size。該值越大可以記錄更多的已經提交的事務信息,不過需要注意的是,這個值并非指事務大小,而是指追蹤的事務更新信息的數量。在開啟了WRITESET或WRITESET_SESSION后,MySQL按以下的方式標識并記錄事務的更新。

如果事務當前更新的行有主鍵(Primary Key),則將HASH(DB名、TABLE名、KEY名稱、KEY_VALUE1、KEY_VALUE2……)加入到當前事務的vector write_set中。

如果事務當前更新的行有非空的唯一鍵 (Unique Key Not NULL), 同樣將 HASH(DB名、TABLE名、KEY名、KEY_VALUE1)……加入到當前事務的write_set中。

如果事務更新的行有外鍵約束( FOREIGN KEY )且不為空,則將該外鍵信息與VALUE 的HASH加到當前事務的 write_set 中;如果事務當前更新的表的主鍵是其它某個表的外鍵,則設置當前事務 has_related_foreign_key = true;如果事務更新了某一行且沒有任何數據被加入到 write_set 中,則標記當前事務 has_missing_key = true。

在執行沖突檢測的時候,先會檢查has_related_foreign_key和has_missing_key , 如果為true,則退到COMMIT_ORDER模式;否則,會依照事務的write_set中的HASH值與已提交的事務的write_set進行比對。

如果沒有沖突,則當前事務與***一個已提交的事務共享相同的last_commited,否則將從全局已提交的write_set中刪除那個沖突的事務之前提交的所有write_set,并退化到COMMIT_ORDER計算last_committed 。 

在每一次計算完事務的last_committed值以后,需要去檢測當前全局已經提交的事務的write_set是否已經超過了binlog_transaction_dependency_history_size設置的值,如果超過,則清空已提交事務的全局write_set。

從檢測條件上看,該特性依賴于主鍵和唯一索引,如果事務涉及的表中沒有主鍵且沒有唯一非空索引,那么將無法從此特性中獲得性能的提升。除此之外,還需要將Binlog格式設置為Row格式。

3、性能提升

MySQL High Availability對開啟了WriteSet的復制性能做了測試,這里直接將測試結果搬運過來,有興趣的可以直接訪問原博客。

測試時通過Sysbench先在主機上執行100W條事務,然后開啟Slave的復制線程,測試環境在Xeon E5-2699-V3 16核主機上執行,以下是測試結果:

 

可以看到,在客戶端線程比較少的時候WRITESET具有***的性能,在只有一個連接時WRITESET_SESSION 和 COMMIT_ORDER差別不大。

五、結論

從MySQL Hight Availability的測試中可以看到,開啟了基于WriteSet的事務依賴后,對Slave上RelayLog回放速度提升顯著。Slave上的 RelayLog回放速度將不再依賴于Master上提交時的并行程度,使得Slave上可以發揮其***的吞吐能力,這個特性在Slave上復制停止一段時間后恢復復制時尤其有效。

這個特性使得Slave上可能擁有比Master上更大的吞吐量,同時可能在保證事務依賴關系的情況下,在Slave上產生Master上沒有產生過的提交場景,事務的提交順序可能會在Slave上發生改變。

雖然在5.7的并行復制中就可能發生這種情況,不過在8.0中由于Slave上更高的并發能力,會使該場景更加常見。

通常情況下這不是什么大問題,不過如果在Slave上做基于Binlog的增量備份,可能就需要保證在Slave上與Master上一致的提交順序,這種情況下可以開啟slave_preserve_commit_order,這是一個5.7就引入的參數,可以保證Slave上并行回放的線程按RelayLog中寫入的順序Commit。

參考

  • http://jfg-mysql.blogspot.jp/2018/01/an-update-on-write-set-parallel-replication-bug-fix-in-mysql-8-0.html
  • http://jfg-mysql.blogspot.jp/2018/01/write-set-in-mysql-5-7-group-replication.html
  • https://mysqlhighavailability.com/improving-the-parallel-applier-with-writeset-based-dependency-tracking/ 
責任編輯:龐桂玉 來源: DBAplus社群
相關推薦

2009-11-27 10:31:02

GPRS路由

2021-12-03 12:15:01

QT中文亂碼Windows

2018-09-26 11:06:56

華為云

2024-11-04 10:05:00

AI模型

2010-01-04 15:05:53

2009-01-16 10:01:57

MySQL復制特性測試

2012-12-17 11:07:22

虛擬機快照虛擬服務器備份

2023-02-27 08:08:54

Pulsar源碼重復消費

2018-09-19 16:15:18

MySQL直方圖數據庫

2010-01-14 10:19:05

2025-03-03 00:13:50

2023-11-28 08:36:16

Spring中Body讀取

2010-01-11 18:05:24

VB.NET窗體繼承

2018-05-30 08:38:24

數據庫MySQL 8.0新特性

2018-06-01 15:41:21

2018-05-31 12:52:01

數據庫MySQL 8.0新特性

2025-06-17 06:40:45

DockerDocker鏡像

2009-12-25 09:39:08

ADSL MODEM

2025-08-07 02:45:00

2025-01-13 08:09:51

Nginx管理工具DevOps
點贊
收藏

51CTO技術棧公眾號

国产探花视频在线播放| 黑人糟蹋人妻hd中文字幕| 国产一区二区三区中文字幕| 99久久激情| 精品国产一二三区| 成人综合视频在线| 免费看美女视频在线网站 | 欧美极品欧美精品欧美图片| h视频在线观看免费| 国产成人免费av在线| 欧美做受高潮1| 91在线播放观看| 亚洲小说图片| 欧美一二三四区在线| 日日摸日日碰夜夜爽av| av毛片在线看| 日本一区二区成人| 国产激情一区二区三区在线观看| 免费无码国产精品| 欧美日韩国产亚洲一区| 这里只有精品丝袜| 人妻精品久久久久中文字幕69| 亚洲啊v在线| 一区二区三区精品久久久| 日韩中文字幕一区二区| 国产av精国产传媒| 人人爽香蕉精品| 97不卡在线视频| www.99re7| 日韩欧美一区二区三区在线视频| 亚洲精品97久久| 五月婷婷六月合| 欧美xx视频| 午夜久久久久久电影| 一本—道久久a久久精品蜜桃| 三级在线播放| www.亚洲人| 成人在线看片| 国内精品偷拍视频| 国产精品一区在线观看你懂的| 国产99久久精品一区二区 夜夜躁日日躁| 免费人成在线观看| 久久精品免费一区二区三区| 中文字幕精品在线视频| 亚洲a v网站| 自拍偷拍精品| 亚洲精品一区中文| aa一级黄色片| 亚洲精品合集| 亚洲色图17p| japanese中文字幕| 精品国产精品| 一区国产精品视频| 国产一区二区三区四区在线| 欧美色女视频| 日韩亚洲在线观看| 人妻久久一区二区| 欧美黄色aaaa| 国产最新精品视频| 免费日韩一级片| 国产精品亚洲欧美| 日韩av123| 最近中文在线观看| 久久成人av少妇免费| 国产日韩欧美黄色| 国产熟女一区二区三区四区| 国产麻豆精品theporn| 亚洲最大福利网站| 六月婷婷中文字幕| 91视频免费观看| 日韩久久不卡| 免费av网站在线看| 亚洲精品ww久久久久久p站| 国产精品igao激情视频| hd国产人妖ts另类视频| 色综合久久久久久久久| 中国黄色片免费看| 136国产福利精品导航网址应用| 欧美成人video| 在线 丝袜 欧美 日韩 制服| 国产一区二区电影在线观看| www.日韩欧美| 国产精品第一页在线观看| 国产婷婷精品| 国产日韩欧美电影在线观看| 开心激情综合网| 欧美国产日本视频| 一本大道东京热无码aⅴ| 欧美卡一卡二| 在线观看亚洲精品| 极品人妻一区二区| 精品一区毛片| 欧美成人激情视频免费观看| 日本网站在线播放| 久久99深爱久久99精品| 国产精品视频入口| 视频一区二区三区国产| 国产精品国产三级国产普通话99 | 天堂在线一区二区| 91系列在线播放| 日韩在线无毛| 一区二区三区国产豹纹内裤在线| 99热成人精品热久久66| 精品国产鲁一鲁****| 亚洲欧洲视频在线| 国产亚洲成人精品| 久久精品72免费观看| 久久国产精品久久| av小次郎在线| 在线免费观看不卡av| 久久久久久久久久影视| 日本一区二区在线看| 高清亚洲成在人网站天堂| 中文字幕精品无码亚| 99久久伊人精品| 日韩video| 成人在线免费| 亚洲人成网站999久久久综合| 美国黄色小视频| 美腿丝袜一区二区三区| 免费在线观看一区二区| 韩国成人免费视频| 欧美一区二区视频免费观看| 91资源在线播放| 模特精品在线| 国产亚洲一区在线播放| caopo在线| 欧美日韩免费在线视频| 人人妻人人澡人人爽人人精品 | 欧美日韩成人在线视频| 在线观看视频中文字幕| 久久亚洲精精品中文字幕早川悠里| 狠狠噜天天噜日日噜| 国产一区二区高清在线| 最近2019免费中文字幕视频三| 亚洲精品午夜久久久久久久| 国产成人精品午夜视频免费| 中文字幕欧美人与畜| 国产69精品久久久久9999人| 夜夜躁日日躁狠狠久久88av | free性欧美| 欧美变态tickle挠乳网站| 波多野结衣亚洲色图| 国产一区二区三区香蕉| 一区中文字幕在线观看| 国产午夜精品一区在线观看| 久久国产精品久久久久| 国产乱淫av免费| 亚洲欧美日韩国产另类专区| 成人性生交视频免费观看| 午夜av一区| 91视频国产精品| 免费网站黄在线观看| 91精品国产品国语在线不卡| 国产日韩欧美在线观看视频| 国产一区二区精品久久| 国产一级大片免费看| 日韩一区网站| 97在线视频免费看| 色视频精品视频在线观看| 色欧美88888久久久久久影院| 一区二区黄色片| 美女网站色91| 性生活免费观看视频| 8848成人影院| 2019中文字幕免费视频| 国产在线一二| 欧美美女直播网站| 日本精品一区二区三区视频| jizz内谢中国亚洲jizz| 亚洲欧美一区二区三区情侣bbw| 亚洲综合图片网| 亚洲国产岛国毛片在线| 国产成人在线综合| 欧美色图首页| 精品一区二区国产| 电影一区电影二区| 欧美精品在线第一页| 人妻一区二区三区免费| 色婷婷精品久久二区二区蜜臂av| 1024手机在线观看你懂的| 国产真实乱偷精品视频免| 成人免费在线网| 国产一区二区电影在线观看| 成人亚洲激情网| av漫画网站在线观看| 亚洲欧洲日韩国产| www.国产麻豆| 91成人在线观看喷潮| 91嫩草|国产丨精品入口| 播五月开心婷婷综合| 日本熟妇人妻中出| 午夜亚洲福利| 日韩av一区二区三区美女毛片| 国产aa精品| 日本在线观看天堂男亚洲| av网站网址在线观看| 精品视频偷偷看在线观看| 亚洲天堂手机在线| 亚洲高清免费观看高清完整版在线观看 | 成人免费毛片糖心| 国产一区二区视频在线| 红桃av在线播放| 欧美成人中文| 台湾成人av| 超碰成人在线观看| 国产精品一区=区| 超碰资源在线| 久久国产精品免费视频| 二人午夜免费观看在线视频| 精品美女一区二区| 国产一区二区三区视频免费观看| 色综合久久中文综合久久97| 久久久久久久久久久久国产| 欧美国产精品v| 国产熟妇搡bbbb搡bbbb| 高清日韩电视剧大全免费| 国产免费999| 亚洲中字黄色| 久久久久免费看黄a片app| 中文字幕亚洲综合久久五月天色无吗''| 日韩成人在线资源| 色婷婷狠狠五月综合天色拍| 北条麻妃高清一区| 一区二区三区| 国产日韩欧美中文| 成人四虎影院| 国产成人综合av| 亚洲欧美se| 2019中文字幕在线观看| 蜜桃在线视频| 91禁外国网站| 九色porny丨首页入口在线| 久久久久久久久久久91| 99福利在线| 美女啪啪无遮挡免费久久网站| www.亚洲.com| 国产亚洲精品美女久久久| 偷拍自拍在线| 亚洲成人网久久久| 国产91免费看| 亚洲成人激情图| 天天干天天干天天干| 欧美精品一区二区蜜臀亚洲| 亚洲产国偷v产偷v自拍涩爱| 日韩精品中文字幕在线不卡尤物| 99热这里只有精品在线观看| 在线电影一区二区三区| 国产精品自拍电影| 日韩一卡二卡三卡国产欧美| av高清一区二区| 日韩视频123| 亚洲精品国偷拍自产在线观看蜜桃 | 国产日韩亚洲欧美综合| 无码少妇精品一区二区免费动态| 国产欧美一区二区精品仙草咪| 九九九视频在线观看| 中文一区在线播放| 婷婷社区五月天| 一区二区三区免费看视频| 久久免费视频99| 黄色一区二区在线观看| 日韩欧美成人一区二区三区 | 国产偷拍一区二区| 精品国产一区久久| 头脑特工队2在线播放| 国产一区二区黄| 黄网站app在线观看| 色综合久久悠悠| 欧美aa在线观看| 国产精品色午夜在线观看| av日韩一区| 激情小说综合网| 成人黄色小视频| 中文字幕日韩精品无码内射| 99国内精品| 久久久精品麻豆| 国产99久久久国产精品潘金 | 国产91免费在线观看| 国产午夜精品久久久| 在线视频三区| 欧美国产亚洲精品久久久8v| 在线看片国产福利你懂的| 国产精品嫩草影院一区二区| 视频精品一区| 人禽交欧美网站免费| 亚洲国产精品久久久天堂| 黄色一级在线视频| 美女视频黄 久久| 在线免费看黄色片| 国产精品乱人伦一区二区| 久久亚洲成人av| 在线欧美日韩国产| 亚洲成人第一区| 日韩中文字幕免费看| 国产亚av手机在线观看| 国产精品久久久久久久久久免费| 国产亚洲精aa在线看| 日韩免费毛片| 伊人精品视频| 色天使在线观看| 久久蜜臀中文字幕| 婷婷色中文字幕| 欧美日韩一级片网站| 天堂а在线中文在线无限看推荐| 俺去啦;欧美日韩| 欧美办公室脚交xxxx| 亚洲淫片在线视频| 欧洲激情综合| 国产在线播放观看| 国产麻豆日韩欧美久久| jizz中文字幕| 午夜婷婷国产麻豆精品| a网站在线观看| 搡老女人一区二区三区视频tv| 中文字幕色婷婷在线视频| 99久久伊人精品影院| 日韩视频在线观看| 国产成人久久婷婷精品流白浆| 国产成人亚洲综合a∨猫咪| 欧美另类69xxxx| 91九色最新地址| 五月婷婷丁香网| 欧美黄色性视频| 美女精品视频在线| 伊人色综合影院| 欧美a一区二区| 一级黄色片大全| 欧美日韩国产专区| 人人妻人人澡人人爽精品日本| 久久精品人人做人人爽| 成人免费在线观看视频| 新呦u视频一区二区| 久久久成人网| 一本加勒比北条麻妃| 欧美日韩性生活视频| 神马午夜精品95| 97免费视频在线播放| 精品三级av在线导航| 日本熟妇人妻xxxx| 成人午夜视频福利| 久久国产精品二区| 日韩欧美国产综合在线一区二区三区| 成人在线影视| 亚洲综合精品一区二区| 午夜国产一区| 日本成人xxx| 一区二区三区在线不卡| 亚洲av少妇一区二区在线观看| 欧美理论电影在线播放| 五月亚洲婷婷| 日本在线xxx| 91小视频免费观看| 中文字幕在线欧美| 中文字幕日韩综合av| 黄色欧美视频| 在线观看污视频| 成人一区二区三区| 欧美不卡视频在线观看| 日韩大片免费观看视频播放 | 91免费精品视频| 永久亚洲成a人片777777| 激情小说欧美色图| 精品人伦一区二区三区蜜桃网站| 丝袜视频国产在线播放| 国产精品99免视看9| 水蜜桃精品av一区二区| 一级片免费在线观看视频| 亚洲成人免费影院| 欧美大片aaa| 国产在线视频一区| 国内揄拍国内精品久久| 少妇一级淫免费观看| 91久久国产最好的精华液| 精品国产丝袜高跟鞋| 国产伦精品一区二区三区免费视频| 99热这里只有成人精品国产| av黄色在线免费观看| 欧美精品一级二级三级| 岛国毛片av在线| 日韩欧美一区二区三区四区| 国产一区二区三区免费在线观看| 久久一二三四区| 亚洲乱码国产乱码精品精天堂| 国产人妖一区| 人妻少妇精品无码专区二区| 国产农村妇女毛片精品久久麻豆 | 中文字幕精品视频在线观看| 色999日韩欧美国产| 好吊妞视频这里有精品| 嫩草影院国产精品| 亚洲一卡二卡三卡四卡无卡久久| 韩国中文免费在线视频| 亚洲最大福利网站| 日韩电影在线一区二区三区| 国产亚洲精品久久777777| 一区二区亚洲精品国产| 高清精品xnxxcom| av中文字幕网址| 色婷婷狠狠综合|