Mysql

MySQL隨著時間的推移逐漸增加記憶體使用量是否正常?

  • October 1, 2021

MySQL隨著時間的推移增加記憶體使用量是否正常?請參閱下圖我的伺服器在過去兩週內的記憶體使用情況。在“service mysql restart”之後,它下降到 40%。該數據庫由 node.js 應用程序使用。

伺服器有 4GB 的 RAM,mysqld.cnf 有以下添加:

innodb_ft_min_token_size = 1   
ft_min_word_len = 1  
innodb_buffer_pool_size = 3G  
innodb_buffer_pool_instances = 5  
innodb_read_io_threads = 8  
innodb_write_io_threads = 8  
innodb_log_file_size = 128M  
innodb_flush_method = O_DIRECT  
max_connections = 300  
long_query_time = 1  
innodb_ft_enable_stopword = 0  

謝謝!

我無法解決 MySQL 的細節問題,但總的來說,是的,數據庫引擎的記憶體使用量會隨著時間的推移而增加。在處理查詢時,如果數據不在記憶體中,引擎會將數據從磁碟載入到記憶體中。然後,只要沒有其他迫切需要使用該記憶體,數據將保留在那裡,以防再次查詢。

因此,當數據庫引擎啟動時,它會使用適量的記憶體。(有些人會分配一個“最小記憶體”,只是為了在需要時準備好它。)然後,隨著它的執行,記憶體使用量會逐漸增加,直到達到:

  • 在 DBMS 中配置為“最大記憶體”的數量,或
  • 作業系統允許它佔用的最大數量

只有這樣,它才會開始從記憶體中彈出數據,以便為來自磁碟的更多數據騰出空間。

具體細節因 DBMS 而異,我在這裡使用了一些受 SQL Server 術語啟發的術語。但是一般概念應該適用於大多數引擎。

我懷疑您會通過更好的 MySQL 詳細資訊或對記憶體使用、記憶體和池的更好解釋得到其他答案。但我希望這個總結仍然有用。

innodb_buffer_pool_size = 3G危險地高。降到2G。交換對性能來說很糟糕。

請注意,您從 1.6GB (40%) 開始使用。再加上 3G,你會得到 4.6G,這會將 RAM 溢出到交換區。

回到你的問題。buffer_pool 逐漸填充,直到達到限制,因此您看到的增加。在您重新啟動之前它不會縮小。

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