MySQL邏輯架構
Mysql邏輯架構共三層:
- 入口層:連接/線程處理
- 服務執行層
- 存儲引擎
連接/線程處理
像大多數架構來說,入口層是必不可少的;Mysql入口層主要負責連接管理和認證及權限管理等。
- 連接管理:每個連接擁有一個線程,Mysql服務端維護了一個維護連接的線程池
- 認證管理:基于用戶名、原始主機信息和密碼;如果使用了SSL連接,還可以使用X.509證書認證
- 權限管理:Mysql對庫、表及操作權限都可以進行約束管理
服務執行層
執行層主要包含以下組件:
- 查詢緩存:像大多數架構中的redis
- 解析器:詞法分析和語法分析,創建一個解析樹(內部的數據結構)
- 優化器:主要做的就是重寫查詢、決定表的讀取順序、選擇合適的索引等工作。
存儲引擎
Mysql有以下存儲引擎:
- InnoDB(默認)
- MyISAM
- 其他非常用引擎
- Archive
- Blackhole
- CSV引擎
- Federated引擎
- Memory引擎
- Merge引擎
- NDB集群引擎
InnoDB
- 數據存儲:表空間,由一系列的數據文件組成。存儲文件是平臺獨立的,可以任意復制到各操作系統
- 事務:支持MVCC和實現了間隙鎖來防止幻讀
- 索引:基于聚簇索引(主鍵索引)實現。二級索引(非主鍵索引)都是包含了主鍵索引的
- 性能優化措施:
- 磁盤預讀
- 加速讀操作的自適應哈希索引
- 插入緩沖區(insert buffer)
MyISAM
【功能】
- 支持:全文索引、壓縮、空間函數(GIS)
- 不支持:事務、行級鎖、崩潰后無法安全恢復
【存儲】
- 文件:數據文件(.MYD)和索引文件(.MYI)
- 變長行處理:
- 5.0以前:默認能處理4G的數據,指針長度為4個字節,32位
- 5.0:默認能處理256TB的數據,因為指針長度為6個字節
- 所有版本都支持8字節,根據配置項MAX_ROW和MAX_ROW_LENGTH配置,兩者相乘得到最終值
【特性】
- 加鎖與并發:表級鎖和并發插入(讀時可寫)
- 修復:
- 人工修復:CHECK TABLE mytable和REPAIR TABKE mytable語句
- 自動修復:myisamchk命令行
- 索引特性:全文索引(基于分詞創建),對于BLOB和TEXT,會基于前500個字符創建索引
- 延遲更新索引鍵(Delayed Key Write):建表時開啟DELAY_KEY_WRITE。修改先寫入鍵緩沖區,等清理緩沖區或關閉表時才會更新索引
- 壓縮表:壓縮后不可修改,表記錄獨立壓縮
其他非常用引擎