Mysql
MySQL隨著時間的推移逐漸增加記憶體使用量是否正常?
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 逐漸填充,直到達到限制,因此您看到的增加。在您重新啟動之前它不會縮小。