mysql必须的组件_mysql innodb的重要组件
innodb包涵如下幾個組件
一、innodb_buffer_pool:
1 它主要用來緩存數據與索引(準確的講由于innodb中的表是由聚集索引組織的,所以數據只不是過主鍵這個索引的葉子結點)。
二、change buffer:
1 如果更新語句要更新二級索引的記錄,但是記錄所在的頁面這個里面并沒有在innodb_buffer_pool中,innodb會把這個對二級索引
面頁的更新動作緩存到innodb_buffer_pool的一個特定區域(change buffer);等到之后如果有別的事務B要去讀這個二級索引頁的時候,
由于頁面還沒有,在innodb_buffer_pool中所以B事務會先把頁面載入innodb_buffer_pool,這樣子目標頁面就算進入innodb_buffer_pool了,
接下來就可根據change buffer的內容來更新索引頁面了。這樣可以節約IO操作,提高性能。
2 當然別的刷新機(把change buffer中的變更落盤)制也是有的,比如說當mysql比較空閑的時候,slow shutdown 的過程當中也會刷新
change buffer中的內容到磁盤
3 監控change buffer
show engine innodb status;-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0merges
merged operations:insert 0, delete mark 0, delete 0discarded operations:insert 0, delete mark 0, delete 0Hashtable size 34679, node heap has 0buffer(s)
Hashtable size 34679, node heap has 0buffer(s)
Hashtable size 34679, node heap has 0buffer(s)
Hashtable size 34679, node heap has 0buffer(s)
Hashtable size 34679, node heap has 0buffer(s)
Hashtable size 34679, node heap has 0buffer(s)
Hashtable size 34679, node heap has 0buffer(s)
Hashtable size 34679, node heap has 0buffer(s)0.00 hash searches/s, 0.00 non-hash searches/s---
LOG
---
Log sequence number 24635311
Log flushed up to 24635311Pages flushed upto 24635311Lastcheckpoint at 24635302
0 pending log flushes, 0pending chkp writes10 log i/o's done, 0.00 log i/o's/second
三、自適應hash索引:
1 如果表中的某些行會非常頻繁的用到,由于innodb表是B+樹組織起來的這一特性,最好的情況下innodb也是先讀索引頁,再讀數據頁,然后
找到數據;hash索引是用B+樹索引的hash為鍵,以B+樹索引的值(指向的頁面)為值的;由于有了hash索引的引入,innodb可以通過計算索引的hash
值就直接定位到數據所在的頁面;所以對于非范圍查找的情況下hash索引這樣的處理方式是有優勢的。
2 要想innodb能用上bash索引還要有幾個條件1、innodb_adaptive_hash_index=1 這樣innodb就會啟用hash索引了;然而這只是完成了一半,
innodb并不是為表中的所有行建立hash索引的,只是表中頻繁訪問的行才會為它建立hash索引,為冷數據建立hash索引是一種浪費;
innodb_adaptive_hash_index_parts 可以設置hash索引的分區,這種可以提升并發度。
四、redo log buffer:
redo log buffer 中的內容會被定期的刷新到磁盤,如果redo log buffer 設置的比較大它有利于mysql對大事務的處理,原因在于在大事務的處理中
可以把redo 寫入到redo log buffer 而不是寫入到磁盤,由于內存比磁盤快,所以大事務的處理速度上也會比較快;也就是說redo log buffer 比較大
的情況下在commit 之前可以減少一些沒有必要的刷磁盤操作。
五、系統表空間:
1 innodb 系統表空間中包涵如下內容:innodb 數據字典,一些存儲區域如 doublewrite\changebuffer\undolog ,如果innodb_file_per_table
沒有打開那么那么用戶建的表就會保存到這個系統表空間中,這種情況下系統表空間也就可以看面它包涵共享表空間了。
六、
----
總結
以上是生活随笔為你收集整理的mysql必须的组件_mysql innodb的重要组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享一个查询快递物流单号的方法快递单号怎
- 下一篇: 大文本导入mysql_大文本数据,导入导