真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MYSQL內(nèi)存機(jī)制分析和監(jiān)控

本篇內(nèi)容介紹了“MySQL內(nèi)存機(jī)制分析和監(jiān)控”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比阿拉善盟網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式阿拉善盟網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋阿拉善盟地區(qū)。費用合理售后完善,10年實體公司更值得信賴。

1 為什么要有buffer pool 或者內(nèi)存,緩存在MYSQL 數(shù)據(jù)庫中到底是為了什么?

估計很多人很快的回答,性能。是的內(nèi)存在數(shù)據(jù)庫中其實就是為了性能,試想如果磁盤的速度和內(nèi)存一樣快,還需要內(nèi)存,buffer pool ,緩存嗎?

2 Buffer pool 緩存,內(nèi)存,到底在MYSQL 中起到了什么作用?

首先所有的數(shù)據(jù)處理和變化都是在內(nèi)存中,磁盤中的數(shù)據(jù)僅僅是為了持久化而,所以最復(fù)雜的處理關(guān)系,類似于死鎖,block ,互斥,數(shù)據(jù)字典,bulabula 等等都存在于內(nèi)存中。所以一問道死鎖,千萬別和別人說是因為磁盤慢了之類的 ,因為他不發(fā)生在磁盤,而是在內(nèi)存中。

3 磁盤的數(shù)據(jù)page 和 內(nèi)存的數(shù)據(jù)page 有關(guān)嗎?

是的是有關(guān)系的,磁盤的數(shù)據(jù)頁面是要映射到內(nèi)存中去的,這也就牽扯到另外一件事情,就是page頁面的大小,在PG 中磁盤的頁面大小是可以調(diào)整的,MYSQL 默認(rèn)是16KB ,ORACLE 是 8 KB, SQL SERVER 也是 8KB。換句話也就是說,有些數(shù)據(jù)庫的頁面大小是可以調(diào)整的,有些是不可以的,同時他們的磁盤的頁面會直接映射到內(nèi)存中。

4 頁面的大小對數(shù)據(jù)庫的性能有什么影響?

這個問題其實我也是一直在書籍和,google中去找尋,但一直沒有一個答案或者可以讓人信服的答案,這里就嘗試自己分析一下,以MYSQL的頁面16KB為為例,如果一次讀入的數(shù)據(jù)是8KB,那16KB只能使用其中一半,如果后期有在讀入8KB的數(shù)據(jù),可以在使用另外一半的內(nèi)存,但是如果讀入的是4KB的數(shù)據(jù),則可能會浪費 4KB的cache,所以分配的頁面太大會有浪費的情況,那有人說,8KB的比16KB的要小,所以浪費的空間少,但從另一個角度來分析,如果一次我要讀入12KB的數(shù)據(jù)呢,那是不是要分成兩個page?效率上是否比一個頁面能承載的數(shù)據(jù)在處理上要麻煩,并且一個數(shù)據(jù)頁分成兩個,是否還有其他需要進(jìn)行的事情,例如連接 等等?

所以一個數(shù)據(jù)頁的大小,見仁見智,不是非黑即白,需要根據(jù)具體的問題具體分析,如果你的MYSQL使用的是壓縮頁面,16KB 或更大的頁面或許會更好。所以有的時候,數(shù)據(jù)庫的頁面可以被調(diào)整,根據(jù)業(yè)務(wù)或者根據(jù)某種特性來進(jìn)行設(shè)置,會保證更好的性能,而類似 SQL SERVER  ,ORACLE 這樣的數(shù)據(jù)庫是不可以調(diào)整的。

5 內(nèi)存中的數(shù)據(jù)是否有退出機(jī)制?

回答是一定的,任何數(shù)據(jù)庫的內(nèi)存的數(shù)據(jù)都有退出的機(jī)制,否則內(nèi)存難道要和數(shù)據(jù)的大小一致,在目前的硬件技術(shù)上,這是不大可能的,所以內(nèi)存必須有退出的機(jī)制。從另外一個事情上,也反應(yīng)出硬件的變化,其實對數(shù)據(jù)庫的軟件設(shè)計是有聯(lián)動性或者部分決定性的。

6 內(nèi)存中涉及管理內(nèi)存頁的是怎么做的

MYSQL 中的內(nèi)存管理主要使用的是 LRU 算法(變種),Least Recently Used,在MYSQL 的 BUFFER POOL 中是包含 New SUBLIST 和  Old Sublist

MYSQL內(nèi)存機(jī)制分析和監(jiān)控

上面的圖大家都看見了,大致LRU (進(jìn)化)的算法, 新讀入內(nèi)存的都放入到 young 區(qū)域 5/8 buffer pool ,而經(jīng)常被調(diào)用的頁面則會在一個算法后從5/8 放入到 3/8中,具體其實如果讀過 ORACLE 的內(nèi)存管理,其中有一段和MYSQL 是大致相同的,都是隊列的概念+頻繁提取的數(shù)據(jù)提前。

當(dāng)然數(shù)據(jù)頁中的數(shù)據(jù)是變化的,也就是說變化的數(shù)據(jù)頁就是臟頁,而臟頁就要刷入到磁盤中進(jìn)行合并,進(jìn)行永久化,當(dāng)然這個過程可以單獨寫一篇甚至多篇文字,這里就不展開了。

這里提出一個問題,如果數(shù)據(jù)頁變化了,我在去讀這個數(shù)據(jù)頁怎么辦?

這里大概率是你要去讀change buffer ,(insert buffer replacement),而不會等待你的臟頁刷新到磁盤,在讀到內(nèi)存,在進(jìn)行后續(xù)的工作。

那如何查詢這些內(nèi)存的信息,就對系統(tǒng)的性能變得尤為重要了

查看當(dāng)然可以被收集的內(nèi)存 ITEM 信息

SELECT * FROM performance_schema.setup_instruments
      WHERE NAME LIKE '%memory/innodb%'

對某些不進(jìn)行收集的內(nèi)存信息進(jìn)行收集

update performance_schema.setup_instruments set enabled = 'yes' where name like  'memory/innodb/buf_buf_pool'  

同時通過語句可以獲得,內(nèi)存在MYSQL 中的分配信息

MYSQL內(nèi)存機(jī)制分析和監(jiān)控

其實關(guān)于MYSQL的內(nèi)存管理,當(dāng)然我們也可以通過另外的方法去訪問,見下圖,當(dāng)然這應(yīng)該是最基本的應(yīng)該被掌握的。怎么查看 Do you get it ?

MYSQL內(nèi)存機(jī)制分析和監(jiān)控

“MYSQL內(nèi)存機(jī)制分析和監(jiān)控”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


本文名稱:MYSQL內(nèi)存機(jī)制分析和監(jiān)控
本文URL:http://weahome.cn/article/gdjjsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部