2008年1月21日 星期一

虛擬主機系列 - MySQL 的最佳化設定

一. 適用系統 : Fedora Core 3, 4, 5, 6

二. 說明 :

當 主機的服務量越來越多後, 就會造成資料庫存取變慢的情況發生, 特別是一些幾千種商品的購物網站, 若是沒有將一些常用的資料利用 MySQL 本身的快取能力, 存放到記憶體內的話, 你會發現網站開啟的速度真是慢到受不了, 特別再加上一台主機上面有個幾家重量級的大戶的話, 那你的網站服務速度一定會讓人家無法接受的, 所以為了能夠將網站服務的速度提升, 還有減少磁碟 I/O 的情況發生, 所以就上網找了一些設定的資料, 將我們家主機的設定修改一下, 改完後發現效能真是提升不少, 網頁開啟的速度快上很多, 尤其是一頁上有很多資料要同時顯示的網頁最明顯.

三. 修改設定檔案 : /etc/my.cnf

四. 主要修改內容如下 :

(1) MySQL 設定檔案資料, 請不要使用 RPM 安裝後預設的, 請到 /usr/share/doc/mysql-server-x.x.x 的目錄中選擇你要的設定檔案

my-huge.cnf

my-large.cnf

my-medium.cnf

my-small.cnf

請 選定以上其中一個將該檔案複製到 /etc/my.cnf , 將原來的檔案蓋過去, 一般來說重新啟動 MySQL 後可以解決很多記憶體不足或者是效能不足的問題, 在 MySQL 4.x 版以後的 cache 功能很強大, 會將很多 Query 過的資料放在記憶體中, 這樣下一個使用者若是下相同條件或者是查詢相同資料時, 你會發現真是太快了, 特別是在一些產品展示的網站或者討論區的網站上來說, 是相當有用的.

(2)採用了以上的預設設定後若效能還是不夠, 或者因為客戶越來越多後需要更大的效能請修改以下的一些設定

set-variable = key_buffer=384M

#請加大到 384 M 或者更大

set-variable = max_allowed_packet=2M
set-variable = table_cache=2048

# table_cache 的部份主要是要將開啟的 Table cache 到記憶體中, 若發現已經開啟的數量大於這個數的話, 請加大

set-variable = join_buffer_size=128M
set-variable = sort_buffer=8M
set-variable = net_buffer_length=8K
set-variable = myisam_sort_buffer_size=128M

# mysiam_sort_buffer_size 若是採用 3.x 版的 MySQL 請將這個參數加大, 若是採用 4.x 的話不需要

set-variable = thread_concurrency=4

# 請將 thread_concurrency 設定為 CPU 數的兩倍, 這個參數在多 CPU 的系統上面很有用


#log-bin 請將這個東東 mark掉, 但若是你有用到 Cluster 的話請打開

server-id = 1

set-variable = max_connections=2000

# 這個參數最重要, 因為當你的網站連線數越來越多後, 就會發生Too many conneciton .... 的情況, 所以你就需要將 MySQL能夠同一時間連線的數量加大,這樣的話就可以讓 MySQL 服務更多人.

說明 :

以上的設定是在 4Gb 的記憶體下用的, 若是你主機的記憶體數量很小的話請不要用這些設定, 用了話保證你的主機一定負荷不了的.

【下列文章您可能也有興趣】

沒有留言: