MySql性能相關(guān)的一些概念(性能tip0)
題首:這是最近讀《高性能MySqL 第二版》記錄下來(lái)的東西~
#讀鎖(共享鎖)、寫鎖(排他鎖):讀鎖是共享的,互不阻塞,讀取同一資源互不影響;寫鎖排他,一個(gè)寫鎖會(huì)阻塞其他的讀寫操作。
#鎖定對(duì)象的粒度:表鎖和行鎖。
表鎖:整個(gè)表加鎖,當(dāng)寫操作時(shí),加寫鎖,資源訪問(wèn)排他。當(dāng)沒(méi)有寫時(shí),加讀鎖,讀鎖互不沖突。寫鎖比讀鎖有高優(yōu)先級(jí)。開(kāi)銷較小。
行級(jí)鎖:對(duì)一行加鎖,開(kāi)銷大,支持最大并發(fā)處理。
#事務(wù):ACID
A原子性:一個(gè)事務(wù)是一個(gè)原子不可分的工作單元,內(nèi)部的工作不會(huì)被部分執(zhí)行,要么全部執(zhí)行,要么根本不執(zhí)行
C一致性:數(shù)據(jù)庫(kù)從一種一致?tīng)顟B(tài)轉(zhuǎn)到另一種一致?tīng)顟B(tài),事務(wù)執(zhí)行過(guò)程中的數(shù)據(jù)改變不會(huì)影響數(shù)據(jù)庫(kù)數(shù)據(jù)。
I 隔離性:某個(gè)事務(wù)的結(jié)果只有在事務(wù)完成后才對(duì)其他事務(wù)可見(jiàn)。
D持久性:一個(gè)事務(wù)提交后的結(jié)果改變將是持久的,不會(huì)馬上消失。
#MVCC:多版本并發(fā)控制
#幾個(gè)存儲(chǔ)引擎:
MyISAM:加表鎖,在select查詢時(shí)可以在同一張表完成插入(并發(fā)插入),可以基于BLOB和TEXT的前500字符進(jìn)行相關(guān)索引。
InnoDB:事務(wù)引擎,適合處理大量短期事務(wù),基于聚簇索引,不壓縮索引
Memory:基于堆的,內(nèi)存存儲(chǔ),支持哈希索引
Archive:只支持insert和select,不支持索引,緩沖了數(shù)據(jù)寫操作,插入時(shí)使用zlib算法壓縮,比MyISAM磁盤IO消耗少,所有 的select查詢執(zhí)行全表掃描,適合logging,支持行級(jí)鎖。
存儲(chǔ)引擎 | MySqL版本 | 事務(wù) | 鎖粒度 | 主要應(yīng)用 | 忌用 |
MyISAM | 全部 | 不支持 | 支持并發(fā)插入的表鎖 | select,insert,高負(fù)載 | 讀寫并重的場(chǎng)合 |
MyISAM Merge | 全部 | 不支持 | 支持并發(fā)插入的表鎖 | 分段歸檔,數(shù)據(jù)倉(cāng)庫(kù) | 許多全局查找 |
Memory(Heap) | 全部 | 不支持 | 表鎖 | 中間計(jì)算,靜態(tài)數(shù)據(jù)查找 | 大型數(shù)據(jù)集,持久性存儲(chǔ) |
InnoDB | 全部 | 支持 | 支持MVCC的行級(jí)鎖 | 事務(wù)處理 | 無(wú) |
Falcon | 6.0 | 支持 | 支持MVCC的行級(jí)鎖 | 事務(wù)處理 | 無(wú) |
Archive | 4.1 | 支持 | 支持MVCC的行級(jí)鎖 | 日志記錄,聚合分析 | 需要隨機(jī)讀取、更新、刪除 |
CSV | 4.1 | 不支持 | 表鎖 | 日志記錄,大規(guī)模加載外部數(shù)據(jù) | 需要隨機(jī)讀取、索引 |
Blackhole | 4.1 | 支持 | 支持MVCC的行級(jí)鎖 | 日志記錄或同步歸檔 | 除非有特別目的,否則不適合任何場(chǎng)合 |
Federated | 5.0 | N/A | N/A | 分布式數(shù)據(jù)源 | 除非有特別目的,否則不適合任何場(chǎng)合 |
NDB Cluster | 5.0 | 支持 | 行級(jí)鎖 | 高可靠性 | 大部分典型應(yīng)用 |
PBXT | 5.0 | 支持 | 支持MVCC的行級(jí)鎖 | 事務(wù)處理,日志記錄 | 需要聚集索引 |
SolidDB | 5.0 | 支持 | 支持MVCC的行級(jí)鎖 | 事務(wù)處理 | 無(wú) |
Maria | 6.x | 支持 | 支持MVCC的行級(jí)鎖 | 替代MyISAM | 無(wú) |
posted on 2012-01-17 08:58 changedi 閱讀(2342) 評(píng)論(2) 編輯 收藏 所屬分類: Java技術(shù)