程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL技術內幕-InnoDB存儲引擎-讀書筆記(一)

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

編輯:MySQL綜合教程

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。 插入緩沖的使用需要滿足兩個條件:索引是輔助索引,索引不是唯一的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved