国产精品青草久-国产精品情侣愉拍-国产精品区网红主-国产精品区一区二-国产精品热久久-国产精品热热热-国产精品人aⅴ-国产精品人成在线-国产精品人妻人伦-国产精品人人

金喜正规买球

理解MySQL——架構(gòu)與概念

原創(chuàng)|其它|編輯:郝浩|2009-10-19 10:26:32.000|閱讀 590 次

概述:寫在前面:最早接觸的MySQL是在三年前,那時(shí)候MySQL還是4.x版本,很多功能都不支持,比如,存儲(chǔ)過(guò)程,視圖,觸發(fā)器,更別說(shuō)分布式事務(wù)等復(fù)雜特性了。

# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

寫在前面:最早接觸的MySQL是在三年前,那時(shí)候MySQL還是4.x版本,很多功能都不支持,比如,存儲(chǔ)過(guò)程,視圖,觸發(fā)器,更別說(shuō)分布式事務(wù)等復(fù)雜特性了。但從5.0(2005年10月)開始,MySQL漸漸步入企業(yè)級(jí)數(shù)據(jù)庫(kù)的行列了;復(fù)制、集群、分區(qū)、分布式事務(wù),這些企業(yè)級(jí)的特性,使得現(xiàn)在的MySQL,完全可以應(yīng)用于企業(yè)級(jí)應(yīng)用環(huán)境(很多互聯(lián)網(wǎng)公司都用其作為數(shù)據(jù)庫(kù)服務(wù)器,盡管節(jié)約成本是一個(gè)因素,但是沒有強(qiáng)大功能作后盾,則是不可想象的)。雖然,MySQL還有很多不足,比如,復(fù)制、分區(qū)的支持都十分有限、查詢優(yōu)化仍需要改進(jìn),但是MySQL已經(jīng)是一個(gè)足夠好的DBMS了,更何況它是opensource的。這段時(shí)間沒有事,出于好奇,略微的研究了一下MySQL,積累了一些資料,欲總結(jié)出來(lái)。這些資料打算分為兩部分,上部主要討論MySQL的優(yōu)化,其中主要參考了《MySQL Manual》和《High Performance MySQL》,如果有時(shí)間,以后在下部分析一下MySQL的源碼。如果你是MySQL高手,希望你不吝賜教;如果你是新手,希望對(duì)你有用。

 

第一章、MySQL架構(gòu)與概念
1、MySQL的邏輯架構(gòu)

 最上面不是MySQL特有的,所有基于網(wǎng)絡(luò)的C/S的網(wǎng)絡(luò)應(yīng)用程序都應(yīng)該包括連接處理、認(rèn)證、安全管理等。
中間層是MySQL的核心,包括查詢解析、分析、優(yōu)化和緩存等。同時(shí)它還提供跨存儲(chǔ)引擎的功能,包括存儲(chǔ)過(guò)程、觸發(fā)器和視圖等。
最下面是存儲(chǔ)引擎,它負(fù)責(zé)存取數(shù)據(jù)。服務(wù)器通過(guò)storage engine API可以和各種存儲(chǔ)引擎進(jìn)行交互。

1.1、查詢優(yōu)化和執(zhí)行(Optimization and Execution)

MySQL將用戶的查詢語(yǔ)句進(jìn)行解析,并創(chuàng)建一個(gè)內(nèi)部的數(shù)據(jù)結(jié)構(gòu)——分析樹,然后進(jìn)行各種優(yōu)化,例如重寫查詢、選擇讀取表的順序,以及使用哪個(gè)索引等。查詢優(yōu)化器不關(guān)心一個(gè)表所使用的存儲(chǔ)引擎,但是存儲(chǔ)引擎會(huì)影響服務(wù)器如何優(yōu)化查詢。優(yōu)化器通過(guò)存儲(chǔ)引擎獲取一些參數(shù)、某個(gè)操作的執(zhí)行代價(jià)、以及統(tǒng)計(jì)信息等。在解析查詢之前,服務(wù)器會(huì)先訪問(wèn)查詢緩存(query cache)——它存儲(chǔ)SELECT語(yǔ)句以及相應(yīng)的查詢結(jié)果集。如果某個(gè)查詢結(jié)果已經(jīng)位于緩存中,服務(wù)器就不會(huì)再對(duì)查詢進(jìn)行解析、優(yōu)化、以及執(zhí)行。它僅僅將緩存中的結(jié)果返回給用戶即可,這將大大提高系統(tǒng)的性能。

 1.2、并發(fā)控制
MySQL提供兩個(gè)級(jí)別的并發(fā)控制:服務(wù)器級(jí)(the server level)和存儲(chǔ)引擎級(jí)(the storage engine level)。加鎖是實(shí)現(xiàn)并發(fā)控制的基本方法,MySQL中鎖的粒度:
(1)    表級(jí)鎖:MySQL獨(dú)立于存儲(chǔ)引擎提供表鎖,例如,對(duì)于ALTER TABLE語(yǔ)句,服務(wù)器提供表鎖(table-level lock)。
(2)    行級(jí)鎖:InnoDB和Falcon存儲(chǔ)引擎提供行級(jí)鎖,此外,BDB支持頁(yè)級(jí)鎖。InnoDB的并發(fā)控制機(jī)制,下節(jié)詳細(xì)討論。
另外,值得一提的是,MySQL的一些存儲(chǔ)引擎(如InnoDB、BDB)除了使用封鎖機(jī)制外,還同時(shí)結(jié)合MVCC機(jī)制,即多版本兩階段封鎖協(xié)議(Multiversion two-phrase locking protocal),來(lái)實(shí)現(xiàn)事務(wù)的并發(fā)控制,從而使得只讀事務(wù)不用等待鎖,提高了事務(wù)的并發(fā)性。
注:并發(fā)控制是DBMS的核心技術(shù)之一(實(shí)際上,對(duì)于OS也一樣),它對(duì)系統(tǒng)性能有著至關(guān)重要的影響,以后再詳細(xì)討論。

1.3、事務(wù)處理
MySQL中,InnoDB和BDB都支持事務(wù)處理。這里主要討論InnoDB的事務(wù)處理(關(guān)于BDB的事務(wù)處理,也十分復(fù)雜,以前曾較為詳細(xì)看過(guò)其源碼,以后有機(jī)會(huì)再討論)。
1.3.1、事務(wù)的ACID特性
事務(wù)是由一組SQL語(yǔ)句組成的邏輯處理單元,事務(wù)具有以下4個(gè)屬性,通常簡(jiǎn)稱為事務(wù)的ACID屬性(Jim Gray在《事務(wù)處理:概念與技術(shù)》中對(duì)事務(wù)進(jìn)行了詳盡的討論)。
(1)原子性(Atomicity):事務(wù)是一個(gè)原子操作單元,其對(duì)數(shù)據(jù)的修改,要么全都執(zhí)行,要么全都不執(zhí)行。
(2)一致性(Consistent):在事務(wù)開始和完成時(shí),數(shù)據(jù)都必須保持一致狀態(tài)。這意味著所有相關(guān)的數(shù)據(jù)規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持?jǐn)?shù)據(jù)的完整性;事務(wù)結(jié)束時(shí),所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如B樹索引或雙向鏈表)也都必須是正確的。
(3)隔離性(Isolation):數(shù)據(jù)庫(kù)系統(tǒng)提供一定的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的“獨(dú)立”環(huán)境執(zhí)行。這意味著事務(wù)處理過(guò)程中的中間狀態(tài)對(duì)外部是不可見的,反之亦然。
(4)持久性(Durable):事務(wù)完成之后,它對(duì)于數(shù)據(jù)的修改是永久性的,即使出現(xiàn)系統(tǒng)故障也能夠保持。
1.3.2、事務(wù)處理帶來(lái)的相關(guān)問(wèn)題
由于事務(wù)的并發(fā)執(zhí)行,帶來(lái)以下一些著名的問(wèn)題:
(1)更新丟失(Lost Update):當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),由于每個(gè)事務(wù)都不知道其他事務(wù)的存在,就會(huì)發(fā)生丟失更新問(wèn)題--最后的更新覆蓋了由其他事務(wù)所做的更新。
(2)臟讀(Dirty Reads):一個(gè)事務(wù)正在對(duì)一條記錄做修改,在這個(gè)事務(wù)完成并提交前,這條記錄的數(shù)據(jù)就處于不一致狀態(tài);這時(shí),另一個(gè)事務(wù)也來(lái)讀取同一條記錄,如果不加控制,第二個(gè)事務(wù)讀取了這些“臟”數(shù)據(jù),并據(jù)此做進(jìn)一步的處理,就會(huì)產(chǎn)生未提交的數(shù)據(jù)依賴關(guān)系。這種現(xiàn)象被形象地叫做"臟讀"。
(3)不可重復(fù)讀(Non-Repeatable Reads):一個(gè)事務(wù)在讀取某些數(shù)據(jù)后的某個(gè)時(shí)間,再次讀取以前讀過(guò)的數(shù)據(jù),卻發(fā)現(xiàn)其讀出的數(shù)據(jù)已經(jīng)發(fā)生了改變、或某些記錄已經(jīng)被刪除了!這種現(xiàn)象就叫做“不可重復(fù)讀”。
(4)幻讀(Phantom Reads):一個(gè)事務(wù)按相同的查詢條件重新讀取以前檢索過(guò)的數(shù)據(jù),卻發(fā)現(xiàn)其他事務(wù)插入了滿足其查詢條件的新數(shù)據(jù),這種現(xiàn)象就稱為“幻讀”。
1.3.3、事務(wù)的隔離性
SQL2標(biāo)準(zhǔn)定義了四個(gè)隔離級(jí)別。定義語(yǔ)句如下:
SET TRANSACTION ISOLATION LEVEL
[READ UNCOMMITTED |
READ COMMITTED  |
REPEATABLE READ  |
SERIALIZABLE ]
這與Jim Gray所提出的隔離級(jí)別有點(diǎn)差異。其中READ UNCOMMITTED即Jim的10(瀏覽);READ COMMITTED即20,游標(biāo)穩(wěn)定性;REPEATABLE READ為2.99990隔離(沒有幻像保護(hù));SERIALIZABLE隔離級(jí)別為30,完全隔離。SQL2標(biāo)準(zhǔn)默認(rèn)為完全隔離(30)。各個(gè)級(jí)別存在問(wèn)題如下:

