題首:這是最近讀《高性能MySqL 第二版》記錄下來的東西~
#讀鎖(共享鎖)、寫鎖(排他鎖):讀鎖是共享的,互不阻塞,讀取同一資源互不影響;寫鎖排他,一個寫鎖會阻塞其他的讀寫操作。
#鎖定對象的粒度:表鎖和行鎖。
表鎖:整個表加鎖,當寫操作時,加寫鎖,資源訪問排他。當沒有寫時,加讀鎖,讀鎖互不沖突。寫鎖比讀鎖有高優先級。開銷較小。
行級鎖:對一行加鎖,開銷大,支持最大并發處理。
#事務:ACID
A原子性:一個事務是一個原子不可分的工作單元,內部的工作不會被部分執行,要么全部執行,要么根本不執行
C一致性:數據庫從一種一致狀態轉到另一種一致狀態,事務執行過程中的數據改變不會影響數據庫數據。
I 隔離性:某個事務的結果只有在事務完成后才對其他事務可見。
D持久性:一個事務提交后的結果改變將是持久的,不會馬上消失。
#MVCC:多版本并發控制
#幾個存儲引擎:
MyISAM:加表鎖,在select查詢時可以在同一張表完成插入(并發插入),可以基于BLOB和TEXT的前500字符進行相關索引。
InnoDB:事務引擎,適合處理大量短期事務,基于聚簇索引,不壓縮索引
Memory:基于堆的,內存存儲,支持哈希索引
Archive:只支持insert和select,不支持索引,緩沖了數據寫操作,插入時使用zlib算法壓縮,比MyISAM磁盤IO消耗少,所有 的select查詢執行全表掃描,適合logging,支持行級鎖。
存儲引擎 | MySqL版本 | 事務 | 鎖粒度 | 主要應用 | 忌用 |
MyISAM | 全部 | 不支持 | 支持并發插入的表鎖 | select,insert,高負載 | 讀寫并重的場合 |
MyISAM Merge | 全部 | 不支持 | 支持并發插入的表鎖 | 分段歸檔,數據倉庫 | 許多全局查找 |
Memory(Heap) | 全部 | 不支持 | 表鎖 | 中間計算,靜態數據查找 | 大型數據集,持久性存儲 |
InnoDB | 全部 | 支持 | 支持MVCC的行級鎖 | 事務處理 | 無 |
Falcon | 6.0 | 支持 | 支持MVCC的行級鎖 | 事務處理 | 無 |
Archive | 4.1 | 支持 | 支持MVCC的行級鎖 | 日志記錄,聚合分析 | 需要隨機讀取、更新、刪除 |
CSV | 4.1 | 不支持 | 表鎖 | 日志記錄,大規模加載外部數據 | 需要隨機讀取、索引 |
Blackhole | 4.1 | 支持 | 支持MVCC的行級鎖 | 日志記錄或同步歸檔 | 除非有特別目的,否則不適合任何場合 |
Federated | 5.0 | N/A | N/A | 分布式數據源 | 除非有特別目的,否則不適合任何場合 |
NDB Cluster | 5.0 | 支持 | 行級鎖 | 高可靠性 | 大部分典型應用 |
PBXT | 5.0 | 支持 | 支持MVCC的行級鎖 | 事務處理,日志記錄 | 需要聚集索引 |
SolidDB | 5.0 | 支持 | 支持MVCC的行級鎖 | 事務處理 | 無 |
Maria | 6.x | 支持 | 支持MVCC的行級鎖 | 替代MyISAM | 無 |