1. 程式人生 > >MySQL 技術內幕閱讀筆記

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)