mysql innodb4大特征_MYSQL中InnoDB特性浅谈
許久沒有更新博客,上周末放假把網易大牛姜sir的著作MYSQL技術內幕InnoDB存儲引擎又翻閱了一番,對當前工作的InnoDB特性有了一些新的認識,下面談談自己的讀后感.
1. InnoDB的體系架構由一系列后臺線程,內存池和文件組成,這點與其他DB有相似之處. 在內存中劃分了一塊區域,即緩沖池,用來臨時存放用戶讀寫的數據頁. InnoDB上對緩沖池讀寫數據頁,刷新到磁盤等操作也使用了CHECKPOINT機制,LRU算法,這點與SQLSERVER,DB2等數據庫設計一致,這里不再闡述.需要注意的是MYSQL中指定LRU列表的midpoint控制位置由參數innodb_old_blocks_pct控制,該參數決定了新讀取的頁會插入到LRU尾部多少的位置.一般為37%.
2. 插入緩沖: 插入緩沖是InnoDB存儲引擎開創性的設計,主要為了解決非聚集索引插入或更新操作時,由于非聚集索引離散地訪問非聚集索引頁,從而導致插入操作性能下降.這是因為非聚集索引本身的特性決定的.所以INNODB引入了插入緩沖這一特性,對于非聚集索引的插入或更新操作,不是每一次直接插入到索引頁,而是先判斷插入的非聚集索引頁是否在緩沖池中,若在則直接插入,如果不在則先放到到一個Insert Buffer對象中.然后再以一定的頻率和情況進行Insert Buffer和輔助索引頁子節點的合并操作,這時通常能將多個插入合并到一個操作中(因為在一個索引頁中),這樣大大提高了對于非聚集索引插入的性能.
插入緩沖的使用需要同時滿足兩個條件:1.索引為輔助索引;2.索引不是唯一的.因為在插入緩沖時,數據庫并不去查找索引頁來判斷插入的記錄的唯一性.如果去查找肯定又會有離散讀取的情況發生,從而導致insert buffer失去了意義.
插入緩沖目前存在的問題主要是在寫密集的情況下,插入緩沖會占用過多的緩沖池內存.
目前DB2,SQLSERVER上均沒有插入緩沖這項特性.
3.Double-Write: 兩次寫主要帶給InnoDB數據引擎的是數據頁的可靠性.在其他數據庫下,當某個數據頁在正在寫的過程中發生災難,如電源問題導致宕機,該數據頁會出現寫失效的情況.當然我們可以通過重做日志進行恢復,但是由于重做日志記錄的本身是對頁的物理操作,如偏移量,寫入記錄等等.當物理頁本身在宕機過程中損壞,再通過重做日志恢復不可行.面對這種情況,DB2,SQLSERVER通過內部命令REPAIRDB或者其他REPAIR工具去修復數據頁.而MYSQL InnoDB兩次寫特性保證數據再在寫入磁盤前先順序寫入共享表空間上,然后通過函數同步磁盤.這樣相當于創建了數據頁的一個副本.
4.自適應哈希索引:這是MYSQL INNODB另一個重要特性. InnoDB存儲引擎會監控對表上各索引頁的查詢,如果觀察到建立哈希索引可以帶來速度提升,則自行建立哈希索引.InnoDB存儲引起會自動根據訪問的頻率和模式來自動地為某些熱點頁建立哈希索引.這個是SQLSERVER和DB2所不具備的
MYSQL中InnoDB特性淺談
標簽:存在???查找???頻率???控制???恢復???物理???帶來???技術???poi
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:http://www.cnblogs.com/ducklightfatman/p/6945480.html
總結
以上是生活随笔為你收集整理的mysql innodb4大特征_MYSQL中InnoDB特性浅谈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中如何统计目录中的文件,[Li
- 下一篇: Hibernate——(3)主键生成策略