超碰91资源站-超碰97豆花-超碰97人妻-超碰97人人干-超碰97人人香蕉-超碰97天天操-超碰97在线资源站-超碰97资源站共享-超碰97资源站总站-超碰aa在线91-超碰av操-超碰爱爱

半岛外围网上直营

理解MySQL——架構與概念

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

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

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

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

 

第一章、MySQL架構與概念
1、MySQL的邏輯架構

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

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

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

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

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

隔離級

臟讀

不可重復讀

幻象讀

讀未提交

(Read uncommitted)

可能

可能

可能

讀提交

(Read committed)

不可能

可能

可能

可重復讀

(Repeatable read)

不可能

不可能

可能

可串行化

(Serializable)

不可能

不可能

不可能

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

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

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

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的重要特點之一,InnoDB通過MVCC機制表示數(shù)據(jù)庫某一時刻的查詢快照,查詢可以看該時刻之前提交的事務所做的改變,但是不能看到該時刻之后或者未提交事務所做的改變。但是,查詢可以看到同一事務中之前語句所做的改變,例如:

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)

 

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

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

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

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

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

例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)


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

 

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,則結果如下:

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);

等待。。。

 

 

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

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

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

1.4、存儲引擎
插件式存儲引擎是MySQL最重要特性之一,也是最不同于其它DBMS的地方。MySQL支持很多存儲引擎,以適用于不同的應用需求,常用的包括MyISAM、InnoDB、BDB、MEMORY、MERGE、NDB Cluster等。其中,BDB和NDB Cluster提供事務支持。
 MySQL默認的存儲引擎為MyISAM,當然,創(chuàng)建表的時候可以指定其它的存儲引擎,你可以在同一個數(shù)據(jù)庫中對不同的表使用不同的存儲引擎(這是非常強大而獨特的特性)。可以通過SHOW TABLE STATUS命令查詢表所使用的存儲引擎,例如,查看mysql數(shù)據(jù)庫的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:表使用的存儲引擎;
Row_format:記錄的格式。MyISAM支持三種不同的存儲格式:靜態(tài)(固定長度)表(默認格式)、動態(tài)表及壓縮表。靜態(tài)表的字段都是固定長度的,例如CHAR和INTEGER;動態(tài)表的字段可以是變長的,例如,VARCHAR或者BLOB。
Rows:表中記錄的數(shù)量。
Avg_row_length:記錄的平均長度(字節(jié)數(shù));
Data_length:表中數(shù)據(jù)的全部字節(jié)數(shù);
Max_data_length:表中數(shù)據(jù)最大的字節(jié)數(shù);
Index_length:索引消耗的磁盤空間;
Data_free:對于MyISAM表,表示已經(jīng)分配但還沒有使用的空間;該空間包含以前刪除的記錄留下的空間,可以被INSERT操作重用。
Auto_increment:下一個自增的值。
Check_time:上次使用CHECK TABLE或myisamchk檢查表的時間。

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

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

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

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

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


標簽:

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

