innodb引擎的三大特性,插入缓冲(change buffer),两次写(doule write),自适应哈希索引(AHI)
說說innodb三大特性:
插入緩沖(change buffer),兩次寫(double write),自適應哈希索引(adaptive hash index)
構成了innodb的三大特性,這些性能讓innodb引擎有了更好的性能和可靠性。
(1)插入緩存
影響數(shù)據(jù)庫的主要性能問題是I/O,而插入緩存的作用就是把普通縮影上的DML操作從隨機I/O變成順序I/O,工作原理:先判斷插入的普通索引頁是否在緩沖池中,如果在就可以直接插入,不過不在就先房子change buffer 中,然后進行changebuffer普通索引的合并操作,可以將多個插入合并到一個插入中,提高了普通索引的插入性能。
show global variables like ‘innodb_change%%’;
±------------------------------±------+
| Variable_name | Value |
±------------------------------±------+
| innodb_change_buffer_max_size | 25 |#生產(chǎn)配置25
| innodb_change_buffering | all |
±------------------------------±------+
2 rows in set (0.00 sec)
innodb_change_buffer_max_size的含義:占innodb_buffer_pool的最大比例,默認25%,最大占bufferpool1/4.
innodb_change_buffering change_buffer的類型:
有如下幾種類型:
all:緩沖全部inserts,delete標記操作的purge操作。
none:關閉insert buffer .
insert:insert 標記操作。
delete:delete標記操作。
changes:為進行實際insert 和delete,試試標記,等待后續(xù)purge.
建議選擇默認的all就可以了(生產(chǎn)配置)。
需要滿足的條件:
索引是輔助索引
索引不是唯一索引。
(2)兩次寫(double write)
插入緩沖帶來的是針對普通索引插入性能上的提升,而double write就是保證寫入的安全性,防止mysql實例發(fā)生宕機時,數(shù)據(jù)丟失,其實兩次寫就是多了一個redo 頁的副本,如果實例宕機了,可以先通過副本把原來的頁還原出來,再通過redo log進行恢復,重做,這就是double write的作用,
doublewrite由兩部分組成:
一部分時內存中的doublewrite buffer,大小占2MB,
一半部分是物理磁盤共享表空間中連續(xù)的128個頁,即2個區(qū),大小同樣為2MB。
在對緩沖池的贓頁進行刷新時并不直接寫磁盤,而是會通過memcpy函數(shù)將贓頁先復制到內存中的doublewrite buffer,之后通過doublewrite buffer再分兩次,每次1MB地寫入共享表空間的物理磁盤上,然后馬上調用fsync函數(shù),同步磁盤,避免緩沖寫帶來的問題,在這個過程中,因為doublewrite頁是連續(xù)的,因此這個過程是順序寫的,開銷并不是很大,在完成doublewrite頁的寫入后,在將doublewrite buffer中的頁寫入各個表空間文件中,此時的寫入則是離散的,可以通過下列命令觀察到doublewrite運行情況。
show global status like ‘innodb_dblwr%’;
±---------------------------±------+
| Variable_name | Value |
±---------------------------±------+
| Innodb_dblwr_pages_written | 6325180|#共寫了多少頁
| Innodb_dblwr_writes | 100400|#共寫入的次數(shù)想·
±---------------------------±------+
2 rows in set (0.00 sec)
查看是否開啟double write功能。
show global variables like ‘innodb_doublewrite%’;
±-------------------±------+
| Variable_name | Value |
±-------------------±------+
| innodb_doublewrite | ON |
±-------------------±------+
1 row in set (0.00 sec)
(3)自適應哈希索引
哈希是一種非常快的查找方法,innodb存儲引擎會監(jiān)控對表上各索引頁的查詢,如果觀察到簡歷啊哈希索引可以帶來速度提升,則建立哈希索引,簡稱自適應哈希索引AHI。
innodb存儲引擎會自動根據(jù)訪問的頻率和默哀是來自動的為某些熱點頁建立哈希索引。
AHI有一個要求,即對這個頁的連續(xù)訪問模式必須是一樣的,例如:
對于(a,b)這樣的聯(lián)合索引頁,其訪問模式可以是以下情況:
where a=xxx
where a=xxx and b=xxx
這里說的訪問模式一樣是指查詢的條件一樣,若交替進行上述兩種查詢,那么innodb存儲引擎不會對該頁構造AHI,因此AHI還有如下的要求:
*以該模式訪問了100次,
*頁通過該模式訪問了N次,其中N=頁中記錄 *1/16
據(jù)官方文檔,啟用AHI后,讀取和寫入速度可以提高2倍,輔助索引的連續(xù)操作性能可以提高5倍,
注意:哈希索引只能用來搜索等值的查詢。范圍查詢是不能使用哈希索引的。
總結
以上是生活随笔為你收集整理的innodb引擎的三大特性,插入缓冲(change buffer),两次写(doule write),自适应哈希索引(AHI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s标签大全
- 下一篇: 百度网盘资源怎么分享群链接下载?