日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MySQL表數(shù)據(jù)多久刷一次盤?

前言事情是這樣的,在某乎的邀請回答中看到了這個問題:

焦作網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

-

然后當時我沒多想就啪一下寫下來這樣的答案:

這個其實要通過 MySQL 后臺線程來刷的,在 Buffer Pool 中被修改的過的 Page(頁)都會被標記成臟頁,放到一個鏈表(Flush 鏈表)里。

然后 MySQL 通過啟動后臺線程,在滿足條件時將 Flush 鏈表中的臟頁刷入磁盤。

滿足的條件是:臟頁的數(shù)量達到了 Buffer Pool 中頁數(shù)量的 **10%,當然 10% 這個值是可變的,通過配置項 innodb_max_dirty_pages_pct_lwm 來配置的,其默認值為 10%,并且這個值也必須小于另一個配置 innodb_max_dirty_pages_pct 的值(90%**)。

至于啟多少個線程,則是由另一個變量 innodb_page_cleaners 來控制的,默認是 4.一般都不會去改這個。

大概就是這樣。

但是,后面有兄弟在下面說:”我唔知你喺講乜“。

后面我回過頭去看,當時寫的確實有點過于跳躍了,過一段時間再去看有些不是那么連貫,打算重新把這個事情講清楚。

1. 表數(shù)據(jù)

我們這篇「短文」討論的是【MySQL 表數(shù)據(jù)多久刷一次盤】,從這個標題中我們可以分裂成兩個問題:

  • 刷什么到磁盤
  • 什么時候刷到磁盤

我們分開來討論。

2. 刷什么到磁盤

看上去有點廢話,肯定是將數(shù)據(jù)刷入磁盤。所以我們更多需要討論的是【數(shù)據(jù)是以什么樣的形式被刷入磁盤】。

在 InnoDB 中,頁是數(shù)據(jù)被管理的最小的單位。當使用 InnoDB 作為存儲引擎的 MySQL 運行時,表中一行一行的數(shù)據(jù)會被組織在一頁一頁當中,放在 Buffer Pool 中。

這一頁一頁的數(shù)據(jù),就存放在 Buffer Pool 中。當 DML 語句(也就是 CRUD)語句對表數(shù)據(jù)進行了變更之后,數(shù)據(jù)所在的那一頁就會被標記為臟頁。

InnoDB 會用一個叫【Flush 鏈表】的結(jié)構(gòu)來存放這些臟頁,凡是被放進該鏈表的頁都代表需要刷入磁盤,但不是立即刷入。

和 InnoDB 的其他日志例如 Redo Log 一樣,這些日志都是有自己的刷盤策略。例如 Redo Log,其刷盤策略可以用下圖來表示:

參數(shù)為0,Redo Log 會每隔一秒,寫入并且刷入磁盤。

參數(shù)為1,Redo Log 會在每次事務(wù)提交之后刷入磁盤。

參數(shù)為2,每次事務(wù)提交,都會寫到 OS 緩存中去,然后每隔一秒將 OS 緩存中的數(shù)據(jù)刷入磁盤。

而 Flush 鏈表也有自己的策略。

3. 什么時候刷到磁盤

接上節(jié),策略就是:臟頁的數(shù)量達到了 Buffer Pool 中頁數(shù)量的 **10%**,就會觸發(fā)將 Flush 鏈表中的臟頁刷入磁盤。舉個例子,Buffer Pool 中總共有 100 張頁,臟頁如果達到了 10 頁就會啟動后臺線程,觸發(fā)刷盤。

當然,【10%】這個數(shù)值是可配置的,通過 MySQL 配置項 innodb_max_dirty_pages_pct_lwm 可以進行調(diào)整,只是默認值是 10%。但是我們調(diào)整的值不能超過某個最大值,這個最大值由 innodb_max_dirty_pages_pct 來指定,默認值為 90%。

換句話說,默認情況,刷盤閾值是 10%,如果需要自定義,則最大值不能超過 90%。

4. 誰來負責刷盤

上個小節(jié)已經(jīng)說過了,會啟動線程來專門做這個事情,這個沒有什么疑問。我們需要關(guān)注的是會啟動多少個線程來做這個事。

答案是 4 個,我們也可以通過配置項 innodb_page_cleaners 來更改,但一般都不會去改這個值。

關(guān)于這個點就聊到這。


網(wǎng)頁名稱:MySQL表數(shù)據(jù)多久刷一次盤?
路徑分享:http://m.5511xx.com/article/dpjhjdi.html