調整 MySQL 記憶體設定來規劃 Server 記憶體使用
當 MySQL 使用的記憶體超過系統上限時,Linux 基於預設的管理機制,就會對行程進行刪除。當 MySQL 觸發 OOM 的時候,常常 mysqld 會被 kill 以後被 supervisor 重啟。前陣子剛好處理大量連線與 Query 的問題,所以順便紀錄一下。
資料庫其實是一個需要大量記憶體與 I/O 的服務,尤其是關聯資料在 Join Table 時常常需要大量的資源。以 MySQL 來說,資料讀寫存取都需要在記憶體中完成,最常優化與加速的方法就是加大 Buffer Pool 的記憶體使用空間,但是這其實不是唯一可以控制記憶體的方法。因為 MySQL 針對每一條連線都有定義可以使用的記憶體大小,如果要計算目前 MySQL 設定可能會消耗的最大記憶體,可以透過以下的 Query 來計算。
SELECT (@@key_buffer_size + @@innodb_buffer_pool_size + @@innodb_log_buffer_size + @@max_connections * ( @@read_buffer_size + @@read_rnd_buffer_size + @@innodb_additional_mem_pool_size + @@sort_buffer_size + @@join_buffer_size + @@binlog_cache_size + @@thread_stack + @@tmp_table_size ) ) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB
這裡算出來的 Bytes 才會適當連線全滿需要配置的記憶體,透過這個方法來調整 MySQL 的設定來符合伺服器的資源會比較保險。筆記一下作法.......