您好,登錄后才能下訂單哦!
本篇內容介紹了“MYSQL內存機制分析和監控”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1 為什么要有buffer pool 或者內存,緩存在MYSQL 數據庫中到底是為了什么?
估計很多人很快的回答,性能。是的內存在數據庫中其實就是為了性能,試想如果磁盤的速度和內存一樣快,還需要內存,buffer pool ,緩存嗎?
2 Buffer pool 緩存,內存,到底在MYSQL 中起到了什么作用?
首先所有的數據處理和變化都是在內存中,磁盤中的數據僅僅是為了持久化而,所以最復雜的處理關系,類似于死鎖,block ,互斥,數據字典,bulabula 等等都存在于內存中。所以一問道死鎖,千萬別和別人說是因為磁盤慢了之類的 ,因為他不發生在磁盤,而是在內存中。
3 磁盤的數據page 和 內存的數據page 有關嗎?
是的是有關系的,磁盤的數據頁面是要映射到內存中去的,這也就牽扯到另外一件事情,就是page頁面的大小,在PG 中磁盤的頁面大小是可以調整的,MYSQL 默認是16KB ,ORACLE 是 8 KB, SQL SERVER 也是 8KB。換句話也就是說,有些數據庫的頁面大小是可以調整的,有些是不可以的,同時他們的磁盤的頁面會直接映射到內存中。
4 頁面的大小對數據庫的性能有什么影響?
這個問題其實我也是一直在書籍和,google中去找尋,但一直沒有一個答案或者可以讓人信服的答案,這里就嘗試自己分析一下,以MYSQL的頁面16KB為為例,如果一次讀入的數據是8KB,那16KB只能使用其中一半,如果后期有在讀入8KB的數據,可以在使用另外一半的內存,但是如果讀入的是4KB的數據,則可能會浪費 4KB的cache,所以分配的頁面太大會有浪費的情況,那有人說,8KB的比16KB的要小,所以浪費的空間少,但從另一個角度來分析,如果一次我要讀入12KB的數據呢,那是不是要分成兩個page?效率上是否比一個頁面能承載的數據在處理上要麻煩,并且一個數據頁分成兩個,是否還有其他需要進行的事情,例如連接 等等?
所以一個數據頁的大小,見仁見智,不是非黑即白,需要根據具體的問題具體分析,如果你的MYSQL使用的是壓縮頁面,16KB 或更大的頁面或許會更好。所以有的時候,數據庫的頁面可以被調整,根據業務或者根據某種特性來進行設置,會保證更好的性能,而類似 SQL SERVER ,ORACLE 這樣的數據庫是不可以調整的。
5 內存中的數據是否有退出機制?
回答是一定的,任何數據庫的內存的數據都有退出的機制,否則內存難道要和數據的大小一致,在目前的硬件技術上,這是不大可能的,所以內存必須有退出的機制。從另外一個事情上,也反應出硬件的變化,其實對數據庫的軟件設計是有聯動性或者部分決定性的。
6 內存中涉及管理內存頁的是怎么做的
MYSQL 中的內存管理主要使用的是 LRU 算法(變種),Least Recently Used,在MYSQL 的 BUFFER POOL 中是包含 New SUBLIST 和 Old Sublist
上面的圖大家都看見了,大致LRU (進化)的算法, 新讀入內存的都放入到 young 區域 5/8 buffer pool ,而經常被調用的頁面則會在一個算法后從5/8 放入到 3/8中,具體其實如果讀過 ORACLE 的內存管理,其中有一段和MYSQL 是大致相同的,都是隊列的概念+頻繁提取的數據提前。
當然數據頁中的數據是變化的,也就是說變化的數據頁就是臟頁,而臟頁就要刷入到磁盤中進行合并,進行永久化,當然這個過程可以單獨寫一篇甚至多篇文字,這里就不展開了。
這里提出一個問題,如果數據頁變化了,我在去讀這個數據頁怎么辦?
這里大概率是你要去讀change buffer ,(insert buffer replacement),而不會等待你的臟頁刷新到磁盤,在讀到內存,在進行后續的工作。
那如何查詢這些內存的信息,就對系統的性能變得尤為重要了
查看當然可以被收集的內存 ITEM 信息
SELECT * FROM performance_schema.setup_instruments
WHERE NAME LIKE '%memory/innodb%'
對某些不進行收集的內存信息進行收集
update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory/innodb/buf_buf_pool'
同時通過語句可以獲得,內存在MYSQL 中的分配信息
其實關于MYSQL的內存管理,當然我們也可以通過另外的方法去訪問,見下圖,當然這應該是最基本的應該被掌握的。怎么查看 Do you get it ?
“MYSQL內存機制分析和監控”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。