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

MySQL Repeatable-Read 實(shí)現(xiàn)的一些誤解

數(shù)據(jù)庫(kù) MySQL
對(duì)于 first-committer-wins 的定義, 在si 模式下, 如果在Start-Timestamp -> Commit-Timestamp 這之間如果有其他的trx2 修改了當(dāng)前trx1 修改過(guò)的內(nèi)容, 并且在trx1 提交的時(shí)候, trx2 已經(jīng)提交了. 那么trx1 就會(huì)abort, 這個(gè)叫first-committer-wins。
背景

首先1992 年發(fā)表的SQL Standard 對(duì)隔離級(jí)別進(jìn)行的定義是根據(jù)幾個(gè)異象(Dirty Read, Non-Repeatable Read, Phantom Read) , 當(dāng)然這個(gè)定義非常模糊, 后面Jim Grey 也有文章說(shuō)這個(gè)不合理, 然而此時(shí)MVCC, snapshot isolation 還沒(méi)被發(fā)明. 等有snapshot isolation 以后發(fā)現(xiàn)snapshot isolation 能夠規(guī)避Dirty Read, Non-Repeatable Read, 因此認(rèn)為snapshot isolation 和 Repeatable-read 很像, 所以MySQL, Pg 把他們實(shí)現(xiàn)的snapshot isolation 就稱為了Repeatable-read isolation.

另外snapshot isolation 其實(shí)也沒(méi)有準(zhǔn)確的定義, 因此MySQL 和 PG, Oracle 等等的實(shí)現(xiàn)也是有很大的區(qū)別的.

關(guān)于snapshot isolation 的定義:

A transaction running in Snapshot Isolation is never blocked attempting a read as long as the snapshot data from its Start-Timestamp can be maintained.The transaction’s writes (updates, inserts, and deletes) will also be reflected in this snapshot, to be read again if the transaction accesses (i.e., reads or updates) the data a second time.

這里對(duì)于snapshot isolation 的定義不論對(duì)于讀操作和寫操作都是讀取snapshot 的版本, 這也是pg, oracle 等等版本實(shí)現(xiàn)的, 但是InnoDB 不是這樣的. InnoDB 只有讀操作讀取到的是snapshot 的版本, 但是DML 操作是讀取當(dāng)前已提交的最新版本.

When the transaction T1 is ready to commit, it gets a Commit-Timestamp, which is larger than any existing Start-Timestamp or Commit-Timestamp. The transaction successfully commits only if no other transaction T2 with a Commit-Timestamp in T1’s execution interval [Start- Timestamp, Commit-Timestamp] wrote data that T1 also wrote. Otherwise, T1 will abort. This feature, called First- committer-wins prevents lost updates (phenomenon P4).

對(duì)于 first-committer-wins 的定義, 在si 模式下, 如果在Start-Timestamp -> Commit-Timestamp 這之間如果有其他的trx2 修改了當(dāng)前trx1 修改過(guò)的內(nèi)容, 并且在trx1 提交的時(shí)候, trx2 已經(jīng)提交了. 那么trx1 就會(huì)abort, 這個(gè)叫first-committer-wins.

但是InnoDB 也不是這樣的. InnoDB 并不遵守這個(gè)規(guī)則, 在repeatable read 模式下, 如果trx1, trx2 都修改了同一行, trx2 是先提交的, 那么trx1 的提交會(huì)直接把trx2 覆蓋. 而在類似PG, Oracle 實(shí)現(xiàn)的snapshot isolation 里面, 則是遵守first-committer-wins 的規(guī)則.

所以InnoDB 的snapshot isolation

  1. 僅僅Read 操作讀的是歷史版本

不遵守first-committer-wins 規(guī)則

官方把這種實(shí)現(xiàn)叫做Write committed Repeatable Read.

MySQL 開發(fā)者對(duì)于InnoDB repeatable-read 實(shí)現(xiàn)的介紹:

But when InnoDB Repeatable Read transactions modify the database, it is possible to get phantom reads added into the static view of the database, just as the ANSI description allows.  Moreover, InnoDB relaxes the ANSI description for Repeatable Read isolation in that it will also allow non-repeatable reads during an UPDATE or DELETE.  Specifically, it will write to newly committed records within its read view.  And because of gap locking, it will actually wait on other transactions that have pending records that may become committed within its read view.  So not only is an UPDATE or DELETE affected by pending or newly committed records that satisfy the predicate, but also ‘SELECT … LOCK IN SHARE MODE’ and ‘SELECT … FOR UPDATE’.

