您好,登錄后才能下訂單哦!
這篇文章主要講解了“MYSQL change buffer的原理說明”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MYSQL change buffer的原理說明”吧!
關于MYSQL 的change buffer 的說一說,為何,因為它可以加速你的寫操作,意思就是 insert update delete 等操作,尤其是你的表有一堆索引的情況下,那必須要進行特殊的設置。
可能馬上有一個聲音,為什么是表有一堆索引的情況下,才要有特殊的設置。
1 索引與表是緊密的關系,插入,更新,刪除一條記錄,就會觸發與表有關系的索引的操作,你可以將他們看做一個事務,如果其中有任何一個對索引的操作失敗,則你的數據對表的操作也應該會失敗。
2 對于表附加的索引的操作必然影響對源表的數據的操作速度,而DML操作會影響數據的讀取和事務隔離性相關的性能,然后引起連鎖反應,表插入的,更改的,刪除的,慢了,則表的SELECT 的性能也必然受到影響。
3 當對表執行插入、更新和刪除操作時,索引(非聚集索引)列的值通常是無序的,這需要大量的I/O來更新輔助索引。當相關頁不在緩沖池中時,更改緩沖區將更改緩存到索引,從而通過不立即從磁盤讀入頁來避免昂貴的I/O操作。當頁面加載到緩沖池中時,將合并已緩存的更改,然后將更新后的頁面刷新到磁盤。
帶來的好處,如果MYSQL 承擔大量的DML操作,則change buffer是必不可少的,他的存在就是盡量減小I/O的消耗,通過內存進行數據的合并操作,將多次操作操作盡量變為少量的I/O操作。帶來的壞處,就是change buffer 會使用innodb_buffer的空間,所以如果你內存少,那就....... 默哀3分鐘。
說道這個東西,那自然必須要在MY.CNF 中調整一下參數配置。
具體有兩個參數
1 innodb_change_buffering
這個參數決定了你的change buffer的用途,你是要吃咸的還是甜的,都在這里面了。具體的選擇項
none
inserts
deletes
changes
purges
all
2 innodb_change_buffer_max_size
另一個選擇項是對 buffer_pool 中的內存進行百分比的設置,默認是 25% 最大你可以設置 50%
3 innodb_change_buffering_debug
對于change buffer 如果造成問題,我們也需要第一時間從 ERRORLOG 匯總獲知,所以建議至少設置為 1
下面是MYSQL 不關于這部分的代碼(有時間還真的好好看看C++,要不看代碼屬于白癡的水平),
1 UNIV_PAGE_SIZE 是 數據頁的大小
2 buf_pool_get_curr_size 是 當前的 innodb_buffer_pool 的大小
最后最大的設置得到應該是以頁面大小為單位的塊的百分比。
感謝各位的閱讀,以上就是“MYSQL change buffer的原理說明”的內容了,經過本文的學習后,相信大家對MYSQL change buffer的原理說明這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。