MySQL核心InnoDB儲存引擎(卷1)筆記,mysqlinnodb
MySQL核心InnoDB儲存引擎(卷1)目錄
- 1概覽
- 2基本資料結構和演算法
- 3同步機制
- 4重做日誌
- 5mini-transaction(mtr)
- 6儲存管理
- 7記錄
- 8索引頁
- 9鎖
- 10B+樹索引
- 11Insert Buffer
- 12緩衝池
- 13交易處理
- 14資料字典
- 15服務管理
概覽基本資料結構和演算法同步機制
p38 若sync_primary_wait_array中1000個cell都已指派,則ut_error觸發crash重做日誌
LSN(表示事務寫入redo log的位元組量?)
檢查點:將緩衝池中的頁重新整理到磁碟
redo日誌的大小是固定的(3GB)->歸檔日誌
ib_logfile<N>
redo日誌塊(512B-12-8)
重做日誌組*
組提交:fsync -> log_flush_up_to 會對最後一個日誌塊進行複製
恢複:recovery_from_checkpoint_startmini-transaction(mtr)
Force-Log-at-Commit
mtr_t mtr; mtr_start(&mtr); ... mtr_commit(&mtr);
更新多行記錄時,MLOG_MULTI_REC_END儲存管理
段(segment)
資料表空間
資料結構:fil_system/space/node_struct
4個非同步I/O線程:非同步讀、非同步寫、插入緩衝、重做日誌記錄
p103 VARCHAR類型的NULL不佔用磁碟空間,而CHAR NULL用0x00填充
大記錄:BLOB/TEXT(溢出頁,extern屬性)
邏輯記錄
行記錄版本(MVCC只是列?):通過隱藏的事務ID列
p114 函數read_view_sees_trx_id用來判斷當前事務是否可以讀記錄的目前的版本,不是,則row_sel_build_prev_vers_for_mysql索引頁
Page Directory(定位記錄在頁內的位置)
Page Cursor*鎖
lock_rec_struct = { space, page_no, n_bits }
p144 LOCK_GAP(代表範圍鎖不包含端點)
顯式鎖和隱式鎖**(略)
行鎖的維護*(重點,略)
自增鎖(atomic?)
死結*B+樹索引
DML操作
主鍵更新
持久遊標 btr_pcur_struct
自適應雜湊索引*Insert Buffer緩衝池
線性預讀*
邏輯預讀
頁的重新整理交易處理
undo日誌實現:復原段 + undo段
undo記錄
purge*
rollback
commit資料字典服務管理
MySQL儲存引擎沒有InnoDB
使用
mysql> show engines;
指令 看看有沒InnoDB
如果沒有 介意重裝
Mysql資料庫3種儲存引擎有什不同?
這個是考慮效能的問題,還有事務的支援,吧 百度一下你就知道
MyISAM、InnoDB、Heap(Memory)、NDB
貌似一般都是使用 InnoDB的,
mysql的儲存引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事務安全表,其他儲存引擎都是非事務安全表。
最常使用的2種儲存引擎:
1.Myisam是Mysql的預設儲存引擎,當create建立新表時,未指定新表的儲存引擎時,預設使用Myisam。每個MyISAM在磁碟上儲存成三個檔案。檔案名稱都和表名相同,副檔名分別是.frm(儲存表定義)、.MYD(MYData,儲存資料)、.MYI(MYIndex,儲存索引)。資料檔案和索引檔案可以放置在不同的目錄,平均分布io,獲得更快的速度。
2.InnoDB儲存引擎提供了具有提交、復原和崩潰恢複能力的事務安全。但是對比Myisam的儲存引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留資料和索引。
不知道是不是對你有協助