隔離級(jí)

臟讀

不可重復(fù)讀

幻象讀

讀未提交

(Read uncommitted)

可能

可能

可能

讀提交

(Read committed)

不可能

可能

可能

可重復(fù)讀

(Repeatable read)

不可能

不可能

可能

可串行化

(Serializable)

不可能

不可能

不可能

各個(gè)具體數(shù)據(jù)庫(kù)并不一定完全實(shí)現(xiàn)了上述4個(gè)隔離級(jí)別,例如,Oracle只提供READ COMMITTED和Serializable兩個(gè)標(biāo)準(zhǔn)隔離級(jí)別,另外還提供自己定義的Read only隔離級(jí)別;SQL Server除支持上述ISO/ANSI SQL92定義的4個(gè)隔離級(jí)別外,還支持一個(gè)叫做“快照”的隔離級(jí)別,但嚴(yán)格來(lái)說(shuō)它是一個(gè)用MVCC實(shí)現(xiàn)的Serializable隔離級(jí)別。MySQL 支持全部4個(gè)隔離級(jí)別,其默認(rèn)級(jí)別為Repeatable read,但在具體實(shí)現(xiàn)時(shí),有一些特點(diǎn),比如在一些隔離級(jí)別下是采用MVCC一致性讀。國(guó)產(chǎn)數(shù)據(jù)庫(kù)DM也支持所有級(jí)別,其默認(rèn)級(jí)別為READ COMMITTED。
 

1.3.4、InnoDB的鎖模型
InnoDB的行級(jí)鎖有兩種類型:
(1)共享鎖(shared lock,S):允許一個(gè)事務(wù)去讀一行,阻止其他事務(wù)獲得相同數(shù)據(jù)集的排他鎖。
(2)排它鎖(exclusive lock,X):允許獲得排它鎖的事務(wù)更新數(shù)據(jù),阻止其他事務(wù)取得相同數(shù)據(jù)集的共享讀鎖和排他寫鎖。
此外,InnoDB支持多粒度加鎖(multiple granularity locking),從而允許對(duì)記錄和表同時(shí)加鎖。為此,InnoDB引入意向鎖(intention locks),意向鎖是針對(duì)表的:
(1)意向共享鎖(IS):事務(wù)打算給數(shù)據(jù)行加行共享鎖,事務(wù)在給一個(gè)數(shù)據(jù)行加共享鎖前必須先取得該表的IS鎖。
(2)意向排他鎖(IX):事務(wù)打算給數(shù)據(jù)行加行排他鎖,事務(wù)在給一個(gè)數(shù)據(jù)行加排他鎖前必須先取得該表的IX鎖。
例如,SELECT ... LOCK IN SHARE MODE加IS鎖,SELECT ... FOR UPDATE加IX鎖,意向鎖的規(guī)則如下:
(1)事務(wù)在對(duì)表T中的記錄獲取S鎖前,先要獲取表T的IS鎖或者更強(qiáng)的鎖;
(2)事務(wù)在獲取表T中記錄的X鎖前,先要獲取表T的IX鎖。
InnoDB的鎖相容性矩陣:

 如果一個(gè)事務(wù)請(qǐng)求的鎖模式與當(dāng)前的鎖兼容,InnoDB就將請(qǐng)求的鎖授予該事務(wù);反之,如果兩者不兼容,該事務(wù)就要等待鎖釋放。意向鎖只會(huì)阻塞其它事務(wù)對(duì)表的請(qǐng)求,例如,LOCK TABLES …WRITE,意向鎖的主要目的是表明該事務(wù)將要或者正在對(duì)表中的記錄加鎖。使用封鎖機(jī)制來(lái)進(jìn)行并發(fā)控制,一個(gè)比較重要的問(wèn)題就是死鎖。
來(lái)看一個(gè)死鎖的例子:

1-1

Session 1

Session 2

mysql> CREATE TABLE t (i INT) ENGINE = InnoDB;

Query OK, 0 rows affected (0.22 sec)

 

mysql> INSERT INTO t (i) VALUES(1);

Query OK, 1 row affected (0.08 sec)

 

mysql> START TRANSACTION;

Query OK, 0 rows affected (0.00 sec)

 

mysql> SELECT * FROM t WHERE i = 1 LOCK IN SHARE MODE;

+------+

| i    |

+------+

|    1 |

+------+

1 row in set (0.01 sec)

 

mysql>

 

 

mysql> START TRANSACTION;

Query OK, 0 rows affected (0.00 sec)

 

mysql> DELETE FROM t WHERE i = 1;

等待

mysql> DELETE FROM t WHERE i = 1;

等待

 

 

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

Query OK, 1 row affected (0.00 sec)

 

 

 1.3.5、一致性非阻塞讀
一致性讀是MySQL的重要特點(diǎn)之一,InnoDB通過(guò)MVCC機(jī)制表示數(shù)據(jù)庫(kù)某一時(shí)刻的查詢快照,查詢可以看該時(shí)刻之前提交的事務(wù)所做的改變,但是不能看到該時(shí)刻之后或者未提交事務(wù)所做的改變。但是,查詢可以看到同一事務(wù)中之前語(yǔ)句所做的改變,例如:

1-2

Session 1

Session 2

mysql> select * from t;

Empty set (0.00 sec)

 

mysql> INSERT INTO t (i) VALUES(1);

Query OK, 1 row affected (0.00 sec)

 

mysql> select * from t;

+------+

| i    |

+------+

|    1 |

+------+

1 row in set (0.00 sec)

 

mysql> set autocommit = 0;

Query OK, 0 rows affected (0.01 sec)

 

mysql> update t set i=3;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from t;

+------+

| i    |

+------+

|    3 |

+------+

1 row in set (0.00 sec)

 

 

mysql> set autocommit = 0;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from t;

+------+

| i    |

+------+

|    1 |

+------+

1 row in set (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.06 sec)

 

 

mysql> select * from t;

+------+

| i    |

+------+

|    1 |

+------+