文章轉載自:博客園

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
利記足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) 真人boyu·博魚滾球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) 最大網(wǎng)上PM娛樂城盤口(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) 正規(guī)雷火競技官方買球(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) 雷火競技權威十大網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) boyu·博魚信譽足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) 權威188BET足球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) 正規(guī)188BET足球大全(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機版登錄入口-最新版(已更新) 国产三级aⅴ在线播放 | 国产一二区视频在线播放 | 国产三级真人视频播放页 | 成人区人妻精品一区二区不卡视频 | 国产精品欧洲激情无码av | 99久久夜色精品国产亚洲96 | av丝袜人妻另类手机版 | 国产gv顾泽宇视 | 国产成人免费网站 | 国精品人妻无码一区二 | av人摸人人人澡人 | 国产一级片内射视频蜜臀在线 | 国产精品成人国产乱一区 | 国产成人一区二区三区毛片 | 后入内射视频 | 国产交换配乱婬视频 | 国产高清久久精品一区在线 | 精品视频在线观自拍自拍 | 国产精品妇女一二三区 | 国产av无码专区亚洲精品 | 国产白嫩护士被弄高潮 | 国产丝袜美女一区二区三区 | 国产精品色婷婷99久久精品 | 高清一区二区三区久久 | 精品视频一区二区三区在线观看 | 99久久伊人一区二区 | 国产精品丝袜久久久久久聚色 | 国产精品初高中精品久久 | 91人妻视频 | 91精品夜夜夜一区二区 | 国产自在自线午夜精品 | 91麻豆产精品久久久久久下载 | 岛亚洲品质网站入口 | 国产精品入口麻豆免费看 | 91精品免费久久久久久久久 | 国产自制在线观看视频 | 国产一区二区三区在线免费观看 | 囯产极品美女高潮无套久久久 | www.夜片内射视频日韩精品成人 | 成人女人女片免费播 | 国产亚洲精久久久久久无码7 | 精品国产av色一区二区 | 成人精品午夜在线观看 | 国产一人人看在线视频 | 国产精品无码电影在线观 | 韩国美女跳舞蹈视频 | 69久久夜色精品国产69乱 | 国精品人妻无码一区二区三区喝尿 | 国产av宗合影院 | 国产精品午夜福利免费 | 国产午夜精品无码理论片 | 国内一国产农村妇女一级毛片 | 国产激情久久久久99蜜桃 | 国产精品视频无圣光一区 | 国产人妻精品区一区二区三区 | 国产产精品亚洲一区二区在线观看 | 精品国产三上悠亚在线观看 | 3d动漫精品一区视频 | 国产一区二区三区三级无码 | 国产精品无码一区二区三区免费 | 国产成人一区二区无码不卡在线 | 国语对白久久精品一区 | 国产综合精品九九久久一区二区 | 变态刺激另类sm孕妇 | 成人精品一区二区三区校园激情 | a级国产乱理伦片在线播放 a级国产乱理伦片在线观看 | 国产精品无码久久久最线观看 | 国产免费午夜福利在线播放92 | 国产精品一区不卡 | 成人综合国产成人亚洲 | 精品国产一区二区三区免费 | 国产美女久久精品香蕉69 | 精品国产三级a∨在线欧美 精品国产三级a∨在线无码 | av无码精品人妻色欲 | 国产成人亚洲精品91专区高清 | 国产91精品在线观看 | 国产高级桑拿在线播放 | 91精品在线国产一区 | 成人毛片无码一区二区三区 | 国产偷窥熟女 | 成人国产亚洲精品a区天堂 成人国产亚洲精品ā区天堂 | 丰满熟妇乱又伦在线 | 国产精品国产精品一区二区 | 99国产乱高清成免费视频 | 国产精品成人小电影在线观看 | 波多野结衣高清中文在线 | 成熟女人乱伦亚洲一区二区三区 | 国产毛片大全视频 | 国产91久久久蜜臀青青天草二 | 东京热一区二区无码av | 国产aⅴ无码精品一区二区三区 | 国产黄色激情视频 | 国产成人亚洲欧美三区综合。 | 国产精品va尤物在线观看 | 国产精品无码久久久久久 | 国产三级电影 | 国产a一级黄片视频 | 国产亚洲欧美精品一区 | 国产日韩激情无码一区 | 91伊人国产 | 国产成人精品无码片区在线观看 | 国产高清午夜精品福利色噜 | 国产午夜激无码色本v毛片 国产午夜精华2025在线 | 国产成年女人免费视频播放a | 国产高清三级免费韩剧在线 | 国语久久无码高清 | 国产精品一区二区久久精品涩爱 | 国产激情福利久久精品麻豆 | 国产一区二区三区五区六区 | 国产成人欧美综合在线影院 | 成本人片无码中文字幕免费 | 国产劲爆∧v内射 | 国产尤物精品不卡 | 国产不卡的一区二区三区四区 | 91久久亚洲国产成人综合精品 | 国产字幕在线观看 | 国产精品一区在线麻豆 | 国产成人综合自拍 | 韩国欧美日产国产精品 | 国产激情艳情在线看视频 | 国产精品无码午夜免费影院 | 国产午夜福利在线观看在 | 国产91麻豆免费观看 | 国产白丝jk被疯狂输出免费 | 国产精品无码aⅴ一区二区三区 | 国产色系视频在线观看 | 国产亚洲欧美一区二区 | 国产偷窥盗摄视频 | 国模极品一区二区三区 | 国产高清在线精品一区 | 国产无套射精网站 | 精品国产午夜福利在线观 | 精品亚洲av无码专区毛片 | 国产精品无码亚洲精品蜜桃传媒 | 97人妻无码公开免费 | 69精品久久久久妇女 | 国产成人精品123区免费视频 | 国产综合久久久久 | 国产黄色一级大片 | 丰满的少妇69式视频在线观看 | 国产原创av一区二区三区 | av片中文字幕 | 国产aⅴ夜夜欢一区二区三区 | 国产精品系列在线播放 | 国产一区二区三区视频网站 | 国产精品社区在线观看 | 国产一区二区三区视频xxx | 国内精品久久人妻无码网站 | 国产麻豆剧传媒 | 国产精品美女www爽爽爽软件 | 91一区二区在线观看精品 | 99精品国产99久 | 国产精品毛片久久久久久 | 国产一二三四精品久久 | 国内精品无码一区二 | 国产精品午夜福利不卡120 | 国产3p露脸福利在线视频 | 高潮喷水香蕉视 | 韩国美女主播热舞 | 国产精品夜色视频一区二区三区 | 国产v日本v欧美v一二三四区 | 国产成人免费观看 | 精品国产三级a∨在线欧美 精品国产三级a∨在线无码 | 99久久精品日本一区二区 | 国产自拍精品在线观看 | 国产成人av男人的天堂 | 精品三级久久久久电影我网 | 国产高清免费观看a∨片 | 国产精品白浆无码99久久 | 丰满人妻熟妇乱又伦精品视频三 | 国产精品成人网址 | 国产三级av | 韩国美女av一区二区三区四区 | 国产成人精品久久亚洲高清不卡 | 韩国级床戏大尺度在线观看 | 精品系列无码一区二区三区 | 国产精品福利短视在线播放 | 成熟女人毛片www免费版在线 | 国产喷水自慰在线观看 | 国产午夜亚洲精品不卡网站 | 高清无码在线观看h片 | 国产av激情无码久久天堂 | 国产精品午夜福利在线观看地址 | 国产精品一区二区在线观看网站 | 国产在线视频欧美一区二区三区 | 精品人妻av无码一区二区三 | 99国产精品无码久久久久 | 国产精品专区第一页在线观看 | 99久久国产综合精品五月天 | 国产亚洲欧美另类第一页 | 国产午夜三级一区二区三 | 91精品全国免费观看青青 | a级国产乱理伦片在线播放 a级国产乱理伦片在线观看 | 国产在线一区二区三区视频 | 国产精品高潮久久久久无码av | 国产精品午夜在线 | 国产成人精品午夜在线播放 | 国产毛片免费网站大全 | 国产高清成人 | 国产成人免费高清激情视频 | 国产成a人片在线观看视频99 | 高清无码中文字幕影片 | av午夜福利无码精品一区 | 国产sm主人调教女m视频 | 国产激情无码 | 国产人在线成免费视频 | 国产欧美精品综合区 | 国产一区二区三区在线水蜜桃 | 国产成版人视频app 国产成本人免费视频 | 囯产精品无码一区二区三区 | 成人中文字幕在线 | 国产精品无码一区二区三区毛 | 国产精品欧美一区二区在线看 | 国产成人久久一区二区不卡三区 | 精品久久久久久中文字幕专区 | 国产成人av网站 | 国产在线拍揄自揄拍无码视频 | 激情婬乱a片无码一二三区下 | 国产欧美v欧美v在观看 | 国产孕妇孕交一级毛片 | 91欧美| 国产无套粉嫩白浆内精在线观看 | av无码一区二区三区午夜 | 国产精品一级黄色视频 | 精品无码91久久精品无码一区 | 国产成人精彩在线 | 精品无码99 | 国产精品自拍小视频 | 激情欧美在线一区 | 国产极品粉嫩馒头一线天图片 | 极品激情视频一区 | 91精品丝袜国产高跟在线一区 | 国产欧美va | 精品人妻一区二区三区日产乱码 | 成人国产在线看不卡 | 91黑料精品国产 | 国产激情一区二区三区成人 | 国产午夜精品一区二区三区老 | 国产福利男女xx | 国产美女裸舞久久福利 | 成人无码特黄特黄av片在线 | 国产a级国片免费播放 | 国产亚洲日本精品成人 | 国产在视频在线观看 | 国产成人精品午夜视频免费 | 国产做a爰片毛片a片美国 | 国产在线91精品 | a级毛片高清免费视频就看 a级毛片高清免费视频在线 | 国产大片免费天天看 | 精品91自产拍在线观看二区 | 9191精品国产免费久久电影 | 国产精品成人www视频 | 国产一区在线 | 国产精品亚洲码精品 | 国产精品无需 | 国产一区二区三区不卡在线 | 国产福利区一区二在线观看 | 精品国产91久久久久久黄无码 | 国产精品沙发 | 国产成人精品亚洲午 | 国产无码一二三 | 国产传媒在 | 国产午夜精品美女短视频 | 91精品国产自在现线91 | 国产精品伊人久久久久 | 97人妻碰碰视频免费上线 | 国产剧情av片醉酒女邻居 | 精品亚洲成a人20257在线观看 | 国产精品一区二区国模私拍 | a亚洲欧美中文日韩 | 国内嫩模私拍精品视频 | 国产吃奶一区 | 国产超碰人人做人人爱ⅴa 国产超碰人人做人人爱电影 | 国产一区二区精品尤物 | 91尤物在线一区二区三区 | 国产福利一区二区三区高清 | 国产精品成人不卡视频 | 国产高清在线观看自拍 | 国产成年女人特黄特色大片 | 国产人妖xxxx做受视频 | 国产麻豆91传媒入口 | 91久久精品无码一区二区免费 | 精品国产一区二区三区久 | 国产野战无套av毛片 | 国产69精品久久久久久妇女迅雷 | 国产日韩一区二区精品在线播放 | 丰满少妇一级av毛片 | 顶级欧美熟妇 | 国产精品午夜寂寞视频 | 国产成人v无码精品天堂 | 国产精品亚洲综合色区韩国 | 国产极品粉嫩馒头一线天图片 | av无码专区亚洲avl在线观看 | 精品一卡二卡三无码a | 99久久精品亚洲欧美另类 | 国产精品丝袜在线 | av无码久久久久久不卡网站 | 精品亚洲一区二区不卡 | 爆乳美女脱内衣18禁裸露网站 | 成人黄色一级电影在线免费观看 | 国产成人久久精品综合 | 国产激情久久久久久熟女老人 | 国产av无码专区亚洲av毛片 | 国产精品无码加勒比在线 | 国产尤物精品自在拍视频首页 | 国产精品视频一区二区三区不卡 | 国产成人精品第一区二区三区 | 果冻传媒av在线观看入口 | 国产精品一区二区av麻豆 | 国产精品边做奶水狂喷有码 | 国产日韩久久久一区二区三区 | 国产欧美日产久久 | 东京热av永久无码 | 国产精品无码一区二区老黄瓜 | 成人午夜视频网站 | 国产精品爽爽在线观看 | 精品亚洲a∨一区二区三区 精品亚洲a∨在线播放不卡 | 91麻豆国产级在线 | 99久久人妻精品免费一区 | 国产91放荡的护士 | 97精品国产自产在线观看永久 | 国产成人无码一区二区三区 | 加勒比中文字幕无码久久 | 国产欧美日韩综合精品一区二区三 | 国产aⅴ视频视频在线 | 国产精品原创巨作av女教师 | 国产欧美成人一区二区三区 | 精品亚洲成a人20257在线观看 | 精品久久久无码中文 | 国产人妻人伦精品午夜剧场 | a级片在线播放 | 国产一区中文字 | 精品服丝袜无码视频一区 | 不卡无码精品在线观看 | 国产人妖一区二区动漫黄片 | 国模丰满少妇私拍 | 国产精品蜜桃在线观看 | 国产成人av大片大片在线播 | 国产一区二区三区在线播放 | 国产成人aⅴ国产在线观看 国产成人aⅴ片在线 | 高清国产网曝门事件情侣 | 国产精品韩国一区二区三区 | 黄色三级网站免费 | 国产成人午夜精品 | 国产欧美久久一区二区 | 国产精品免费播放久久 | 91麻豆国产 | 国产精品午夜理论片在线播放 | 国产在线精品一区二区三区直播 | 国产成人aⅴ尤物国产 | 成人国产精品一级毛片久久 | 国产成人欧美日本在线观看 | 按摩师舌头进去添的我好舒服 | av片在线观看永 | 国产尤物精品视频 | 高潮射精日本韩国在线 | 国产精品卡通动漫蜜臀av | 国产福利一区二区麻豆 | 911精品国产91久久久久 | 国产精品大片天天看片 | 69国产亚洲精品av久久 | 精品国偷自产在线 | 国产精品一区二区午夜嘿嘿嘿小说 | 精品无码理论片 | 国产中文字幕乱码一区大全 | 国产av无码片毛片一级久二区 | 911在线区啪国自产中文字幕 | 不卡的中文字幕视频 | av天堂永久资源网亚洲高清 | 国产成精品在线观看 | 91久久婷婷| 国产毛片健身在线 | 国产精品国产日韩精 | 高清不卡免费一区二区三区 | 国产美女流出白浆在线观看 | 国偷自产一区二区免费视频 | 国产精品动漫自慰一二三区 | 高清无码com.| 国产无码视频一区在线观看 | 国产一区二区在线免费观看 | 国产一区二区三区免费精品 | 2025届高三日语一轮复习 | 国产福利精品在线观看 | 国产成人午夜精品影院游乐网 | av小黄片在线免费播放 | 国产精品乱码在线观看av | 国产成人毛片一区二区 | 国产一区在线播放网址 | 岛国少妇精品久久中文字幕 | 精品熟女少妇一区二区 | 国产白浆在线视频网 | 成人午夜精品无码区久久 | a级国产片在线观看 | 国产日韩久久久久无码精品 | 变态潮喷失禁大喷水 | 岛国在线播放v片免费 | 精品国产一区二区在线观看 | 成人亚洲a片v一区二区三区蜜月 | 国产高跟制服剧情在线 | 国产精品无码一区二区三四区 | 国产一级毛片特级毛国产 | 99久久国产综合精品swag | 91精品免费 | 99国产精品丝袜久久久久 | 69国产精品成 | 国产精品高潮久久久久久无码 | 国产成人永久免费视频 | 国产高清在线精品一本大 | 国产精品无码中出在线播出 | 国产你懂的的在线网站 | 2025中文字幕在线永久免费 | 二区三区电影 | 国产精品成熟老妇女 | 99国产精品99久久久久 | 国产高清无码在线 | 国产精品玖玖资 | 国产成人午夜免费视频 | 国产精品美女久久久久久久 | 国产va免费精品观看 | 国产精品三级一区二区 | 国产午夜精品久久久久九九电影 | 国产成人无码亚洲a片小苹果 | 国产91综合一区在线观看 | 国产一线久 | 国产午夜福利在线永久视频 | 国产另类ts人妖一区二区 | 精品日韩亚洲欧美高清a | 国产成人一区二区三区视频免费 | 国产精品刮毛 | av免费网址在 | 国产激情一区二区三区成人 | 国产午夜在线免费视频 | 国产精品无码av片在线观看 | 91se在线观看一区二区 | 91亚洲中文字幕在线播放 | 国产精品一区二区在线俏佳人 | 国产尤物在线观看不卡 | 国产激情无码久久 | 国产成人久久精品毛片 | 国产无码精品第8页 | 91av在线播放观看国产 | 国产三级在线现免费观看 | 东京热人妻无码人av | 国产午夜精品一区二区三区老 | 国产美女亚洲真人做受在线观看 | 岛国毛片av在线无码不卡 | 99久久国产精品免费一区二区 | 国产在线精品一区二区三 | 国产在线不卡顿免费视频 | 国产午夜激无码av片在线观看 | 国产高清一区二区在线免费观看 | 国产色午夜婷婷一区二区三区 | 91在线精品播放 | 2025乱码精品1区2区 | 福利精品第一导航 | 国产色婷亚洲99精品av在 | 国产成人综合久久精品推下载 | 国产精品一级无遮挡毛片 | 国产成年无码aⅴ片 | 国产a视频精品免费观看 | 成人国产一区二区三区精品 | 成人在线免费观看 | 18禁裸体动漫美女无遮挡 | 精品久久无码高清 | 国产中文字幕在线点播 | 国产成人啪精品视频免费网站 | 国产一区视频 | 99久久精品一区 | 国产精品无码一区二区在线观看 | 国产肉丝袜一区二区 | 99精品国产高清一区二区麻豆 | 成人合成mv福利视频 | 国产精品国产成人国产三级 | av无码一区二区大桥久未 | 国产午夜视频在线 | av无码av天天av天天爽 | 国产一区二区三区精品在线观看 | 成人精品一区二区户外勾搭野 | 国产另类t | 国产专区亚洲欧美另类在线 | 成人在线观看影院 | 国产片婬乱18一级毛片动态图 | 国产成人观看在线视频 | 精品国产乱码九九九久久久 | 国产三级在线观看播放 | 国产三级精品三级在专区 | 国产精品一区波多野结衣 | 国产成人自拍视频 | 国产高清一级毛片在线不卡 | 精品国产v无码大片在线观看 | 精品无码久久久久久久久借妻 | 91在线无码一区二区 | 国产女人爽的流水毛片 | 国产日韩一区在线观看视频 | 国产无套粉嫩流白浆不卡 | 国产精品蜜臂在线观看 | 国产精品成人3p一区二区三区 | 国产成人亚洲精品无码不卡 | 国产精品va在线观看无码电影麻 | 国产精品毛片在线大全 | 极品嫩模众筹福利写真视频 | 国产成人a视频高清视频在线 | 国产三级高清在线观看 | 91蜜芽尤物福利在线观看 | 国产超碰人人操 | av无码网址 | 国产三区欧美日韩 | 国产一在线精 | 国产成人精品免费动漫视频大全 | 不卡的在线免费视频 | 精品秘一区二三区免费雷安 | 国产精品高清视频免费 | 91精品国产麻豆国产自产在线 | 国产超a级动作大片中文字幕 | 91国自产精品一区二区三区 | 国产精品高潮久久久久无码av | 国产ar免费视频男人的天堂 | 国产丝袜二区在线播放 | 97人妻碰碰视频免费上线 | 国产无套内射又大又猛又粗又爽 | 2025久久国产精品免费热麻豆 | 不卡国产福利在线观看 | 国产自愉自 | 国产午夜成人无码免费 | 丰满人妻熟妇av无码区a | 福利姬液液酱喷水 | 91在线国偷自产一区国产永久 | 国产一区二区三区四区五区加勒比 | 精品国产热久久久福利 | 国产精品亚洲专区在线播放 | 国产成人aⅴ片在线 | 91探花在线观看 | 18禁动漫一区二区三区免费下 | 9191精品国产日本欧美 | 91精品在线国产一区 | 国产精品va在线观看无码电影 | 高清国产一级精品毛片基地 | av中文字幕在线播放 | 金8天国欧美一区二区三区 京野结衣免费一区二区 | 91亚洲中文天堂在线观看 | 国产精品三级美女网站全黄真人 | 国产黄色靠逼视频网站 | 国产午夜伦伦 | 国产精品猎奇系列在线观看 | 成人无码一区二区三区 | 国产成人mv毛毛a片 国产成人mv在 | 国产在线视频欧美亚综合 | 国产精品亚洲片精品av | 韩国精品一区二区三区在线观看 | 97人人夜夜视频精品 | 变态孕交videos| 国产一二三四在线观看 | 97人妻免费上传视频 | 国产极品在线视频 | 成人亚洲a片ⅴ一区二区三区动漫 | 国产偷窥熟女精品视频大全 | 国产熟女一区二区三区 | 国产成人免费高潮激情视频 | 国产成人免费高清直播软件 | 精品伦精品一区二区三区视频 | 精品91自产拍在线观看一 | 国产黄色大片在线观看激情 | 国产精品亚洲五月天 | 福利视频一区 | 国产激情无码视频在线播放性 | 国产精品白浆无码流出免费看 | 国产无套码a在线观看 | 成人午夜亚洲精品无码网站 | 国产精品一区二区不卡的视频 | 国产精品观看视 | 国人精品视频在线观看 | 国产熟女内 | 国产精品日韩免费视频 | 国内偷拍三级视频不卡 | 成人小說亞洲一區二區三區 | 成人午夜高潮免费视频在线观看 | 精品国产午夜理论片不卡 | 国产a级毛片区一区二区三 国产a级毛片色咪味 | 国产一区二区国产精品 | 国产成人精品白浆久久69 | 国产成人在线小视频 | 国产av激情久久 | 2025久久精品国产免费 | 国产精品欧美亚洲韩国日本 | 成人免费无码大片a毛片 | 国产一区二区中文 | 国产在线观看大量精品福利 | 国产大学生无码视频在线观看 | 国产成人5x人网站视频 | 加勒比中文无码字幕 | 国产一区欧美日韩3d | 成人午夜免费观看 | 91与国产超碰在线观看 | 高清国产无码自拍 | 99精品国产兔费观看久久99 | 国产精品高跟丝袜一区 | 国产一区二区不卡在线看 | av喷水高潮喷 | 91成人国产综合久久精品九色 | 国产成人午夜福 | 成年夜99九九久久夜观欧美 | 精品无码av一区二区三区不卡 | 国产午夜毛片v一区二 | 国产成人综合久久精品直播 | 成人一区二区三区视频在线播放 | 国产午夜福利在线观看免费 | 国产欧美va欧美va香蕉在线观看 | 动漫精品一区二 | 91精品隔壁老王在线观看 | 18禁裸乳无遮挡高清免费观看 | 国产精品一卡 | 国产精品成人观看视频国产 | 国产雏女破苞在线播放 | 成人h动漫精品一区二区ji | 精品国产999久久久免费 | 国产区免费在线观看 | 国产精品刮毛 | 国产一区在线观看免费 | 91在线无码精品秘入口九推油 | 国产成人免费看片色 | 国产爆乳无码视频在 | 18禁高潮出水呻吟娇喘mp3 | 国产成人精品免费视频下载 | 国产美女全黄a一级视 | 91精品国产色 | 国产一区二区三区免费观看在线 | 国产a级毛片久久久精品毛 国产a级毛片久久久精品毛片 | av黄色| 成人无码h动漫在线网站免费y | 国产片婬乱一级毛片视频1 国产片婬乱一级毛片丫丫 国产片婬乱一毛片a | 精品午夜福利无人区乱码一区 | 国产午夜亚洲精品不卡网站 | 国产亚洲自拍一区在线观看 | 国产一区二区三精品久久久无广 | 国产精品午夜激爽毛 | 国产欧美日韩在线一区二区激情 | 国产精品一区二区黑人巨 | 国精品无码一区二区三区在线视频 | 国产精品黑色丝袜在线观看 | 国产欧美2025无马砖区 | 国产成人特级毛片无码视频二 | 国产一区二区四区在线 | 国产偷伦视频 | 国产精品亚洲欧美高清 | 高清无码色色视频 | 国产成人无码va在线观看 | 国产aⅴ天堂无码一区二区三区 | 国产精品香蕉夜间视频免费播放 | 国产喷水在线视频观看网站 | 国产精品一区二区三区不卡 | 国产高清不卡一区二区在线视频 | 国产高清视频在线观看97 | 成人区人妻精品一区二区不卡麻豆 | 国产av无码日韩av无码av网站 | 精品一区二区三卡四卡网站 | 国产精品高潮森林久久av无码 | 国产一区二区三区精品99久久 | 国产一区二区三区正品 | 国产在线播放精品一区二区 | 国产午夜专区在线观看 | 国产一区二区欧美日韩 | 国产嫩草在线观看 | 91视频官网 | av高清网址在线观看 | 国产色妞妞在线视频免费播放 | 国产欧美日韩一区二五月天 | 国产一区二区无码蜜芽精品 | 精品国产一区二区国产精品国产 | 国产a一级无码毛片一区二区三区 | 国产激情无码一区二区 | av一区二区在线观看 | 国产精品日韩欧美在线第3页 | 国产古代一级毛片 | 成无码三级视频 | 国产v综合v亚洲欧美大另类 | 国产无套粉嫩白浆免费观看 | 国产亚洲曝欧美精品手机在线 | 国产精品丝袜一区二区三区 | 91模特| 国产夫妻内射一级一片 | 国产麻豆精品入口在线观看 | 国产一区在线观看视频 | 91成人黄色视频在线观看 | 爆乳上司julia中文字幕 | 国产亚洲一区在线观看一区二区 | 国产女人喷潮免费视频 | 国产黄色毛片久久久 | 国产精品v在线观看无码 | 国产成人午夜福利免费无码r | 国产三级成人不卡在线观看 | 国产毛片成 | 国产白丝精品91爽爽久久 | 成人亚洲性情网站w | 成年永久一区三区免费视频 | 高清中文字幕在线a片 | 国产人妖精品视频一区 | 国产成人精品免费视频大全麻豆 | 91日本在线精品高清观看 | 国产熟女视频一区二区免费 | 国产欧美日韩亚洲 | 911精品国产| 国产成人无码aⅴ片在线观看视频 | 国产精品爆乳无码一区二区三区 | 波多野结衣在线调教免费观 | 国产欧美日韩综合精品一区二区 | 国产真人a级高潮片 | 精品无码一区二区三区爱欲 | 国产精品真实灌醉女在线播放 | www在线观看一区二区三区 | 国产精品成熟老女人 | 2025亚洲中文字幕在线 | 国产免费高清在线视频观看网 | 国产免费午夜高清 | 国产激情久久久久久熟女老人 | 国产成人一区av | 国产在线无码制服丝袜无码知名国产 | 成人精品区天堂 | 91成人免费无码成人 | 加勒比东京热不卡一区二区ai | 国产精品三级av及在线观看 | 国产极品精品免费视频能看 | 国产一区二区三区正品 | 国产v片在线播放免费无码 国产v片在线播放免费无遮挡 | 国产白浆喷水在线视频 | 精品人妻少妇嫩草v无码专 精品人妻少妇无码视频 | 国产人妻精品 | 国产精品重口变态sm在线观看 | 国产午夜片无码区在线观看爱情 | 国产一区二区三区美女秒播 | 超级乱淫片午夜电影网福利 | 国产精品激情欧美可乐视频 | 国产av一区二区三区传媒 | 成人无码精品久久小说 | 国产成人喷潮在线观看 | 国产综合精品九九久久一区二区 | 国产福利vr专区精品 | 国产成年女人特黄特色大片免费 | 国产精品亚洲欧美高清亚洲综合欧 | 黑人巨茎美女高潮视频 | 高清成年美女黄网站免费大全 | 国产在线观看一区二区三区四区 | 国产爆乳美女娇喘呻吟 | 国产精品午夜福利在线观看地址 | 2025国产在线 | 国产成人一区二区三区影院 | 国产精品亚洲专区无码不卡 | 国产高清久久综合 | 国产女同女互慰 | 国产精品国产三级囯产av中文 | 国产主播大尺度精品福利 | 国产精品亚洲片在线 | 97无码精品人妻一区二区三区 | 国产美女裸舞一区二区 | 91视频官网 | 国产午夜人做人免费视频中文 | 国产一级毛片久久久久久 | 91麻豆精品国产一区色欲 | 国产对白精品刺激一区二区 | 国产成人精品无码a区在线观看 | 国产成人福利免费观看 | 国产午夜三级一区二区三 | 国产福利视频在线 | 国产三级自拍亚洲色欲色欲 | 精品亚洲国产成av人片传媒 | 国产女人高潮大叫一级毛片 | 精品一区二区女厕 | 国产女主播高潮在线播放 | 99久久综合狠狠综合久久aⅴ | 韩国好看女 | 国产精品高潮呻吟av久久小说 | 国产熟女高潮精品视频av | 国产999精品久久久久 | 国产无套内射又大又猛 | 97人人妻人人爽 | 国产ar高清视频+视频 | 国产91精品丝袜一区二区 | 国产午夜精品无码理论片 | 精品69视频一区二区三区 | 精品国产品国语原创 | 国产成a人亚 | 国产熟睡乱子伦视频观看软件 | 国产黄a级三级三级看三级 国产黄a三级三级三级 | 国内精品美女a在线播放 | 91尤物在线精品无 | 丰满五十 | 精品国产av高清毛片 | 国产欧美日韩中文字幕 | 成人a级毛片免费观看av网站 | 精品亚洲一区国产精品 | 国产三级aⅴ在线观看 | 国产高清不卡无码视频 | 潮喷无码正在播放 | 成人av无码国产在线 | 国产v片在线播放免费观看大全 | 高清国产网曝门事件情侣 | 国产一区二区无码区 | 精品无码一区在线观看动漫 | 国产aⅴ视频一区二区三区 国产aⅴ熟女 | 国产欧美日韩亚洲另类 |