MySQL 技術內幕閱讀筆記
第一章 mysql 結構體系和儲存引擎
檢視 mysql 例項程序
ps -ef | grep mysqld
檢視 my.cnf 讀取路徑,如果每個路徑都有 my.cnf 以最後一個為準
[email protected]:/home/sunrise/soft/mysql/bin# ./mysql --help | grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /home/sunrise/soft/mysql/my.cnf ~/.my.cnf
datadir 表示資料庫檔案所在的路徑
datadir 預設路徑為 /usr/local/mysql/data, 但是一般情況下這個目錄是一個連線指向 /opt/mysql_data
show variables like 'datadir';
儲存引擎基於表不基於資料庫.
innodb 特性
5.5.8 開始 innodb 為預設儲存引擎,支援外來鍵,使用行鎖,預設讀取不加鎖.採用 mvcc (多版本併發控制)獲取高併發性.實現了標準的4種隔離級別,預設隔離級別為 repeatable(同一個事務可重讀).採用聚集方式組織資料,因此每張表的儲存都是按主鍵的順序進行存放的.如果沒有主鍵,預設會生產一個 6Byte 主鍵.
myisam 特性
5.5.8 之前 myisam 為預設儲存引擎,不支援事務,使用表鎖,支援全文索引.表由MYD(data)和MYI(index)組成.
NDB 特性
叢集引擎,資料都放在記憶體中(非索引資料可以放在磁碟上).join 操作在 mysql資料庫層面完成.所以 join 操作需要巨大的天網路開銷
Memory 特性
只支援表suo,不支援text 和 blob 型別.儲存變長欄位的時候使用定長欄位(varchat 用 char 儲存). mysql 使用 memory 作為臨時表的存放處,如果臨時表的資料大於 memory 可以承受的範圍或者零食表含有 text 和 blob型別,會生成一張 myisam 表寫入磁碟,效率會大大降低.
Archive 特性
只支援 insert 和 select,支援行鎖(但是感覺行鎖沒有意義),使用壓縮演算法儲存行,壓縮比例為 1:10 左右.適合歸檔類資料,日誌等等.
Federated 特性
不存放資料,指向遠端 mysql 的表,類似 sql server 的連線伺服器.
Maria 特性
有取代 myisam 之意,支援快取資料和索引檔案,支援行鎖,事務和 mvcc.以及更好的 blob 字元型別的處理效能.
其他還有 merge csv sphinx infobright.
show engines;(當前支援的引擎)
第二章 innodb 儲存引擎
頁單位介紹
Page是Innodb儲存的最基本結構,也是Innodb磁碟管理的最小單位,與資料庫相關的所有內容都儲存在Page結構裡。Page分為幾種型別:資料頁(B-Tree Node)
,Undo頁(Undo Log Page)
,系統頁(System Page)
,事務資料頁(Transaction System Page)
等;每個資料頁的大小為16kb
,每個Page使用一個32位(一位表示的就是0或1)的int值來表示,正好對應Innodb最大64TB的儲存容量(16kb * 2^32=64tib)