1 row in set (0.00 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from t;

+------+

| i    |

+------+

|    3 |

+------+

1 row in set (0.00 sec)

 

 如果事務(wù)的隔離級(jí)別為REPEATABLE READ(默認(rèn)),同一個(gè)事務(wù)中的所有一致性讀都是讀的事務(wù)的第一次讀操作創(chuàng)建的快照。你可以提交當(dāng)前事務(wù),然后在新的查詢中即可看到最新的快照,如上所示。
如果事務(wù)的隔離級(jí)別為READ COMMITTED,一致性讀只是對(duì)事務(wù)內(nèi)部的讀操作和它自己的快照而言的,結(jié)果如下:

1-3

Session 1

Session 2

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

Query OK, 0 rows affected (0.01 sec)

 

mysql> set autocommit = 0;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from t;

+------+

| i    |

+------+

|    3 |

+------+

1 row in set (0.00 sec)

 

 

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

Query OK, 0 rows affected (0.01 sec)

 

mysql> set autocommit = 0;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from t;

+------+

| i    |

+------+

|    3 |

+------+

1 row in set (0.00 sec)

mysql> update t set i=5;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

 

 

mysql> select * from t;

+------+

| i    |

+------+

|    3 |

+------+

1 row in set (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.06 sec)

 

 

mysql> select * from t;

+------+

| i    |

+------+

|    5 |

+------+

1 row in set (0.00 sec)

 

 注意,session 2發(fā)生了不可重復(fù)讀。
當(dāng)InnoDB在READ COMMITTED 和REPEATABLE READ隔離級(jí)別下處理SELECT語(yǔ)句時(shí),一致性讀是默認(rèn)的模式。一致性讀不會(huì)對(duì)表加任何鎖,所以,其它連接可以同時(shí)改變表。
假設(shè)事務(wù)處于REPEATABLE READ級(jí)別,當(dāng)你正在進(jìn)行一致性讀時(shí),InnoDB根據(jù)查詢看到的數(shù)據(jù)給你一個(gè)時(shí)間點(diǎn)。如果其它的事務(wù)在該時(shí)間點(diǎn)之后刪除一行,且提交事務(wù),你不會(huì)看到行已經(jīng)被刪除,插入和更新操作一樣。但是,InnoDB與其它DBMS的不同是,在REPEATABLE READ隔離級(jí)別下并不會(huì)造成幻像。
一致性讀不與DROP TABLE 或者 ALTER TABLE一起工作。
在nodb_locks_unsafe_for_binlog變量被設(shè)置或者事務(wù)的隔離級(jí)別不是SERIALIZABLE的情況下,InnoDB對(duì)于沒有指定FOR UPDATE 或 LOCK IN SHARE MODE的INSERT INTO ... SELECT, UPDATE ... (SELECT), 和CREATE TABLE ... SELECT語(yǔ)句使用一致性讀,在這種情況下,查詢語(yǔ)句不會(huì)對(duì)表中的元組加鎖。否則,InnoDB將使用鎖。

1.3.6、SELECT ... FOR UPDATE和SELECT ... LOCK IN SHARE MODE的加鎖讀(locking read)
在一些場(chǎng)合,一致性讀并不是很方便,此時(shí),可以用加鎖讀。InnoDB支持兩種加鎖讀:
(1)    SELECT ... LOCK IN SHARE MODE:對(duì)讀取的元組加S鎖。
(2)    SELECT ... FOR UPDATE:在掃描索引記錄的過(guò)程中,會(huì)阻塞其它連接的SELECT ...LOCK IN SHARE MODE和一定事務(wù)隔離級(jí)別下的讀操作。
InnoDB使用兩階段封鎖協(xié)議,事務(wù)直到提交或回滾時(shí)才會(huì)釋放所有的鎖,這都是系統(tǒng)自動(dòng)執(zhí)行的。此外,MySQL支持LOCK TABLES和UNLOCK TABLES,但這些都是在服務(wù)器層實(shí)現(xiàn)的,而不是在存儲(chǔ)引擎。它們有用處,但是不能取代存儲(chǔ)引擎完成事務(wù)處理,如果你需要事務(wù)功能,請(qǐng)使用事務(wù)型存儲(chǔ)引擎。
來(lái)考慮locking read的應(yīng)用,假設(shè)你要在表child插入一個(gè)新的元組,并保證child中的記錄在表parent有一條父記錄。如果你用一致性讀來(lái)讀parent表,確實(shí)可以將要插入的child row的parent row,但是可以安全的插入嗎?不,因?yàn)樵谀阕xparent表時(shí),其它連接可能已經(jīng)刪除該記錄。(一致性讀是針對(duì)事務(wù)內(nèi)而言的,對(duì)于數(shù)據(jù)庫(kù)的狀態(tài),它應(yīng)該叫做“不一致性讀”)
此時(shí),就可以使用SELECT LOCK IN SHARE MODE,它會(huì)對(duì)讀取的元組加S鎖,從而防止其它連接刪除或更新元組。另外,如果你想在查詢的同時(shí),進(jìn)行更新操作,可以使用SELECT ... FOR UPDATE,它讀取最新的數(shù)據(jù),然后對(duì)讀到的元組加X鎖。此時(shí),使用SELECT ... LOCK IN SHARE MODE不是一個(gè)好主意,因?yàn)榇藭r(shí)如果有兩個(gè)事務(wù)進(jìn)行這樣的操作,就會(huì)造成死鎖。
注:SELECT ... FOR UPDATE僅在自動(dòng)提交關(guān)閉(即手動(dòng)提交)時(shí)才會(huì)對(duì)元組加鎖,而在自動(dòng)提交時(shí),符合條件的元組不會(huì)被加鎖。

