一般來說Synology的MariaDB是不太需要調整參數的,因為系統會自動已最佳的方式運作,但是特殊情況例外,比如說重度的DB使用,就需要自己優化一下。參考不少文章,提高DB效能建議調整以下參數。
首先必須要用終端機的方式進去系統內,也就是SSH,可以用Putty,進入後用sudo 創建以下檔案:
sudo vi /var/packages/MariaDB10/etc/my.cnf
設定Thread數量(預設值10)
thread concurrency
thread_concurrency=CPU核心數
調高LogFile,愈大效率越高
innodb log file size
innodb_log_file_size=512MB
調高Buffer空間,太高沒有意義,但經常做更新或者使用了很多blob數據,應該增大這個值。
innodb log buffer size
innodb_log_buffer_size=16MB
增加緩存處理,預設為1,設2可避免爭用(至少1GB)。(會自動根據innodb_buffer_pool_size大小調整[>1GB=8instances])
innodb buffer pool instances
innodb_buffer_pool_instances=2
innodb_buffer_pool_chunk_size
innodb buffer pool chunk size
MAX(innodb_buffer_pool_chunk_size) = innodb_buffer_pool_size / innodb_buffer_pool_instances
增加查詢速度,一般來說約為總記憶體的3/4~4/5
innodb buffer pool size
innodb_buffer_pool_size=16MB
增加一次寫入上限(1073741824是最大值)
max allowed packet
max_allowed_packet=1073741824
設定實例1
假設系統內存 = 128 GB, buffer pool 大小預計100GB(128GB*80%)
innodb_buffer_pool_instances = 8 #默認值,或者邏輯CPU數量
innodb_buffer_pool_chunk_size = 128MB #默認值
innodb_buffer_pool_size = 100 GB # N*8*128MG = N GB ,N 剛好為正整數。設 N=100使得 buffer pool 為總內存的 3/4 至 4/5。
設定實例2
假設要用記憶體為1GB,2核心
[mysqld]
thread_concurrency=2
innodb_log_file_size=512MB
innodb_log_buffer_size=32MB
innodb_buffer_pool_instances=2
innodb_buffer_pool_chunk_size=512MB
innodb_buffer_pool_size=1024MB
max_allowed_packet=1073741824
設定實例3
假設要用記憶體為2GB,4核心
[mysqld]
thread_concurrency=4
innodb_log_file_size=512MB
innodb_log_buffer_size=64MB
innodb_buffer_pool_instances=4
innodb_buffer_pool_chunk_size=512MB
innodb_buffer_pool_size=2048MB
max_allowed_packet=1073741824
重啟DB(筆者執行的結果是沒用啦)
sudo /usr/syno/bin/synopkg restart MariaDB
如果覺得沒用其實去套件中心停用在啟用,一樣是可以重啟的。