This WRITE COMMITTED implementation of REPEATABLE READ is not typical of any other database that I am aware of.  But it has some real advantages over a standard ‘Snapshot’ isolation.  When an update conflict would occur in other database engines that implement a snapshot isolation for Repeatable Read, an error message would typically say that you need to restart your transaction in order to see the current data. So the normal activity would be to restart the entire transaction and do the same changes over again.  But InnoDB allows you to just keep going with the current transaction by waiting on other records which might join your view of the data and including them on the fly when the UPDATE or DELETE is done.  This WRITE COMMITTED implementation combined with implicit record and gap locking actually adds a serializable component to Repeatable Read isolation.

PG 社區(qū)對(duì)于repeatable-read 實(shí)現(xiàn)的介紹:

UPDATE, DELETE, SELECT FOR UPDATE, and SELECT FOR SHARE commands behave the same as SELECT in terms of searching for target rows: they will only find target rows that were committed as of the transaction start time. However, such a target row might have already been updated (or deleted or locked) by another concurrent transaction by the time it is found. In this case, the repeatable read transaction will wait for the first updating transaction to commit or roll back (if it is still in progress). If the first updater rolls back, then its effects are negated and the repeatable read transaction can proceed with updating the originally found row. But if the first updater commits (and actually updated or deleted the row, not just locked it) then the repeatable read transaction will be rolled back with the message

https://www.postgresql.org/docs/13/transaction-iso.html#XACT-READ-COMMITTED

所以這里我們看一下MySQL repeatable-read 的具體行為, 也了解MySQL社區(qū)為什么要做這樣的實(shí)現(xiàn).

mysql> create table checking (name char(20) key, balance int) engine InnoDB;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into checking values ("Tom", 1000), ("Dick", 2000), ("John", 1500);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

Client #1                               Client #2
=====================================   =====================================
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from checking;
+------+---------+
| name | balance |
+------+---------+
| Dick |    2000 |
| John |    1500 |
| Tom  |    1000 |
+------+---------+
3 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update checking
   set balance = balance - 250
   where name = "Dick";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update checking
   set balance = balance + 250
   where name = "Tom";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from checking;
+------+---------+
| name | balance |
+------+---------+
| Dick |    1750 |
| John |    1500 |
| Tom  |    1250 |
+------+---------+
3 rows in set (0.02 sec)
                                        mysql> begin;
                                        Query OK, 0 rows affected (0.00 sec)

                                        mysql> select * from checking;
                                        +------+---------+
                                        | name | balance |
                                        +------+---------+
                                        | Dick |    2000 |
                                        | John |    1500 |
                                        | Tom  |    1000 |
                                        +------+---------+
                                        3 rows in set (0.00 sec)

                                        mysql> update checking
                                           set balance = balance - 200
                                           where name = "John";
                                        Query OK, 1 row affected (0.00 sec)
                                        Rows matched: 1  Changed: 1  Warnings: 0

                                        mysql> update checking
                                           set balance = balance + 200
                                           where name = "Tom";

                                        ### Client 2 waits on the locked record
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
                                        Query OK, 1 row affected (19.34 sec)
                                        Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from checking;
+------+---------+
| name | balance |
+------+---------+
| Dick |    1750 |
| John |    1500 |
| Tom  |    1250 |
+------+---------+
3 rows in set (0.00 sec)
                                        mysql> select * from checking;
                                        +------+---------+
                                        | name | balance |
                                        +------+---------+
                                        | Dick |    2000 |
                                        | John |    1300 | 
                                        | Tom  |    1450 |
                                        +------+---------+
                                        3 rows in set (0.00 sec)

                                      # 這里可以看到Tom = 1450, 而不是從上面 1000 + 200 = 1200, 
                                      # 因?yàn)閡pdate 的時(shí)候, InnoDB 實(shí)現(xiàn)的是write-committed repeatable, 
                                      # 不是基于場(chǎng)景的snapshot isolation的實(shí)現(xiàn), 
                                      # write 操作是直接讀取的已提交的最新版本的數(shù)據(jù)1250, 
                                      # 而不是snapshot 中的數(shù)據(jù)1000.

                                        mysql> commit;
                                        Query OK, 0 rows affected (0.00 sec)