1.3.7、記錄鎖(record lok)、間隙鎖(gap lock)和后碼鎖(next-key lock)
InnoDB有以下幾種行級(jí)鎖:
(1)記錄鎖:對(duì)索引記錄(index records)加鎖,InnoDB行級(jí)鎖是通過(guò)給索引的索引項(xiàng)加鎖來(lái)實(shí)現(xiàn)的,而不是對(duì)記錄實(shí)例本身加鎖。如果表沒有定義索引,InnoDB創(chuàng)建一個(gè)隱藏的聚簇索引,然后用它來(lái)實(shí)現(xiàn)記錄加鎖(關(guān)于索引與加鎖之間的關(guān)系的詳細(xì)介紹請(qǐng)看下一章)。
(2)間隙鎖:對(duì)索引記錄之間的區(qū)間,或者第一個(gè)索引記錄之前的區(qū)間和最后一個(gè)索引之后的區(qū)間加鎖。
(3)后碼鎖:對(duì)索引記錄加記錄鎖,且對(duì)索引記錄之前的區(qū)間加鎖。
默認(rèn)情況下,InnoDB的事務(wù)工作在REPEATABLE READ的隔離級(jí)別,而且系統(tǒng)變量innodb_locks_unsafe_for_binlog為關(guān)閉狀態(tài)。此時(shí),InnoDB使用next-key鎖進(jìn)行查找和索引掃描,從而達(dá)到防止“幻像”的目的。
Next-key鎖是記錄鎖和間隙的結(jié)合體。當(dāng)InnoDB查找或掃描表的索引時(shí),對(duì)它遇到的索引記錄加S鎖或者X鎖,所以,行級(jí)鎖(row-level lock)實(shí)際上就是索引記錄鎖(index-record lock);此外,它還對(duì)索引記錄之前的區(qū)間加鎖。也就是說(shuō),next-key鎖是索引記錄鎖,外加索引記錄之前的區(qū)間的間隙鎖。如果一個(gè)連接對(duì)索引中的記錄R持有S或X鎖,其它的連接不能按照索引的順序在R之前的區(qū)間插入一個(gè)索引記錄。
假設(shè)索引包含以下值:10, 11,13和20,則索引的next-key鎖會(huì)覆蓋以下區(qū)間(“(”表示不包含,“[”表示包含):
(negative infinity, 10]
(10, 11]
(11, 13]
(13, 20]
(20, positive infinity)
對(duì)于最后一個(gè)區(qū)間,next-key鎖將鎖住索引最大值以上的區(qū)間,上界虛記錄(“supremum” pseudo-record)的值比索引中的任何值都大,其實(shí),上界不是一個(gè)真實(shí)的索引記錄,所以,next-lock將對(duì)索引的最大值之后的區(qū)間加鎖。

間隙鎖對(duì)查詢唯一索引中的唯一值是沒有必要的,例如,id列有唯一索引,則下面的查詢僅對(duì)id=100的元組加索引記錄鎖(index-record lock),而不管其它連接是否在之前的區(qū)間插入元組。
SELECT * FROM child WHERE id = 100;
如果id沒有索引,或者非唯一索引,則語(yǔ)句會(huì)鎖住之前的空間。

例1-4
Session 1
Session 2
mysql> create unique index i_index on t(i);
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from t;
+------+
| i    |
+------+
|    4 |
|   10 |
+------+
2 rows in set (0.00 sec)
 
 
 
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select i from t where i =10 lock in share mode;
+------+
| i    |
+------+
|   10 |
+------+
1 row in set (0.00 sec)
mysql> insert into t(i) values(9);
Query OK, 1 row affected (0.03 sec)
 
 
mysql> select * from t;
+------+
| i    |
+------+
|    4 |
|    9 |
|   10 |
+------+
3 rows in set (0.00 sec)


 上例中,產(chǎn)生了幻像問(wèn)題。如果將唯一查詢變成范圍查詢,結(jié)果如下(接上例的索引):

 

1-5

Session 1

Session 2

mysql> select * from t;

+------+

| i    |

+------+

|    4 |

|    9 |

|   10 |

+------+

3 rows in set (0.00 sec)

 

 

mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)

mysql> select i from t where i>4 lock in share mode;

+------+

| i    |

+------+

|    9 |

|   10 |

+------+

2 rows in set (0.00 sec)

mysql> insert into t(i) values(1);

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

mysql> insert into t(i) values(8);

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

 

 可以看到,session 2 的next-key使得在i=4之前的區(qū)間和之后的插入都被阻塞。
另外,如果刪除索引i_index,則結(jié)果如下:

1-6

Session 1

Session 2

mysql> drop index i_index on t;

Query OK, 3 rows affected (0.25 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from t;

+------+

| i    |

+------+

|    4 |

|   10 |

|    9 |

+------+

3 rows in set (0.00 sec)

 

 

mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select i from t lock in share mode;

+------+

| i    |

+------+

|    4 |

|   10 |

|    9 |

+------+

3 rows in set (0.00 sec)

mysql> insert into t(i) values(8);

等待。。。

 

 

 另外,針對(duì)插入(INSERT)操作,只要多個(gè)事務(wù)不會(huì)在同一索引區(qū)間的同一個(gè)位置插入記錄,它們就不用互相等待,這種情況可以稱為插入意向間隙鎖(insertion intention gap lock)。例如,索引記錄的值為4和7,兩個(gè)獨(dú)立的事務(wù)分別插入5和6,僅管它們都持有4—7之間的間隙鎖,但是它們不會(huì)相互阻塞。這可以提高事務(wù)的并發(fā)性。

 

1-7

Session 1

Session 2

mysql> select * from t;

+------+

| i    |

+------+

|    4 |

|   10 |

|    9 |

|    8 |

+------+

4 rows in set (0.00 sec)

 

mysql> create unique index i_index on t(i);

Query OK, 4 rows affected (0.34 sec)

Records: 4 Duplicates: 0 Warnings: 0

 

mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)

 

 

mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into t(i) values(5);

Query OK, 1 row affected (0.00 sec)

 

 

mysql> insert into t(i) values(5);

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

mysql> insert into t(i) values(6);

Query OK, 1 row affected (0.00 sec)

 間隙鎖是可以顯示關(guān)閉的,如果你將事務(wù)的隔離級(jí)別設(shè)為READ COMMITTED,或者打開innodb_locks_unsafe_for_binlog系統(tǒng)變量,間隙鎖就會(huì)關(guān)閉。在這種情況下,查找或掃描索引僅會(huì)進(jìn)行外鍵約束檢查和重復(fù)鍵值檢查。
此外,READ COMMITTED隔離級(jí)別和關(guān)閉nodb_locks_unsafe_for_binlog還有另外一個(gè)負(fù)作用:MySQL會(huì)釋放掉不匹配Where條件的記錄鎖。例如,對(duì)于UPDATE語(yǔ)句,InnoDB只能進(jìn)行“半一致性(semi_consistent)讀”,所以,它會(huì)返回最新提交事務(wù)所做改變,從而產(chǎn)生不可重復(fù)讀和幻像問(wèn)題。

1.3.8、使用next-key lock防止幻像問(wèn)題
例1-4展示了一個(gè)幻像問(wèn)題。使用next-key鎖的select語(yǔ)句可以解決幻像問(wèn)題,但例1-4的之所以會(huì)產(chǎn)生總是在于唯一索引,使得select語(yǔ)句沒有使用gap lock,而只使用了index-record lock。

1.4、存儲(chǔ)引擎
插件式存儲(chǔ)引擎是MySQL最重要特性之一,也是最不同于其它DBMS的地方。MySQL支持很多存儲(chǔ)引擎,以適用于不同的應(yīng)用需求,常用的包括MyISAM、InnoDB、BDB、MEMORY、MERGE、NDB Cluster等。其中,BDB和NDB Cluster提供事務(wù)支持。
MySQL默認(rèn)的存儲(chǔ)引擎為MyISAM,當(dāng)然,創(chuàng)建表的時(shí)候可以指定其它的存儲(chǔ)引擎,你可以在同一個(gè)數(shù)據(jù)庫(kù)中對(duì)不同的表使用不同的存儲(chǔ)引擎(這是非常強(qiáng)大而獨(dú)特的特性)。可以通過(guò)SHOW TABLE STATUS命令查詢表所使用的存儲(chǔ)引擎,例如,查看mysql數(shù)據(jù)庫(kù)的user表:

 

mysql> SHOW TABLE STATUS LIKE 'user' \G

*************************** 1. row ***************************

 ;          Name: user

         Engine: MyISAM

        Version: 10

     Row_format: Dynamic

           Rows: 4

 Avg_row_length: 61

    Data_length: 244

Max_data_length: 281474976710655

   Index_length: 2048

      Data_free: 0

 Auto_increment: NULL

    Create_time: 2009-06-16 21:50:34

    Update_time: 2009-09-30 14:59:08

     Check_time: NULL

      Collation: utf8_bin

       Checksum: NULL

 Create_options:

        Comment: Users and global privileges

1 row in set (0.00 sec)

 Name:表的名稱;
Engine:表使用的存儲(chǔ)引擎;
Row_format:記錄的格式。MyISAM支持三種不同的存儲(chǔ)格式:靜態(tài)(固定長(zhǎng)度)表(默認(rèn)格式)、動(dòng)態(tài)表及壓縮表。靜態(tài)表的字段都是固定長(zhǎng)度的,例如CHAR和INTEGER;動(dòng)態(tài)表的字段可以是變長(zhǎng)的,例如,VARCHAR或者BLOB。
Rows:表中記錄的數(shù)量。
Avg_row_length:記錄的平均長(zhǎng)度(字節(jié)數(shù));
Data_length:表中數(shù)據(jù)的全部字節(jié)數(shù);
Max_data_length:表中數(shù)據(jù)最大的字節(jié)數(shù);
Index_length:索引消耗的磁盤空間;
Data_free:對(duì)于MyISAM表,表示已經(jīng)分配但還沒有使用的空間;該空間包含以前刪除的記錄留下的空間,可以被INSERT操作重用。
Auto_increment:下一個(gè)自增的值。
Check_time:上次使用CHECK TABLE或myisamchk檢查表的時(shí)間。

1.4.1、MyISAM
1.4.1.1、存儲(chǔ)
MySQL的默認(rèn)存儲(chǔ)引擎,性能與功能的折中,包括全文索引(full-text index)、數(shù)據(jù)壓縮,支持空間(GIS)數(shù)據(jù),但是,不支持事務(wù)和行級(jí)鎖。一般來(lái)說(shuō),MyISAM更適用于大量查詢操作。如果你有大量的插入、刪除操作,你應(yīng)該選擇InnoDB。
每個(gè)表包含3個(gè)文件:
(1).frm:表定義文件,對(duì)于其它存儲(chǔ)引擎也一樣。
(2).MYD文件:數(shù)據(jù)文件。
(3).MYI文件:索引文件。
可以在創(chuàng)建表時(shí)通過(guò)DATA DIRECTORY和INDEX DIRECTORY為數(shù)據(jù)文件和索引文件指定路徑,它們可以位于不同目錄。另外,MyISAM的存儲(chǔ)格式是跨平臺(tái)的,你可以將數(shù)據(jù)文件和索引文件從Intel平臺(tái)拷貝到PPC或者SPARC平臺(tái)。
5.0中,MyISAM的變長(zhǎng)記錄表默認(rèn)處理256TB數(shù)據(jù),使用6字節(jié)的指針來(lái)指向數(shù)據(jù)記錄;而之前的版本使用默認(rèn)的4字節(jié)指針,所以只能處理4GB數(shù)據(jù)。所有的版本都可以將指針增加到8字節(jié)指針,如果你想改變MyISAM表的指針的大小,可以通過(guò)設(shè)置MAX_ROWS和AVG_ROW_LENGTH來(lái)實(shí)現(xiàn):
CREATE TABLE mytable (
   a    INTEGER  NOT NULL PRIMARY KEY,
   b    CHAR(18) NOT NULL
) MAX_ROWS = 1000000000 AVG_ROW_LENGTH = 32;
上面的例子中,MySQL將至少可以存儲(chǔ)32GB的數(shù)據(jù)。可以查看一下表的信息:

mysql> SHOW TABLE STATUS LIKE 'mytable' \G

*************************** 1. row ***************************

           Name: mytable

         Engine: MyISAM

     Row_format: Fixed

       ;    Rows: 0

 Avg_row_length: 0

    Data_length: 0

Max_data_length: 98784247807

   Index_length: 1024

      Data_free: 0

 Auto_increment: NULL

    Create_time: 2002-02-24 17:36:57

    Update_time: 2002-02-24 17:36:57

     Check_time: NULL

 ;Create_options: max_rows=1000000000 avg_row_length=32

        Comment:

1 row in set (0.05 sec)

可以看到,Create_options列出了創(chuàng)建時(shí)的選項(xiàng),而且該表的最大的數(shù)據(jù)量為91GB。你可以用ALTER TABLE來(lái)改變指針的大小,但是那會(huì)導(dǎo)致表和索引的重建,這會(huì)花費(fèi)很長(zhǎng)的時(shí)間。

1.4.1.2、MyISAM的特性
(1)鎖與并發(fā)性:MyISAM只有表級(jí)鎖,不支持行級(jí)鎖。所以不適合于大量的寫操作,但是它支持并發(fā)插入(concurrent inserts),這是一個(gè)非常重要且有用的特性。
(2)自動(dòng)修復(fù):MySQL支持自動(dòng)檢查和修復(fù)MyISAM表。
(3)手動(dòng)修復(fù):你可以使用CHECK TABLE檢查表的狀態(tài),并用REPAIR TABLE修復(fù)表。
(4)索引:你可以為BLOB和TEXT的前500個(gè)字符創(chuàng)建索引。而且,MyISAM還支持全文索引,但僅限于CHAR、VARCHAR、和TEXT列。
(5)延遲鍵寫(Delayed key writes):如果創(chuàng)建MyISAM表時(shí)指定DELAY_KEY_WRITE,MySQL在查詢結(jié)束時(shí),不會(huì)將改變的索引數(shù)據(jù)寫入磁盤,而將修改保存在key buffer中。只有要改變緩存或者關(guān)閉表時(shí),才會(huì)把索引數(shù)據(jù)刷入磁盤。

1.4.2、InnoDB
InnoDB是一個(gè)高性能的事務(wù)存儲(chǔ)引擎,此外,BDB也支持事務(wù)處理(關(guān)于BDB,以前曾較為詳細(xì)的閱讀過(guò)其源碼,以后有時(shí)間再討論),它有以下一些特點(diǎn):
1.4.2.1、表空間
InnoDB存儲(chǔ)表和索引有兩種方式:
(1)共享表空間存儲(chǔ):這種方式下,表的定義位于.frm文件中,數(shù)據(jù)和索引保存在innodb_data_home_dir和innodb_data_file_path指定的表空間中。
(2)多表空間存儲(chǔ):表的定義仍位于.frm文件,但是,每個(gè)InnoDB表和它的索引在它自己的文件(.idb)中,每個(gè)表有它自己的表空間。
對(duì)那些想把特定表格移到分離物理磁盤的用戶,或者那些希望快速恢復(fù)單個(gè)表的備份而無(wú)須打斷其余InnoDB表的使用的用戶,使用多表空間會(huì)是有益的。你可以往my.cnf的[mysqld]節(jié)添加下面行來(lái)允許多表空間:
[mysqld]
innodb_file_per_table
重啟服務(wù)器之后,InnoDB存儲(chǔ)每個(gè)新創(chuàng)建的表到表格所屬于的數(shù)據(jù)庫(kù)目錄下它自己的文件tbl_name.ibd里。這類似于MyISAM存儲(chǔ)引擎所做的,但MyISAM 把表分成數(shù)據(jù)文件tbl_name.MYD和索引文件tbl_name.MYI。對(duì)于InnoDB,數(shù)據(jù)和所以被一起存到.ibd文件。tbl_name.frm文件照舊依然被創(chuàng)建。
如果你從my.cnf文件刪除innodb_file_per_table行,并重啟服務(wù)器,InnoDB在共享的表空間文件里再次創(chuàng)建表。
innodb_file_per_table只影響表的創(chuàng)建。如果你用這個(gè)選項(xiàng)啟動(dòng)服務(wù)器,新表被用.ibd文件來(lái)創(chuàng)建,但是你仍舊能訪問(wèn)在共享表空間里的表。如果你刪掉這個(gè)選項(xiàng),新表在共享表空間內(nèi)創(chuàng)建,但你仍舊可以訪問(wèn)任何用多表空間創(chuàng)建的表。
InnoDB總是需要共享表空間,.ibd文件對(duì)InnoDB不足以去運(yùn)行,共享表空間包含熟悉的ibdata文件,InnoDB把內(nèi)部數(shù)據(jù)詞典和undo日志放在這個(gè)文件中。

1.4.2.2、外鍵約束
MySQL中,支持外鍵的存儲(chǔ)引擎只有InnoDB,在創(chuàng)建外鍵時(shí),要求被參照表必須有對(duì)應(yīng)的索引,參照表在創(chuàng)建外鍵時(shí)也會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的索引。

1.4.2.3、MVCC與后碼鎖(next-key locking)
InnoDB將MVCC機(jī)制與next-key lock結(jié)合起來(lái),實(shí)現(xiàn)事務(wù)的各個(gè)隔離級(jí)別,這是非常用意思的。在nodb_locks_unsafe_for_binlog變量被設(shè)置或者事務(wù)的隔離級(jí)別不是SERIALIZABLE的情況下,InnoDB對(duì)于沒有指定FOR UPDATE 或 LOCK IN SHARE MODE的INSERT INTO ... SELECT, UPDATE ... (SELECT), 和CREATE TABLE ... SELECT語(yǔ)句使用一致性讀(參照前面),在這種情況下,查詢語(yǔ)句不會(huì)對(duì)表中的元組加鎖。否則,InnoDB將使用鎖。


標(biāo)簽:

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn

文章轉(zhuǎn)載自:博客園

為你推薦

掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
国产av无码专区亚洲awww | 国产99久久久国产精免费 | 成人自拍视频免 | 爱豆传媒免费全集在线看 | 国产99久久亚洲综合精品西 | 99爱视频在线观看免费播放 | 深夜二个少妇精油按摩到高潮 | 亚洲aⅴ天堂av天堂无码app | 亚洲aⅴ无码天堂在线观看 亚洲aⅴ无码专区在线观看 | 欧美成人精品三级网站在线观看 | 亚洲无码精品免费一区 | 亚洲欧美国产一 | 日韩免费无码视频一区二区三 | 亚洲精品www久久久久久 | 99精品国产高清一区二区 | 午夜亚洲av永久无码精品 | 国产精品99无码一区二区 | 精品国产综合久久久久 | 国产成人精品一区二区三区不卡 | 成全影视 | 成人黄色网站视频麻豆8 | 国产欧美另类久久久精品区 | 国产sm系列在线观看 | 国产亚洲成归v人片在线观看 | 国产成人精品国产成人亚洲 | 99国产精品免费观看 | 午夜成人网站在线观看 | 九九精品视频久久 | 91看片无限制版下载v1.2.1 | 亚洲精品日韩 | 成人一区专区在 | 亚洲a视频在线观看 | 国产精品不卡无码av在线播放 | 最新看片国产精品免费在线 | 成人午夜视频在线观看 | 亚洲成a人片在线观看高清 亚洲成a人片在线观看国产 | 国产91精品一区二区麻豆亚洲 | 国内精品91少妇在线播放 | 对白在线观看 | 久久99精品久久久久久久清纯 | 蝌蚪国产窝视频在线播放 | 成人国产亚洲精品a区天堂 成人国产一区二区 | 少妇人妻久久 | 黄桃av无码免费一区二区三区 | a级成人免费毛片完整 | 午夜毛片不| 亚洲午夜精品久久久久久成年 | 狠狠色噜 | 国产免费久久精品99re丫y | 国产不卡高清视频在线观看 | 国产精品午夜男女大片免费看 | 亚洲欧美色一 | 日韩一区二区中文字幕 | 国产在线拍揄自揄视精品一区 | 国产午夜福利在线永久视频 | 国产熟女一区二区三区浪潮 | 国产成人亚洲综合精品 | 欧美高清国产一区二区三区 | 欧美高清milf在线 | 午夜视频在线观看 | 亚洲每日更新在线国产精品原 | 国产综合精 | 成人深夜福利在 | 国产白浆精品永久网站 | 国产精品国产三级在线专区 | 亚洲国产av一区二区三区 | 亚洲久热无码av中文字幕 | 在线看片免费人成视频 | 日韩午夜影院在线观看 | 亚洲日本成本人观看 | 国产在线播放精品 | 熟女肏互换91视频成人电影 | 97色伦图片97综 | 欧美色蜜桃97中文字幕在线播放 | 99精品久久毛片a片 99精品免费在线观看 | 国产免费一区二区三区香蕉精 | 精品日韩中文字幕 | 91精品国产入口 | 国产一区二区不卡 | 国产女人| 91狠狠色综合久久久夜色撩人 | 日本亚洲欧洲免费无线码 | 亚洲av中字免费在 | 国产在线观看91精品不卡 | 国产美女裸体无遮掩免费牛牛 | 99久久精品免费看国产一区乱理片 | 中文亚洲av片在线观看不卡 | 日本高清一级婬片a级中文字幕 | 日本有码在线中文字幕 | 日本japa| 国产福利一区二区免费视频 | 国产av大陆精品一区二区三区 | 欧美高潮喷水hd | 97无码免费人妻超级碰碰碰碰 | jk白丝极品被cao | 国产av无码专区亚汌a√ | 亚洲国产一成久久精品国产成人综合 | 午夜在线欧美曰韩精品影视 | 午夜亚洲av永久无码精品 | av片亚洲国产男人的天堂 | 最新天堂√最新版中文在线99 | 成人午夜福利 | 亚洲无码在线播放 | 99re精彩视频 | 福利视频网站 | 91在线永久入口 | 亚洲精品无码专区在线播放 | 无码中文字幕aⅴ免费费放 无码中文字幕精品推荐 | 国产极品精品免费视频能看 | 欧美亚洲精品一级毛淫片 | 国内精品九九久久精品 | 99精品久久99久久久久 | 无码国产精品午夜福利v | 国产露脸对白91精品 | 国产乱人视频在线观看ktv | 成人欧美精品久久久久影院 | 亚洲阿v天堂202 | 日本理论午夜中文字幕 | 免费无码又爽又刺激视频在线 | 国产aⅴ精品福利一区二区三区 | 国产欧美日韩中文字幕第一页 | 丝袜美腿一区二区三区 | 日韩精品视 | 国产精品第九页 | 日韩aⅴ精品一 | 一级欧美伦奷 | 97影院| 日韩成人免费观看在线 | 日韩极品av人人爽 | 成人午夜福利视频后入 | 亚洲精品国产精品乱码不99 | 中文字幕日本人妻久久久免费 | 十八禁动漫 | 在线观看成人视频免费 | 中文字幕在线中文字幕一区 | 日韩精品成人av高清在线观看 | 国产免费一区二区三区 | 亚洲av日韩专区在线观看 | 偷拍拍自欧美色区另类 | 国产欧美在线播放视频免费 | 日韩精品搭讪在线视频播放 | 精品国产乱码久久久久久一区 | 91尤物在线观看免费 | 黄网站色视频大全免费看 | 欧美亚洲国产日韩一二三区 | 国产精品久久久久精品三级a | 国产欧美日韩一区二区三区在线 | www.狠狠爱| 日韩久久精品无码av | 精品国产美女福利到在线不 | 少妇粉嫩| 国产激情免费在线观看片 | 午夜尤物禁止18点击进入 | 日本大片免a费观看视频老师 | 91一区二区三区 | 国产精品午夜一级毛片密呀 | 91视频免费版app下载 | 国产精品国产三级国产v剧情 | 亚洲男人在线观看无码 | 日本高清视频www夜色资源 | 美女粉嫩流水一区二区三区 | 精品一区二区三区免费播放 | 福利姬液液酱喷水网站在线观看 | 日韩a毛片免费观看 | 国产精品成人一区二区三区影院 | 成人免费视频在线观看 | 国产又黄的a级在线观看 | 无码av久久久久久久久 | 亚洲aⅴ三级一区二区 | 欧美午夜免费大片 | 在线观看91香蕉国产免费 | 精品国产va久久久久久久 | 亚洲精品乱码 | 精品国产群3p在线观看 | 91在线精品欧美在线 | 在线观看欧美亚洲少妇 | 内射一区二区精品视频在线观看 | 国产亚洲中文日本不卡二区 | 99999久久久久久亚洲 | 国内久久综合无码精品 | 成人亚洲一区无码久久 | 国产aⅴ激情无码久久久无码 | 日韩一区二区三区精品 | 91精品国产麻豆91久久久久久 | 国产福利在线视频 | 人妻少妇白浆一区二区三区 | 熟妇女人妻丰满少妇中文字幕 | 国产乱子伦在线观看 | 日韩免费高清大片在线 | 性一交一| 亚洲av无码一区二区二三区 | 国产精品成年片在线观看 | 亚洲国产日韩精品二三四区 | 无码免费午夜福利看片 | 国产成人精品综合在线观看 | 91久久国产成人免费网站 | 麻豆美女丝袜人妻中文 | 91女神精品系列在线观看66 | swag| 97人妻起碰免费 | 91在线观看官网 | 风流老太婆大bbwbbwhd | 91在线精品无码秘入口九色平台对比 | 成人黄色大片亚洲 | 91精品国产福利线观看久久 | 97久久久亚洲综合久久88 | 午夜视频体内射 | 国产在线视频不卡一区二区 | 亚洲欧美一区二区 | 国产成人一区二区三区别 | 无码av永久免费专区不卡 | 最新中文字幕强奸乱伦亚洲五码 | 成人无码视 | 一级日本高清视频免费观看 | 女自慰喷水免费观看www久久 | 无码色av一二区在线播放 | 三上悠亚免费一区二区在线 | 无码精品亚洲第1页 | 欧美级在线现免费观看不卡 | 精品人妻少妇一区二区三区 | 牛牛影视亚洲av片在线播放 | 日韩精品无码免费专区丶 | 精品国产福利第一区二区三区 | 无码专区3d动漫精品一区二区 | 国产乱人伦精品一区二区在线观 | av中文在线播放 | 国产av永久无码精品网站 | 国产高清在线精品二区一 | 国产一区二区日韩欧美在线 | 3p国产对白刺激在线视频 | 亚洲成a | 国产一区二区精品久久91 | 亚洲精品综合在线影院 | 成人国产欧美大片一区 | 国人精品视频在线观看 | 国产精品视频一区三区四区 | 国产丝袜不卡一区二区 | 国产成人综合网亚洲第一 | 亚洲无码视频一区二区三区 | 最新国产剧高清免vip在线观看 | 97视频官网版下载 | 国产一级淫片视频免费看 | 国产剧情三级片在线观看 | 黄色网站在线免费观看 | 国产中老年妇女精品 | 91香蕉| 99国产精品九九视频免费看 | 午夜国产精品福利视频100集 | 亚洲无码影音先锋 | 国产精品专区 | 国产一级一片免费播放放a 国产一级淫片免费大片 | 99精品国产在热久久国产乱 | 国产高清综合乱色视频 | 国99精品无码一区二区三区 | 欧美高清在线观看海外剧在线观看 | 天天干天天日天天碰 | 亚洲av毛片一区二区三区 | 综合色区亚洲熟妇另类 | 97精品人妻无码专区在线视频 | 91视频手机app官方下载 | 99久久免费视频观看 | 狠狠色丁香久久婷婷综合 | 亚洲av一本岛在线播放 | 婷婷亚洲久悠悠色悠在线播 | 日韩精品区一区二区三vr | 欧美人与动物zozo | 偷拍拍自欧美色区另类 | 91原创国 | 国产成a人亚洲精v品无码樱花 | 99久久久久国产精品免费 | 欧美区区二区视频在线欧成在 | 成人嫩草影院免费观看 | 91成人试看福 | 中文韩国日本免费不卡五月天成人 | 99久久免费精品高清特色大片 | 成人深夜福利在 | 国产亚洲精品久久久久秋霞 | 99ri视频国产在线观看免费 | 无码亚洲一区二区三区在线观看 | 精品无码av一区二区三区不卡 | 无码日韩精品一区二区免费 | 高清无码电影免费专区 | 无码国产成人影片在线观看 | 东京热中文字幕a∨无码 | 97青草最新免费精品视频 | 国产高潮精品久久av无码 | 韩日av无码中文字幕 | 亚洲成a人片 | 国产白丝jk捆绑束缚调教视频 | 亚洲精品www久久久久久 | 午夜a级理论片在线播放不卡 | 丰满岳乱妇在线观看视频国产 | 国产在线观看免费 | 国产精品自产拍在线观看中文 | 性生大片免费观看668 | 99午夜福利精品视频 | 亚洲av毛| 日韩人妻av在线毛片 | 69sex久久精品国产麻豆 | 午夜十二点| 日本高清在线播放一区二区三区 | 超碰伊人久久青 | 爆操内射| 91九色精品国产自产精品 | 九九九亚洲精品 | 九九视频精品全部免费播放 | 国产99视频精品免费视看9 | 中文字幕人成 | 99麻豆久久久国产精品免费 | 精品久久久久久无码中文字幕 | 极品少妇一区二区三区四区 | 午夜a级理论电影 | 在线观看免费播放av片 | 麻豆国产福利91在线 | 欧美精品一区二区三区人妻久 | 丰满人妻熟妇乱精品视频 | 国产精品一级国产精品片 | 在线观看亚洲av无码每日更新 | 综合三级免费日本 | 国产高清日韩一区二区四季 | 日本中文字幕在线播放 | 国产在线精品观看免费观看 | 日本欧美大码一区二区 | 无码任你躁久久久久久老妇 | 国产白丝jk制服被疯狂输出 | 一区二区三区高清视频在线观看 | 日韩美国国产一级毛片 | 国产一级淫片视频免费看 | 午夜蜜桃视频 | 国内视频在线精品一区 | 国产精品最新高清 | 午夜播放器最新版 | av永久天堂一区二区三区 | 亚洲av日韩精品久久久久久 | 国产午夜激无码av片在线观看 | 亚洲熟妇无码一区二区三区导航 | 国产亚洲日韩av在线播放 | 99亚洲精品久久电影 | 伊人网综合 | 亚洲av片一区二区三区 | 国内精品 | 99久久久无码国产精精品 | 亚洲av成人一区二区三区观看 | 国产精品鲁鲁视频 | 亚洲中文字幕精品无码一区 | 亚洲综合日韩无码一区二区 | 亚洲av无码男人的天堂 | 最新国产自产视频 | 果冻传媒的女主董小宛免费高清资源 | 日韩精品搭讪在线视频播放 | 成人精品视频一区二区 | 成全影视 | 国产成人aⅴ国产在线观看 国产成人aⅴ在线免费观看 | 91日本视频 | 97无码免费人妻超级碰碰碰碰 | 中文字幕久久久久久精品 | 白丝被绑双腿憋尿sm调教 | 国产精品视频一区二区噜噜 | 国产成人无码精品久久久影院 | 欧美精品系列一区二区 | 国产色欲av精品一区二区 | 香蕉久久91综合一区二区三区 | 亚洲精品第一国产综合高清 | 成人黄色网站视频麻豆8 | 婷婷在线观看视频免费播放 | 欧美成人精品高清在线播放 | 日日夜夜精品视频天天7799男男 | 亚洲精品国产拍精品 | 精品一区二区成人 | 97精品国产91久久久久久 | 国产成人精品免费青青草原 | 国产欧美乱夫不卡无乱码 | 色窝网站在线播放 | av无码av天天av天天爽 | 97青草香蕉依人在线视频 | 91久久偷偷鲁偷偷鲁综合 | 国产免费午夜福利片在线试看 | 国产丝袜调教视频免费的 | 午夜亚洲国产理论片4080 | 国产成人无卡在线观看 | 日产亚洲一| 国产精品偷伦视频免费观看了 | 国产一级毛片一区二区三区 | 日韩无码高潮喷水 | 国产成人精品亚洲一区二区三区 | 日本美女一级视频 | 国产精品免费看久久久8 | 亚洲av性色在线观看 | 精品国产一区二区三区不卡在 | 国产精品午夜福利久久久 | 午夜国产片在线观看精品 | 午夜福利电影 | 成年女人毛片免费视频播放器 | 国产乱码精品一区二区三区四 | 国产欧美另类久久 | 成年肉动漫在线观看无修 | 91桃色大香蕉 | 国产a久久精品一区二区 | 日本老司机午夜福利视频 | 波多野结衣的av一区二区三区 | 精品日韩欧美一区在线播放不 | 国产高潮视频在线播放 | 99热成人精品 | 亚洲久久超碰无码中文字幕 | 羞羞动漫成人a片在线观看 羞羞麻豆国产精品1区2区3区 | a级毛片在线免费观看 | 最新国产麻豆aⅴ精品无码 最新国产一级a一片免费观看 | 丝袜人妻 | 亚洲av无一区二区三区久久 | 国产视频综合网 | 成人伊人精品色xxxx视频 | 99热国产这里只有精品无国产亚洲 | 无码精品人妻一区二区三区av | 极品国产尤 | 熟妇女人妻丰满少妇中文字幕 | 国产在线观看麻豆91精品免费 | av免费不 | 国产九九久久99精品影院 | 精品国精品无码自拍自在线 | 99久久毛片无码一区二区三区 | 四虎国产精品永久免费网址 | 国产在线视频一区二区三区 | 99久久国产综合精麻豆 | 精品日本三级在线观看 | 无码精品人妻一区二区三区av | 一级一片在线播放在线观看 | 91精品观看91久久久久久 | 亚洲精品乱码久久久久久久久久久久 | 国产高清乱码一区二区三区 | 国产永久在线视频 | 亚洲成av人片在线观看网址 | 亚洲精品永久在线观看 | 亚洲无码高清在线观看一区二区三区 | 日韩精品一区二区三区免费在线 | 国产综合久久7 | 日韩av无码一区二区三区 | 69av中文字幕在线观看 | 在线看片免费人成视频手机 | 禁止18点击进入在线观看尤物 | 精品久久久久一区二区三区 | 99久久国产综合精品女 | 国产剧情av不卡在线观看 | 91国自啪| 无码人妻精品一区二区三区夜夜嗨 | 国产精品无码一区二区三区不 | 国产激情怍 | 91制片厂果冻传媒有限公司 | 99热门精品一区二区三区无 | 国产激情无码一 | 久久成人麻豆午夜电影 | 国产精品自产拍在线网站 | 国产午夜视频 | 国产又色又爽又黄又免费 | 亚洲欧美精品一中文字幕 | 亚洲国产精品国自产拍av | 国产成人精欧 | 国产wwww色引发热议 | 天天干网亚 | 国产精品无码无在线观看 | 一级一级毛片 | 91精品国产综合久久精品 | 午夜宅宅伦电影网 | www夜片内射视频日韩精品成 | 99久久亚洲综合精品成人网 | 欧美伦理一区二区 | 亚洲av鲁丝一区二区三区 | 韩国午夜理伦三级理论在线观看 | 欧美精品久久久久精品 | 97久久超碰成人精品网页 | 亚洲精品第 | 99热手机在线观看 | 中文字幕无码不卡一区二区三区 | 国产线播放免费人成视频播放 | 97理论片影院网 | 国产高清在线精品一区二区 | 日本一区二区在线 | 精品亚洲欧美v国产一区二区三区 | 中文字幕精品一区二区三区视频 | 午夜日韩电视剧在线观看 | 亚洲无码在线小视频 | 日韩精品成 | 97视频 | 日本久久久久久久中文字幕 | 91人妻成人精品一区二区 | 99久久深夜中文字幕五月婷 | 日本一道本中文字幕 | 欧美精品成人久久网站 | 在线观看一级国产 | 伊人色综合视频一区二区三区 | 国产成人无码午夜视频在线观看 | 天天干夜夜操 | 欧美日韩中文国产一区 | 国产一线二线在线观看成人av | 国产极品 | 欧美日韩国产码高清综合人成 | 成人精品视频99在线观看免费 | 欧美成人午夜免费福利785 | 国产伦精品一区二区三区 | 人妻系列无码专区久久五月天 | 国产午夜鲁丝无码拍拍 | 色窝窝无码一区二区三区成人网站 | 亚洲精品成人无限看 | 国产毛片高清一级国语 | 中文无码日韩欧av影视 | 国内精品久久久久影院一蜜桃 | 国产乱码一 | 无码不卡在线观看网站 | 不卡一区二区三区四区 | 一区二区三区国产美女在线播放 | 欧美在线观看免费人成 | 高潮国产白浆抽搐福利日本 | 果冻影视网 | 国产99对白在线播放 | 日韩精品熟女一区二区三区中 | 国产精品不卡 | 午夜伦理片720p | 国产三级精品三级在线专区91 | 99精品热在线观看视频88 | 国产精品羞羞无码久久久 | 日日夜人人澡人人澡人人看免 | 91成人试看福利体验区 | 成人综合激情另类小说 | 欧洲精品一区二区 | 日韩久久精品无码av | 国产在线秘麻豆精品观看 | 97精品一区二区视频在线观看 | 韩国高清一区二区午夜无码 | 91在线啪国自产观看高清频道 | а√天堂网www在线搜索 | 香蕉视频官网 | 黄视亚洲欧洲日韩频在线观看 | 久草精品在线观看 | 动漫精品一区二区三区 | 欧美成人精品三级网站在线观看 | 亚洲一区二区福利视频 | 国产自在现偷国产精品国产日韩 | av无码午夜福利一区二区三区 | 91大神大战高跟丝袜美女 | 亚洲av成人影片在线观看 | 亚洲东京热无v一区综合精品区 | 国产av一区二区久久 | 免费无码鲁丝片一区二区 | 少妇人妻久久 | 国产精品白浆 | 妖精色av无码国产在线 | 中文字幕亚洲无线码在线中 | 97人人超人人超国产免费 | 精品国产电影网久久久久婷婷 | 国产超碰人人爽人人做人人爱 | 99伊人精品| 久久不见久久见免费影院www | 国产国产人在线成免费视频 | 天堂网在线观看 | 午夜无码人妻av大片 | 无码视频在线观看 | 牛牛本精品99久久精品 | 国产产无码乱码精品久久鸭 | 国产午夜精品喷水久久 | 91在线播 | 欧美成人四级剧情在线播放 | 精品久久久无码中文字幕天天 | 91在线免| 黄色免费 | 午夜精品久久久久久久99热蜜桃 | 国产freexxxx性播放麻豆 | 成人免费精品网站在线观看影片 | 亚洲av无码国产精品色 | 91亚洲精品色| 亚洲熟妇无码一区二区三区导航 | 亚洲熟妇无码八av在线播放 | 99在线无码精品秘入口 | 国产成人亚洲综合精品 | 在线观看超清全集最新未删减完整版 | 黄页免费视频播放在线播放 | 欧美三级久久 | 精品人妻av无码 | 欧美一区二区免费 | 97超在线视频免费 | 丰满精品人妻一 | 91桃色在线观看视频 | 不卡无码国产 | 欧美成人精品三级在线观看 | a人成日韩视频在线观看 | 亚洲国产日韩一区二区av | 麻豆安全网址入口 | 激情麻豆视频 | 精品久久久久久久久久 | 91影院精品高清 | 亚洲精品ty久久久久久久久久 | 国产精品无码专区av在线播放 | 亚洲无码精品在线观看 | 国产在线观看超清无码视频 | 欧洲一级一片在线观看免费精品色 | 91媒传媒m∨在线 | 国模无码视频一区 | 波多野结衣亚洲av无码无在线观看 | 午夜亚洲精品福利一区二区 | 97无码欧美熟妇人妻蜜桃天美 | 亚洲精品久久无码 | 99视频在线 | 国产av一区最新精品 | 久久成人国产精品免费软件 | 成人嘿嘿视频网站在线 | 国产成人精品123区免费视频 | 精品亚洲第一 | 内射99精品 | 精品久久久久成人码免费动漫 | 丰满少妇人妻hd高清大乳 | 中文字幕人妻伦伦 | 国产男女猛烈无遮挡免费视频网站 | 亚洲ⅴa国产日韩欧美精品 亚洲ⅴa久久久噜噜噜久久天堂 | 国产欧美日韩综合精 | 午夜十二点高清完整版免费观看 | 天天人人综合网7799 | 91无码人妻精品一区二区 | 92午夜福利视频精品 | 91传媒在线观看视频 | 亚洲综合偷自成人网第页 | 91精品导航 | 国产乱了真 | 无码免费不卡av手机在线观看 | 91久久亚洲综合精品国产 | 国内精品国语自产拍在线观看91 | 亚洲欧美精品午夜电影 | 91久久综合伊人 | 欧美在线观看一区 | 国产精品高清无码在线观看 | 亚洲国产欧美一区二区三区 | 亚洲欧美一区二区三区在线播放 | 久久99国产精品一区二区 | 亚洲欧美高清在线精品一区二区 | 国产成人一区二区三区影 | 97视频在线精品国自产拍 | 色一情一乱一伦一区二区三欧美 | 无码国产69精品久久 | 国产91精品久久久久久无码 | 亚洲中文字幕一区二区 | 国产精品成aⅴ人片在线观看 | 亚洲乱色伦图片区小说 | 国产欧美丝袜小视频 | 一区二区三区精品aⅴ专区 一区二区三区精品黄色影院 | 成人无码h免费动漫在线观看 | 亚洲国产精品一区二区不卡 | 国产精品偷伦视频免费观看了 | 精品一区二区久久久久网站 | 国产理论视频在线观看 | 午夜人成视频在线男人每天 | 91视频手机app官方下载 | 特级毛片a级毛片100免费播放 | 精品国产性色无码av网站 | 成人亚洲欧美日韩在线观着 | 二区久久hs | 精品国产乱码久久久久 | 在线观看免费av片 | 91免费视频播放 | 在线观看免费播放av片 | 99在线无码精品秘入口 | 精品久久久久久久无码人妻热 | 国产亚洲免费在线观看 | 国产成人αv无码专区亚洲αv | 国产成人精品综合久久久 | 日韩伦理片 | 丰满岳乱妇在线观看视频国产 | 午夜国产毛片v区一区二区三区 | 精品久久久久久亚洲综合网 | 精品九九人人做人人爱 | 91福利国产极品美女在线观看 | 国产精品亚洲av色欲在线观看 | 日本成a人片在线观看影院 日本成人 | 亚洲国产av永久精品成人 | 激情五月色综合国产精品 | 精品人妻潮喷久久久又裸又黄 | 精品国精品国产自在久国产 | 日本最新在线观 | 亚洲一级黄色在线观看 | 国产亚洲成av人片在线观看 | 少妇高潮流白浆在线观看 | 国产aaaaaa| 午夜国产免费观看 | 国产人成无码视频在线观看 | 国产成人午夜福利在线观看 | 无码aⅴ精品一区二区三区浪潮 | 91精品福利在线观看 | 另类图片视频 | 99久久免费精品国产男女性高 | 午夜福利一区二区三区高清视频 | 国产一级做a爰片久久毛 | 91久久国产亚洲精品 | 福利姬一区二区三区在线观看 | 国产v综合v亚洲欧美久久 | 国产精品91电影在线观看 | 精品无人区一区二区三区在线 | 亚洲第一av片在线观看 | 丰满女教师bd高清神马在线观看 | 91全国精品免费青 | 成人a毛片免费全部播放 | 国产午夜精品不卡视频 | 九一传媒公司制作网站 | 亚洲精品成人在线 | 国产精品国内免费一区二区三区 | 精品一区二区三区四区无码 | 日韩欧美精品一区二区三区 | 国产欧美久久一区二区三区 | 欧美精品一国产成人综合久久 | 国语精品91自产拍在线 | 国产精品高清视亚洲中文 | 色欲久久久天天天综合网精品 | 亚洲精品第一国产综合精品 | 中文字幕熟妇人妻在线视频 | 国语自产拍无码精品视 | 午夜免费啪视频 | 亚洲国产日韩在线观看18 | 最新国产麻豆aⅴ精品无码 最新国产一级a一片免费观看 | 国产精品99久久99久久久不卡 | 亚洲第一区欧美国产不卡综合 | 国产在线观看无遮挡无码aⅴ多人 | 亚洲国产人成 | 69视频在线观看免费 | 欧美日韩在线精品一区二区三区 | 日本最新最全无码不卡免费 | 99视频精品全部免费在线 | 人妻无码aⅴ中文字幕日韩 人妻无码aⅴ中文字幕视频 | 人人妻人人澡人人爽欧美一区双 | 亚洲av日韩 | 香蕉网久久| 岛国大片免费观看 | 国产在线拍揄自揄拍无码 | 99久久成人国产精品免费 | 国产精品亚洲天堂无码 | 亚洲国产精品高清在线一区 | 国产精品国产av片国产 | 欧美午夜寂寞影院安卓列表 | 久久av无码aⅴ高潮av喷吹 | 中文字幕精品无码2025 | 人妻熟妇视频 | 国产大胆露出精品视 | 成人毛片无码一区二区三区 | 无码人妻久久一区二区三区蜜桃 | 国产永久高清免费动作片www | 欧亚乱熟女一区二区三区在线 | 韩国av片永久免费 | 99久久免费国产精精品 | 国产黄色在线播放 | 熟女人妇成熟妇女系列视频 | 性色av一区二区三区咪爱四虎 | 天天想天天干 | 在线亚洲欧洲日产一区2区 在线亚洲人成电影网站色www | 97无码超碰中文字幕 | 日本黄色片视频 | 亚洲乱理伦片在线看中字 | 精品无码久久久久久尤物 | 国产三级精品三级在线专 | 亚洲国产激情电影综合在线观看 | 亚洲第一aⅴ天堂在线观看 亚洲第一av | 高潮喷水视频一区二区三区 | 国产精品羞羞无码久久久 | 91精品综合久久久久久五月天 | 福利姬液液| 精品无人区乱码一区二区三区手机 | 国产旗袍丝袜在线观看视频 | 99视频精品全部免费在线 | 91精品国产色 | 亚洲精品美女久久久久9999 | 99热国产这里只有精品 | 99尹人香蕉国产免费天天在线 | 国产大学生喷水流白浆视频 | 波多野结衣50连精喷在线 | 国产精品无码v在线观看 | 加勒比无码一区人妻 | 亚洲午夜精品无码专区在线观看 | 亚洲国产成人高清片在线观看 | 亚洲国产成人精品女人 | 国产免费一区二区三区免费视频 | 婷婷色中文在线观看 | 欧美日韩国产一区二区精品合集 | 神马午夜av午夜一二区 | 国产伦精品一区二区三区视频猫咪 | 亚洲毛片不卡av在线播放一区 | 亚洲午夜无码片在线观看影院百度 | 人人爽天96 | 精品国产日韩亚洲一区91 | 91成版人在线观看入口 | 人妻aⅴ无码一区二 | 成人午夜免费无码视频在线观看 | 麻豆国产午夜福利片在线观看 | αv天堂亚洲一区二区三区 αv天堂在线观看免费αⅴ | 呦系列视频一区二区三区 | 亚洲国产精品视频自拍 | 亚洲第一av | 国产精品永久免费 | 日韩无码hd中文字幕 | 亚洲国产欧美在线人成 | 91香蕉视频观看精品在线 | 亚洲aⅴ永久无码天 | 国产爆乳无码一 | 午夜亚洲av日韩aⅴ无码大全 | 亚洲日韩国产成网在线观看 | 成年免费看片在线观看 | aⅴ中文无码亚洲 |