MySQL資料庫技術內幕-InnoDB存儲引擎-讀書筆記(一)

MySQL技術內幕-InnoDB存儲引擎-讀書筆記(一)

作為php開發,使用mysql總是少不瞭的

mysql
博客鏈接 http://itsong.net/articles/466.html

第一章 MySQL體系結構和存儲引擎

MySQL被設計為一個單進程多線程架構的資料庫
./mysql –help | grep my.cnf 可以查看mysql資料庫實例啟動時,它會在哪些位置查找配置文件。
配置文件中有一個datadir參數,指定瞭資料庫所在的路徑。默認為/usr/local/mysql/data。
體系結構,mysql由以下幾部分組成:連接池組件,管理服務和工具組件,sql接口組件,查詢分析器組件,優化器組件,緩沖cache組件,插件式存儲引擎,物理文件。
InnoDB存儲引擎,支持事務,行鎖,支持外鍵,默認讀操作不產生鎖
MyISAM存儲引擎,不支持事務,表鎖,全文索引
unix域套接字訪問mysql,-S /tmp/mysql.sock。

第二章 InnoDB存儲引擎

後臺線程有7個,4個IO,1個master thread,一個鎖監控線程,1個錯誤監控線程。master thread幾乎實現瞭所有功能。
4個IO線程為,insert buffer thread,log thread,read thread,write thread。
引擎內存分為:緩沖池buffer pool(最大),重做日志緩沖池redo log buffer,以及額外的內存池additional memory pool。
按頁(每頁16K)讀到緩沖池,LRU算法保留緩存數據。先改緩沖池中的頁-臟頁,再按一定頻率將臟頁刷新flush到文件show engine innodb status可以看緩沖池具體使用情況。
緩沖池緩存的數據頁類型有:索引頁,數據頁,undo頁,插入緩沖,自適應哈希索引,innodb存儲的鎖信息,數據字典信息等。索引頁和數據頁最大。
日志緩沖將重做日志信息先放入這個緩沖區,按一定頻率刷新到重做日志文件。
master thread線程優先級最高,分為幾個循環:主循環,後臺循環,刷新循環,暫停循環。
主循環,每秒一次的操作包括日志緩沖刷到磁盤,即使事務沒提交(所以大事務也很快),合並插入緩沖(可能),至多刷新100個innodb緩沖池中的臟頁到磁盤(可能),如果沒有用戶活動,切換到後臺循環(可能)。
合並插入緩沖並不是每秒都發生,判斷當前一秒內io次數是否小於5次,io壓力小則執行合並插入緩沖。
緩沖池中臟頁比例大於90%,做磁盤同步操作,將100個臟頁寫入磁盤
主循環,每10秒的操作,刷新100個臟頁到磁盤(可能),合並至多5個插入緩沖(總是),將日志緩沖刷新到磁盤(總是),刪除無用的undo頁(總是),刷新100個或者10個臟頁到磁盤(總是),產生一個檢查點(總是)。
判斷過去10秒磁盤io是否小於200次,ok則刷100個臟頁到磁盤。
看臟頁比例,超過70%,刷新100個臟頁,如果小於70%,刷新10個臟頁。
後臺循環,刪除無用的undo頁(總是),合並20個插入緩沖(總是),跳回到主循環(總是),不斷刷新100個頁,直到符合條件。
調整innodb_max_dirty_pages_pct可以加快刷新臟頁的頻率,保證磁盤io的負載,比如75-80
關鍵特性:插入緩沖,兩次寫double write,自適應哈希索引adaptive hash index。
插入緩沖的使用需要滿足兩個條件:索引是輔助索引,索引不是唯一的。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *