資料庫的 MariaDB, MYSQL 設定如何優化? 低配置?
最近DB常常卡住
所以研究看看在這種低配置機器上如何讓SQL運作盡量正常
這邊 128 * 1024 * 1024 等於是 128 MB的意思
SET GLOBAL innodb_buffer_pool_size = 128 * 1024 * 1024;
SET GLOBAL key_buffer_size = 32 * 1024 * 1024;
SET GLOBAL query_cache_size = 8 * 1024 * 1024;
SET GLOBAL query_cache_type = 'ON';
SET GLOBAL innodb_flush_log_at_trx_commit = 0;
SHOW VARIABLES;
innodb_buffer_pool_size: 此參數控制 InnoDB 緩衝池的大小,它用於存儲表和索引數據。
在低內存環境下,可以設置為可用內存的 30-50%。例如,如果你的 NAS 只有 2GB RAM,將 innodb_buffer_pool_size 設置為 256MB 或 512MB
我NAS只有512MB,所以設定成128MB
key_buffer_size: 如果你有使用 MyISAM 引擎表,可以調整此參數。
對於小型 NAS,可以設置為 16M 到 32M
innodb_flush_log_at_trx_commit
此參數控制日誌緩衝刷新到磁盤的頻率。設置為 2 可以減少磁盤 I/O,雖然有一點數據丟失的風險(在意外宕機時可能丟失最近 1 秒內的數據)
https://ithelp.ithome.com.tw/articles/10269694
"設 0 - 每隔1秒才將日誌緩存區中的日誌寫入到os cache並呼叫fsync()刷新到磁盤上的redo log file。 (雖然效率高但資料安全性低,因為1秒的數據有可能因為mysql崩潰而丟失)
設 1 - 每次事務提交時都會將日誌緩存區中的日誌寫入os cache並呼叫fsync()刷新到磁盤上的redo log file。 (資料安全性高,因為只要提交就會更新磁盤資料所以不會有丟失的狀況,不過因為每次提交都刷新磁盤所以效能相對最差)
設 2 - 每次事務提交時把日誌緩存區的日誌寫入os cache,不會同時刷新到磁盤上,而是每秒呼叫fsync()刷到磁盤上的redo log file。
(比設為0安全每秒執行刷新到磁盤,在操作系統崩潰or系統斷電的狀況下才可能發生那一秒的數據丟失)"
query_cache_size: 查詢緩存可以節省資源,但在高負載環境下可能會降低性能。你可以設置一個小值,例如 8M 或完全禁用它(設置為 0)
query_cache_type 我是打開,有暫存快很多
給大家參考囉
以上設定僅供參考
實際上還是要嘗試後才能有好的結論
留言板
歡迎留下建議與分享!希望一起交流!感恩!