Java進階——高性能MySQL(一)

MySQL邏輯架構:安全

連接管理與安全性:架構

MySQL5.5或更高版本版本提供了一個API,支持線程池(Thread-Pooling)插件,能夠使用池中的少許線程來服務大量的鏈接。併發

優化與並行:優化

MySQL會解析查詢,並建立解析樹,而後對其進行各類優化,包括重寫查詢,決定表的讀取順序,以及選擇合適的索引等。spa

併發控制:插件

1.讀寫鎖:線程

讀鎖爲共享鎖,相互不阻塞。寫鎖爲排他鎖,持有寫鎖會阻塞其餘讀寫操做。blog

2.鎖粒度:索引

表鎖:寫操做(增刪改)會鎖住整張表。事務

行級鎖:寫操做僅鎖住修改的行。

事務:

事務就是一組原子性的SQL操做。

START TRANSACTION;

......

COMMIT;

特性:ACID(原子性、一致性、隔離性、持久性)。

隔離級別:

事務之間的相互可見程度。

READ UNCOMMITTED  髒讀、不可重複讀、幻讀

READ COMMITTED  不可重複讀、幻讀

REPEATABLE READ  幻讀

SERIALIZABLE  加鎖讀

假設有連個併發的事務A、B

1.A事務修改某行未提交,B事務查詢,則髒讀。

2.A事務修改某行提交,B事務在A事務前與提交後均查詢,兩次結果不一樣,即不可重複讀。

3.A事務新增某行提交,B事務在A事務提交前範圍查詢,提交後又範圍查詢,多查出新增行,即幻讀。

4.全部事務串行執行,加鎖讀。

死鎖:

事務1

START TRANSACTION;

update stockPrice set close = 45.50 where stock_id=4 and date = '2002-05-01';

update stockPrice set close = 19.80 where stock_id=3 and date = '2002-05-02';

COMMIT;

事務2

START TRANSACTION;

update stockPrice set high= 20.12 where stock_id=3 and date = '2002-05-02';

update stockPrice set high = 47.20 where stock_id=4 and date = '2002-05-01';

COMMIT;

湊巧兩條事務都執行了第一行,持有了對方的鎖。要執行第二行的時候須要對方釋放鎖,會形成死鎖。

InnoDB存儲引擎會檢查死鎖的循環依賴並返回一個錯誤,處理方式是將持有最少行級排他鎖的事務回滾。

InnoDB存儲引擎:

1.支持事務。

2.自動崩潰恢復。

MyISAM存儲引擎:

1.不支持事務。

2.不支持自動崩潰恢復

3.能夠壓縮表(只讀),壓縮表能夠極大減小磁盤空間

相關文章
相關標籤/搜索