mysql innodb的重要組件匯總
innodb包涵如下幾個(gè)組件
一、innodb_buffer_pool:
它主要用來緩存數(shù)據(jù)與索引(準(zhǔn)確的講由于innodb中的表是由聚集索引組織的,所以數(shù)據(jù)只不是過主鍵這個(gè)索引的葉子結(jié)點(diǎn))。
二、change buffer:
1如果更新語句要更新二級(jí)索引的記錄,但是記錄所在的頁面這個(gè)里面并沒有在innodb_buffer_pool中,innodb會(huì)把這個(gè)對(duì)二級(jí)索引
面頁的更新動(dòng)作緩存到innodb_buffer_pool的一個(gè)特定區(qū)域(change buffer);等到之后如果有別的事務(wù)B要去讀這個(gè)二級(jí)索引頁的時(shí)候,
由于頁面還沒有,在innodb_buffer_pool中所以B事務(wù)會(huì)先把頁面載入innodb_buffer_pool,這樣子目標(biāo)頁面就算進(jìn)入innodb_buffer_pool了,
接下來就可根據(jù)change buffer的內(nèi)容來更新索引頁面了。這樣可以節(jié)約IO操作,提高性能。
2當(dāng)然別的刷新機(jī)(把change buffer中的變更落盤)制也是有的,比如說當(dāng)mysql比較空閑的時(shí)候,slow shutdown 的過程當(dāng)中也會(huì)刷新
change buffer中的內(nèi)容到磁盤
3監(jiān)控change buffer
show engine innodb status;-------------------------------------INSERT BUFFER AND ADAPTIVE HASH INDEX-------------------------------------Ibuf: size 1, free list len 0, seg size 2, 0 mergesmerged operations: insert 0, delete mark 0, delete 0discarded operations: insert 0, delete mark 0, delete 0Hash table size 34679, node heap has 0 buffer(s)Hash table size 34679, node heap has 0 buffer(s)Hash table size 34679, node heap has 0 buffer(s)Hash table size 34679, node heap has 0 buffer(s)Hash table size 34679, node heap has 0 buffer(s)Hash table size 34679, node heap has 0 buffer(s)Hash table size 34679, node heap has 0 buffer(s)Hash table size 34679, node heap has 0 buffer(s)0.00 hash searches/s, 0.00 non-hash searches/s---LOG---Log sequence number 24635311Log flushed up to 24635311Pages flushed up to 24635311Last checkpoint at 246353020 pending log flushes, 0 pending chkp writes10 log i/o’s done, 0.00 log i/o’s/second
三、自適應(yīng)hash索引:
1如果表中的某些行會(huì)非常頻繁的用到,由于innodb表是B+樹組織起來的這一特性,最好的情況下innodb也是先讀索引頁,再讀數(shù)據(jù)頁,然后
找到數(shù)據(jù);hash索引是用B+樹索引的hash為鍵,以B+樹索引的值(指向的頁面)為值的;由于有了hash索引的引入,innodb可以通過計(jì)算索引的hash
值就直接定位到數(shù)據(jù)所在的頁面;所以對(duì)于非范圍查找的情況下hash索引這樣的處理方式是有優(yōu)勢(shì)的。
2要想innodb能用上bash索引還要有幾個(gè)條件1、innodb_adaptive_hash_index=1 這樣innodb就會(huì)啟用hash索引了;然而這只是完成了一半,
innodb并不是為表中的所有行建立hash索引的,只是表中頻繁訪問的行才會(huì)為它建立hash索引,為冷數(shù)據(jù)建立hash索引是一種浪費(fèi);
innodb_adaptive_hash_index_parts 可以設(shè)置hash索引的分區(qū),這種可以提升并發(fā)度。
四、redo log buffer:
redo log buffer 中的內(nèi)容會(huì)被定期的刷新到磁盤,如果redo log buffer 設(shè)置的比較大它有利于mysql對(duì)大事務(wù)的處理,原因在于在大事務(wù)的處理中
可以把redo 寫入到redo log buffer 而不是寫入到磁盤,由于內(nèi)存比磁盤快,所以大事務(wù)的處理速度上也會(huì)比較快;也就是說redo log buffer 比較大
的情況下在commit 之前可以減少一些沒有必要的刷磁盤操作。
五、系統(tǒng)表空間:
innodb 系統(tǒng)表空間中包涵如下內(nèi)容:innodb 數(shù)據(jù)字典,一些存儲(chǔ)區(qū)域如 doublewritechangebufferundolog ,如果innodb_file_per_table
沒有打開那么那么用戶建的表就會(huì)保存到這個(gè)系統(tǒng)表空間中,這種情況下系統(tǒng)表空間也就可以看面它包涵共享表空間了。
以上就是mysql innodb的重要組件匯總的詳細(xì)內(nèi)容,更多關(guān)于mysql innodb組件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. mysql數(shù)據(jù)存放的位置在哪2. Mysql 用戶權(quán)限管理實(shí)現(xiàn)3. Microsoft Office Access修改代碼字體大小的方法4. MySQL存儲(chǔ)過程例子(包含事務(wù)、參數(shù)、嵌套調(diào)用、游標(biāo)循環(huán)等)5. Mysql入門系列:安排預(yù)防性的維護(hù)MYSQL數(shù)據(jù)庫服務(wù)器6. MySQL 字符串函數(shù):字符串截取7. 恢復(fù)從 Access 2000、 Access 2002 或 Access 2003 中數(shù)據(jù)庫刪除表的方法8. MySQL中InnoDB和MyISAM類型的差別9. MySQL 8.0 之索引跳躍掃描(Index Skip Scan)10. mssql鎖基礎(chǔ)教程