mysql> select * from checking;
+------+---------+
| name | balance |
+------+---------+
| Dick |    1750 |
| John |    1300 |
| Tom  |    1450 |
+------+---------+
3 rows in set (0.02 sec)

這里可以看到Tom = 1450, 而不是從上面 1000 + 200 = 1200, 因?yàn)閡pdate 的時(shí)候, InnoDB 實(shí)現(xiàn)的是write-committed repeatable, 不是基于場(chǎng)景的snapshot isolation的實(shí)現(xiàn), write 操作是直接讀取的已提交的最新版本的數(shù)據(jù)1250, 而不是snapshot 中的數(shù)據(jù)1000.

對(duì)比在PG里面, 由于PG是使用常見(jiàn)的 snapshot isolation 實(shí)現(xiàn)repeatable-read, 那么trx2 在修改Tom 的時(shí)候, 同樣必須等待trx1 commit or rollback, 因?yàn)镻G 讀取和修改基于trx 開始時(shí)候的snapshot 的record. 因此如果trx1 rollback, 那么trx2 則會(huì)基于開始snapshot 時(shí)候的值進(jìn)行修改, 也就是Tom = 1200, 如果trx1 commit, 那么trx2 只能rollback, 并且會(huì)返回

ERROR:  could not serialize access due to concurrent update

也就是在上面的場(chǎng)景下 trx2 是會(huì)rollback.

那么MySQL 為什么要這么做呢?

MySQL 社區(qū)的觀點(diǎn)是在常見(jiàn)的通過(guò)snapshot isolation 來(lái)實(shí)現(xiàn)repeatable Read 的方案里面, 經(jīng)常會(huì)出現(xiàn)如果兩個(gè)事務(wù)修改了同一個(gè)record, 那么就需要后提交的事務(wù)重試這個(gè)流程. 這種在小事務(wù)場(chǎng)景是可以接受的, 但是如果后提交的事務(wù)是大事務(wù), 比如trx1 修改了1個(gè)record rec1并先提交了, 但是trx2 修改了100 行, 正好包含了rec1, 那么常見(jiàn)的snapshot isolation 的實(shí)現(xiàn)就需要trx2 返回錯(cuò)誤, 然后重新執(zhí)行這個(gè)事務(wù). 這樣對(duì)沖突多的場(chǎng)景是特別不友好的.

但是Innodb 的實(shí)現(xiàn)則在修改rec1 的時(shí)候, 如果trx1 已經(jīng)提交了, 那么直接讀取trx1 committed 的結(jié)果, 這樣就可以避免了讓trx2 重試的過(guò)程了. 也可以達(dá)到幾乎一樣的效果.

當(dāng)然這個(gè)僅僅MySQL InnoDB 是這樣的實(shí)現(xiàn), 其他的數(shù)據(jù)庫(kù)都不會(huì)這樣.

兩種方案都有優(yōu)缺點(diǎn)吧, 基于常見(jiàn)SI(snapshot isolation) 實(shí)現(xiàn)會(huì)存在更多的事務(wù)回滾, 一旦兩個(gè)事務(wù)修改了同一個(gè)row, 那么必然有一個(gè)事務(wù)需要回滾, 但是InnoDB 的行為可以允許和其他trx 修改同一個(gè)record, 并且可以在其他trx 修改后的結(jié)果上進(jìn)行更新, 不需要進(jìn)行事務(wù)回滾, 效率會(huì)更高一些, 但是基于常見(jiàn)的snapshot isolation 的實(shí)現(xiàn)更符合直觀感受.

責(zé)任編輯:武曉燕 來(lái)源: MySQL內(nèi)核剖析
相關(guān)推薦

2018-10-29 10:25:17

物聯(lián)網(wǎng)IoT誤解

2011-11-28 15:57:26

MySQL數(shù)據(jù)庫(kù)主從配置

2021-06-11 16:59:41

MySQLRepeatableRead

2017-10-16 14:40:50

數(shù)據(jù)庫(kù)MySQL工具

2011-10-11 17:10:35

MySQL

2018-10-23 13:58:56

私有云云計(jì)算公共云

2019-08-13 16:01:12

2024-08-29 15:26:21

2021-09-12 07:33:23

python管理編程

2022-04-02 14:43:59

Promethues監(jiān)控

2021-06-17 09:16:34

MySQL數(shù)據(jù)庫(kù)隔離級(jí)別

2020-08-07 08:04:03

數(shù)據(jù)庫(kù)MySQL技術(shù)

2010-10-08 16:32:59

