安裝 MySQL 後的優化

以下是安裝 MySQL 後可以嘗試的優化項目,建議逐樣項目修改,以檢視每個項目的優化成效,而大部份的設定可以在運行中 MySQL 設定,不用重新啟動 MySQL。

innodb_buffer_pool_size: 這個設定是 innodb 儲存引擎資料庫,所使用的資料及索引快取,根據記憶體的大小䀆量設定大一點,可以減低讀取資料時從硬碟讀取的次數。如果是獨立的 MySQL 伺服器,可以這樣設定:

系統 8GB 記憶體: 5GB – 6GB
系統 32GB 記憶體: 20GB – 25GB
系統 128GB 記憶體: 100GB – 120GB

innodb_log_file_size: 這是 redo logs 的體積,redo logs 可以更快速地寫入,預設值是 2GB,這個設定可以從 2GB 開始逐步增加,以找到最適合的設定。MySQL 5.5 最大可以設定成 4GB, 而 MySQL 5.6 開始則沒有這個限制。

max_connections: 如果 MySQL 伺服器經常出現 “Too many connections” 錯誤,那便表示 “max_connections” 設定太低,預設值是 151, 可以從 500 開始設定,如果還遇到 “Too many connections” 問題,才逐步增加測試。


innodb_file_per_table: 這個不是效能上的優化,而是使 InnoDB 資料表管理更方便。當設定成 off 時,所有 InnoDB 資料表的資料及索引會儲存在一個 .ibd 檔案,如果設定成 on, 每個資料表會有一個獨立的 .ibd 檔。

MySQL 5.6 開始預設是 on, 之前的版本預設是 off.

innodb_flush_method: 設定資料及快取如果寫入硬碟,當系統有 RAID 卡及支援電池保護 write-back 快取,建議設定成 O_DIRECT.

innodb_log_buffer_size: 這是 transactions 的緩存大小,預設值是 1MB, 如果 transactions 的欄位是 blob 或 text,援存很快會用盡,可以逐步增加。

log_bin: 當設定成 replication master 時,log_bin 必須開啟,對於單獨的 MySQL 伺服器,也可以用作恢復資料。但由於會增加系統的硬碟 I/O 動作,如果沒有以上兩個需要,可以關閉。

skip_name_resolve: 當客戶端連接到 MySQL 伺服器, MySQL 會解析 hostname, 當 DNS 的解析緩慢時,建立連接也會一同變得緩慢,這樣可以關閉,但缺點是設定達端使用者登入時,只可以用 IP, 而不可以用 hostname.


Leave a Reply