日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql innodb flus_MySQL参数解析innodb_flush_neighbors

發布時間:2024/9/19 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql innodb flus_MySQL参数解析innodb_flush_neighbors 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

取值范圍:0,1,2

默認值:5.7版本為1, 8.0版本為0

含義:

設置為0時,表示刷臟頁時不刷其附近的臟頁。

設置為1時,表示刷臟頁時連帶其附近毗連的臟頁一起刷掉。

設置為2時,表示刷臟頁時連帶其附近區域的臟頁一起刷掉。1與2的區別是2刷的區域更大一些。

如果MySQL服務器磁盤是傳統的HDD存儲設備,打開該參數,能夠減少I/O磁盤尋道的開銷,提高性能,而對于SSD設備,尋道時間的性能影響很小,關閉該參數,反而能夠分散寫操作,提高數據庫性能。由于SSD設備的普及,MySQL 8.0 將該參數的默認值由1調整為0。

innodb_flush_neighbors參數源碼分析:

源碼版本:5.7.19

在源碼中,innodb_flush_neighbors 參數對應的變量為srv_flush_neighbors,這是一個全局變量,默認值為1,如下:

ulong srv_flush_neighbors = 1;

整個代碼中,用到變量 srv_flush_neighbors 的地方只有一個,那就是函數 buf_flush_try_neighbors(),該函數位于源碼文件:storage/innobase/buf/buf0flu.cc

buf_flush_try_neighbors() 函數主要邏輯,如下:

static ulint buf_flush_try_neighbors(

const page_id_t&??page_id,

buf_flush_t???????flush_type,

ulint?????????????n_flushed,

ulint?????????????n_to_flush)

{

if (UT_LIST_GET_LEN(buf_pool->LRU) < BUF_LRU_OLD_MIN_LEN

|| srv_flush_neighbors == 0) {

// [low, high] 區間不包含鄰近的頁面

low = page_id.page_no();

high = page_id.page_no() + 1;

}else{

// [low, high] 區間包含鄰近的頁面

low = (page_id.page_no() / buf_flush_area) * buf_flush_area;

high = (page_id.page_no() / buf_flush_area + 1) * buf_flush_area;

if (srv_flush_neighbors == 1) {

...

// 根據 [low, high] 區間內的頁是否可以刷盤,來進一步縮小 [low, high] 區間

}

}

...

// 根據 [low, high] 區間進行臟頁刷盤

}

buf_flush_try_neighbors() 函數根據 [low, high] 區間來刷臟頁。

當 srv_flush_neighbors 為 0時, [low, high] 只包含一個頁面。

當 srv_flush_neighbors 為 1時, [low, high] 包含鄰近的頁面,頁面數小于等于變量值buf_flush_area。

當 srv_flush_neighbors 為 2時, [low, high] 包含鄰近的頁面,頁面數等于變量值buf_flush_area。

總結

以上是生活随笔為你收集整理的mysql innodb flus_MySQL参数解析innodb_flush_neighbors的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。