MySQL語(yǔ)句

2022-03-22 07:38:00

SQL語(yǔ)句MySQL

2010-05-24 18:22:36

jsp MySQL

2020-02-03 16:03:36

疫情思考

2013-07-02 10:18:20

編程編程策略

2016-11-16 21:18:42

android日志

2009-06-25 09:50:32

JSF

2011-06-01 16:50:21

JAVA
點(diǎn)贊
收藏

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

欧美二区在线观看| 懂色av蜜臀av粉嫩av分享吧| 日韩中文字幕无砖| 久久青草国产手机看片福利盒子 | 91久久精品久久国产性色也91| www日韩在线| 久久电影在线| 色激情天天射综合网| 中文字幕精品一区日韩| 天天色天天操天天射| 蜜臀久久99精品久久久久宅男| 久久夜色精品国产| 韩国三级与黑人| 综合在线影院| 洋洋av久久久久久久一区| 久久爱av电影| 国产裸体永久免费无遮挡| 亚洲久久成人| 久久国产色av| 三叶草欧洲码在线| 免费观看在线一区二区三区| 色婷婷精品大在线视频| 成人毛片100部免费看| 极品白浆推特女神在线观看 | 综合一区av| 精品少妇一区二区| 免费黄色特级片| 男女免费观看在线爽爽爽视频| gogo大胆日本视频一区| 成人免费观看网址| 中文字幕无码乱码人妻日韩精品| 欧美在线亚洲综合一区| 日韩在线免费高清视频| 亚洲精品乱码久久久久久久| 亚洲国产中文在线| 在线视频欧美精品| 尤物av无码色av无码| 亚洲区欧洲区| 伊人性伊人情综合网| 特级西西444www大精品视频| 毛片在线播放网址| 97久久精品人人澡人人爽| 亚洲自拍av在线| 中文字幕人妻色偷偷久久| 视频在线观看一区| 国产精品pans私拍| 91视频免费网址| 亚洲人成久久| 91国产在线精品| 私库av在线播放| 波多野结衣在线播放一区| 亚洲欧美日韩一区二区在线| 日本一区二区在线观看视频| 人人九九精品视频| 欧美一区二区三区在线观看| 狠狠爱免费视频| 欧美办公室脚交xxxx| 中文字幕亚洲视频| 国产一区二区三区无遮挡| 国产黄色美女视频| 国产精品一区三区| 国产美女久久精品| 青青国产在线视频| 麻豆精品久久久| 国产精品亚洲网站| 伊人婷婷久久| 欧美成人一二三区| 激情成人亚洲| 97不卡在线视频| 免费无遮挡无码永久在线观看视频| 久久亚洲在线| 久久精品国产久精国产思思| 久久久久久久久久久久久女过产乱| 欧美国产激情| 91精品国产乱码久久久久久蜜臀 | 丝袜美腿美女被狂躁在线观看| 久久久亚洲欧洲日产国码αv| 精品国产乱码久久久久| 亚洲精品一区二区三区新线路 | 日韩高清一二三区| 国内露脸中年夫妇交换精品| 亚洲精品美女久久| 日韩女同一区二区三区| 欧美+日本+国产+在线a∨观看| 久久久久久久久久久久av| 日本一区二区三区四区五区| 久久婷婷激情| 国产一区二区香蕉| 成人午夜精品福利免费| 国产视频一区在线观看| 超级碰在线观看| 欧美成a人片在线观看久| 欧美男男青年gay1069videost| 国产亚洲精品成人a| 精品亚洲免a| 日韩高清人体午夜| 五月综合色婷婷| 国产精品尤物| 97免费资源站| 成年人视频在线看| 亚洲色图欧洲色图| 欧美一级片免费播放| 久草在线资源福利站| 欧美日韩精品欧美日韩精品一 | 曰本一区二区三区视频| 亚洲变态欧美另类捆绑| 国产伦理片在线观看| 成人中文在线| 欧美与欧洲交xxxx免费观看| 精品人妻伦一区二区三区久久| 欧洲亚洲一区二区| 亚洲天堂一二三| 精东粉嫩av免费一区二区三区| 国内一区二区在线视频观看| 国精产品一区| 一道本成人在线| 国产69视频在线观看| 男人女人黄一级| 另类一区二区三区| 亚洲欧美国产一区二区三区| 久久久精品国产sm调教| 国产精品日韩精品欧美精品| 91入口在线观看| 日本视频在线观看| 五月婷婷综合网| 免费看国产黄色片| 免费成人高清在线视频theav| 久久久久久久久电影| 国产视频一区二区三区四区五区| 久久久久久久久蜜桃| 丁香花在线影院观看在线播放| 国产精一区二区| 色婷婷综合久久久久| 亚洲永久精品在线观看| av电影天堂一区二区在线观看| 国产激情在线看| 欧美日韩五区| 亚洲精品小视频| 中文在线观看免费网站| 国产精品69毛片高清亚洲| 亚洲精品影院| 黄色日韩网站| 国产亚洲一级高清| 久久影视中文字幕| 中文字幕精品在线不卡| 日韩中文字幕免费在线| 国产精品极品| 久久久免费电影| 91亚洲精品在线观看| 国产成人久久精品77777综合| 国产精品国产三级国产aⅴ中文 | 亚洲欧美春色| 欧美日韩在线播放一区二区| 神马久久资源| 亚洲日韩欧美视频| 日本三级午夜理伦三级三| 国产91精品露脸国语对白| 日韩一级片一区二区| 日韩高清一区| 欧美激情三级免费| 午夜一区在线观看| 91福利在线导航| 国产乱色国产精品免费视频| 中文字幕一区二区中文字幕| 另类一区二区| 欧美成人精品h版在线观看| 国产成人精品一区二区无码呦| 亚洲黄色录像片| 欧美午夜精品理论片| 99久久影视| 99re视频| www.综合| 国产亚洲aⅴaaaaaa毛片| 久久这里只有精品9| 中文字幕日韩欧美一区二区三区| 亚洲精品久久一区二区三区777| 国产真实久久| 久久66热这里只有精品| 精品国产免费人成网站| 日韩电影免费观看中文字幕| 伊人手机在线视频| 国产精品电影院| 国产国语老龄妇女a片| 在线亚洲自拍| 影音先锋在线亚洲| 深夜福利视频在线免费观看| 桥本有菜av在线| 欧亚av在线| 日韩国产精品一区| 中文字幕+乱码+中文乱码www| 国产精品免费网站在线观看| 人妻精油按摩bd高清中文字幕| 亚洲一区二区毛片| 亚洲精品一区二区毛豆| 91日韩一区二区三区| 久久久久久九九| 91成人在线| 色七七影院综合| 天天射天天操天天干| 欧美性猛交xxxx免费看漫画| 内射毛片内射国产夫妻| 国产成人8x视频一区二区| 日本www高清视频| 亚洲视频免费| 久久大香伊蕉在人线观看热2| 亚洲欧洲专区| 国产成人精品电影| 国产精品xx| 欧美成人午夜剧场免费观看| 国产一二三区在线视频| 欧美精品一区二区三区蜜桃 | 一区二区三区四区乱视频| 亚洲性夜色噜噜噜7777| 中文字幕二区三区| 亚洲妇女屁股眼交7| 精品人妻一区二区三区蜜桃视频| 国产精品99精品久久免费| 一级特黄性色生活片| 一区二区亚洲| 久久国产精品免费观看| 啪啪亚洲精品| 狠狠久久综合婷婷不卡| 在线观看18视频网站| 国产精品视频首页| 国产精品www网站| 欧美办公室脚交xxxx| 欧美激情久久久久| 影音先锋在线视频| 色94色欧美sute亚洲线路一ni | 欧美午夜一区二区| 欧美日本韩国一区二区三区| 亚洲天堂网站| 国产成人精品视频| www在线观看黄色| 久久久久久国产精品三级玉女聊斋| 麻豆视频在线观看免费网站| 中国china体内裑精亚洲片| 韩国中文免费在线视频| 欧美不卡一区二区三区| 国产三级按摩推拿按摩| 在线成人高清不卡| 国产又黄又大又爽| 在线播放中文字幕一区| 一级黄色片在线| 欧美视频一区二区三区在线观看 | 欧美美女网站色| 中文精品久久久久人妻不卡| 在线观看成人免费视频| 五月婷婷开心网| 午夜欧美视频在线观看| 91.com视频| 天天天天天天天天操| 亚洲免费观看高清| 91香蕉国产视频| 日韩美女视频一区二区 | 日本电影亚洲天堂| 日本中文字幕一区二区| 国产精品96久久久久久| 欧美亚洲二区| 成人午夜在线视频一区| 视频一区在线| 精品伦精品一区二区三区视频| 久久精品论坛| 日本午夜精品一区二区三区| 欧美一站二站| 午夜精品亚洲一区二区三区嫩草 | 日本高清不卡码| 欧美亚洲禁片免费| 国产精品一品二区三区的使用体验| 欧美精品 日韩| 国产又粗又长视频| 亚洲精品一区二区三区99| 午夜影院在线视频| 上原亚衣av一区二区三区| 成人影院www在线观看| 久久久噜噜噜久久久| 欧美××××黑人××性爽 | 已婚少妇美妙人妻系列| 老色鬼精品视频在线观看播放| 日韩一区二区电影| 日韩三级一区二区| 在线播放欧美女士性生活| 亚洲毛片在线播放| 亚洲欧美中文日韩v在线观看| 麻豆视频免费在线观看| 欧美激情极品视频| 精品成人免费一区二区在线播放| 91牛牛免费视频| 少妇高潮一区二区三区| 亚洲国产一区二区三区在线| 狠狠干综合网| 免费观看日韩毛片| 狠狠狠色丁香婷婷综合久久五月| 中文字幕免费在线播放| 国产精品久久久久久久久免费相片 | www.xxx亚洲| 国产成人在线视频播放| 亚洲精品国产精品国自产网站| 亚洲激情五月婷婷| 免费精品一区二区| 亚洲成人av片| 国产在线69| 国产精品99导航| 国产三级一区| 精品国产免费一区二区三区| 国产精品久久占久久| 日日碰狠狠躁久久躁婷婷| 国产精品一二三在| 玖玖爱在线观看| 亚洲综合一二区| 97人妻精品一区二区三区动漫| 亚洲美女又黄又爽在线观看| 色网站免费在线观看| 国产99视频在线观看| youjizz欧美| 三级在线免费观看| 久久成人18免费观看| 成人免费91在线看| 午夜视频在线看| 欧美激情在线有限公司| www.久久爱.com| 久久综合中文色婷婷| 亚洲人成久久| 五月天丁香社区| 亚洲一区二区中文在线| 免费在线不卡av| 国产香蕉精品视频一区二区三区| 在线黄色的网站| 九九九九九九精品| 国产精品久久久久久久| 久热精品在线播放| 国产欧美日韩视频一区二区| 天堂а√在线中文在线新版| 日韩av在线网站| 超碰在线中文字幕| 国产99午夜精品一区二区三区| 天天射天天综合网| 波多野结衣xxxx| 国产精品丝袜91| 亚洲网站在线免费观看| 在线观看不卡av| www.久久| 一区二区三区四区久久| 国内精品伊人久久久久影院对白| 成人欧美一区二区三区黑人一| 欧美视频在线一区二区三区 | 亚洲人精品一区| 国产色片在线观看| 美女999久久久精品视频| 2020国产精品极品色在线观看| 欧美另类videosbestsex日本| 丝袜亚洲另类丝袜在线| 91精品久久久久久久久久久久| 日本韩国视频一区二区| av免费在线一区二区三区| 欧美精品video| 神马日本精品| 男人插女人下面免费视频| 国产精品久久久久久久久免费相片| 97人妻精品一区二区三区动漫| 久久99国产精品自在自在app| 国产精品白浆| 91色琪琪电影亚洲精品久久| 丰满大乳少妇在线观看网站| 国产欧美一区二区视频| 宅男噜噜噜66一区二区| 性高潮久久久久久久| 欧美日韩高清一区二区不卡| free性欧美hd另类精品| 国产精品一级久久久| 亚洲欧美不卡| 制服丨自拍丨欧美丨动漫丨| 日韩欧美一级在线播放| xxxx另类黑人| 国内精品二区| 免费美女久久99| 麻豆一区二区三区精品视频| 日韩精品中文在线观看| av在线一区不卡| 一区二区在线观| 成人国产精品视频| 日日夜夜狠狠操| 在线亚洲男人天堂| 视频精品国内| 久久久999免费视频| 国产午夜精品一区二区三区视频| 久久久久久无码午夜精品直播| 色一区av在线| 久久精品色综合| 免费涩涩18网站入口| 亚洲一区二区三区小说| 天堂av在线7| 国产日韩在线精品av| 在线精品亚洲| 91香蕉视频网| 亚洲精品美女久久久久| 欧美xxxx性| 97国产精东麻豆人妻电影 | 麻豆av免费观看| 日韩色视频在线观看|