Mysql

理解 INNODB 緩衝池統計資訊

  • October 1, 2021

在閱讀了 mysql 文件中的這個頁面之後,我試圖理解我們目前的 InnoDB 使用情況。目前,我們為緩衝池分配了 6GB 的 RAM。我們的數據庫大小大致相同。這是show engine innodb status\G(我們正在執行 v5.5)的輸出

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 6593445888; in additional pool allocated 0
Dictionary memory allocated 1758417
Buffer pool size   393215
Free buffers       853
Database pages     360515
Old database pages 133060
Modified db pages  300
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 7365790, not young 23099457
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1094342, created 185628, written 543182148
0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 360515, unzip_LRU len: 0
I/O sum[2571]:cur[0], unzip sum[0]:cur[0]

我想知道我們對緩衝區高速記憶體的利用情況。在最初瀏覽輸出後,我們似乎確實在使用它,基於Pages made youngnot young有數字和Buffer pool hit rate is 1000 / 10000(我在網路上的其他地方看到這意味著它被大量使用。真的嗎?)

讓我陷入循環的是為什麼young-making rateandnot都在 0/1000 並且young/sandnon-young/s訪問都在 0。這些都表明它根本沒有被使用,對吧?

任何人都可以幫助理解這一點嗎?

 Buffer pool hit rate is 1000 / 1000

在您所處的情況下,這是唯一真正有意義的價值……而這種情況是您很幸運擁有一個具有完美 100% 命中率的緩衝池。不要過度分析其餘部分,因為您無需更改任何內容,除非伺服器作業系統記憶體不足,導致交換。

在緩衝池壓力為零的情況下,年輕/非年輕值並不有趣。InnoDB 正在使用它,沒有它它什麼也做不了。如果池太小,頁面會被驅逐,新頁面會被讀入,其他統計數據會幫助您理解……但這是您似乎沒有的問題。

如果出於任何原因需要,池中的空閒“未使用”空間永遠不會被 InnoDB 忽略或閒置,因此它是免費的這一事實僅意味著您有一些喘息的空間來擴展您的工作規模數據集增長。

這就是全部,除非,當然,除非您最近重新啟動了伺服器,在這種情況下,它是不完整的。在統計數據講述整個故事之前,伺服器需要執行完整的“正常”使用期(包括完整備份) …無論是一個小時、一天、一周、一個月還是一年,都取決於您的應用程序。

引用自:https://dba.stackexchange.com/questions/56494