最佳化MYSQL伺服器
來源:互聯網
上載者:User
mysql|伺服器|最佳化 MySQL伺服器有幾個影響其操作的參數(變數)。如果預設的參數值不合適,可以將其修改為對伺服器運行環境更合適的值。例如,如果您有大量的記憶體,可以告訴服務為磁碟和索引操作使用較大的緩衝區。這將使記憶體持有更多的資訊並減少了必須進行的磁碟訪問的數
量。如果是一般的系統,可以告訴伺服器使用較小的緩衝區,以防止它擾亂系統資源損害其他的進程。
系統變數的當前值可以通過執行mysqladmin variables 命令來檢查。變數可利用- - set - variable var_name = value 選項在命令列設定( -ovar_name = value 是等價的)。如果要想設定幾個變數,可使用多個--set-variable 選項,還可以使用下列文法在一個選項檔案的[mysqld] 組中設定變數:
set -variale=var_name=value
在附錄E的mysql程式的條款下給出了伺服器變數的全部清單。有關效能最佳化比較常用的變數已在以下列表中給出。您還可以在MySQL參考手冊的“從MySQL中獲得最高效能”一章中找到該主題的附加討論。
back_log 引入的客戶機串連請求的數量,這些請求在從當前客戶機中處理時排隊。如果您有一個很忙的網站,可以增加該變數的值。
delayed_queue_size 此變數控制被排隊的INSERT DELAYED 語句中的行數。如果該隊列已滿,則更多的INSERT DELAYED 將堵塞,直到隊列有空間為止,這樣可防止發布那些語句的客戶機繼續進行操作。如果您有許多執行這種INSERT 的客戶機,且發現它們正在堵塞,那麼應增加該變數,使更多的客戶機更快地進行工作( INSERT D E L AYED 在4 . 5節“調度與鎖定問題”中討論)
flush_time 如果系統有問題並且經常鎖死或重新引導,應將該變數設定為非零值,這將導致伺服器按flush_time 秒來重新整理表的快取。用這種方法來寫出對錶的修改將降低效能,但可減少表訛誤或資料丟失的機會。
在Windows 中,可以在命令列上用--flush 選項啟動伺服器,以迫使表的修改在每次更新後被重新整理。
key _ buffer_size 用於存放索引塊緩衝區的大小。如果增加該變數值,將加快建立和修改索引操作的時間。值越大MySQL就越有可能在記憶體中尋找索引值,這將減少索引處理所需的磁碟訪問次數。
在MySQL3.23 以前的版本中,該變數名為key _ buffer。MySQL3.23 及後來的版本同時識別這兩個名字。
max_allowed_packet 客戶機通訊所使用的緩衝區大小的最大值。如果有客戶機要發送大量的BLOB 或TEXT 的值,該伺服器變數值可能需要增大。
客戶機目前使用大小為24MB 的預設緩衝區。如果有使用較小緩衝區的舊客戶機。可能需要使該客戶機的緩衝區大一些。例如, mysql可以按如下調用來指定一個2 4 MB 資訊包的限制值:
mysql--set-varibale max_allowed_packet=24M
max_connections 伺服器允許的客戶機同時串連的最大數量。如果伺服器繁忙,可能需要增加該值。例如,如果您的MySQL伺服器被Web 服務器使用來處理由DBI 或PHP 指令碼產生的查詢,並且還有大量的Web 通訊,如果該變數設定太低的話,則您網站的訪問者會發現請求被拒絕。
table_cache 表的快取的大小。增加該值可以使mysqld 保持更多的表,同時開啟並減少必須進行的檔案開啟和關閉操作的次數。
如果增加了max_connections 或table_cache 值的大小,伺服器將需要大量的檔案描述符。這將引起有關作業系統對檔案描述符總進程數量限定的問題,在這種情況下您需要增加該限制值或逐步解決它。由於增加檔案描述符數量的限制值,過程會發生變化,所以您可能會在一個運行指令碼中使用ulimit 命令時來這樣做,該指令碼可用於啟動伺服器,或用於重新設定您的系統。有些系統可以通過編輯系統描述檔案來簡單地配置和重新引導。對於其他一些系統,則必須編輯一個核心描述檔案並重建該核心。如何繼續進行下去,請參考您系統的文檔。
解決總進程檔案描述符限制的一個方法是:將資料目錄分離成多個資料目錄並運行多個伺服器。這樣,通過運行多個伺服器使可用的描述符數量成倍增長。但另一方面,其他的複雜因素可能會引起問題。由於命名了兩個伺服器,您不能從一個單個的伺服器上訪問不同數
據目錄中的資料庫,並且還需要在不同伺服器之間複製授權表的許可權,以便使用者需要訪問一個以上的伺服器。
有兩個變數是管理員為提高效能時常增加的,它們是record _ buffer 和sort _ buffer。這些緩衝區在串連和分類操作中使用,但其值是屬於每個串連的。也就是說,每個客戶機都獲得屬於自己的緩衝區。如果使這些變數的值很大,效能可能會由於昂貴的系統資源的消耗而遭受實際的損失。如果想要修改這些變數,先執行mysqladmin variables 查看一下它們當前的值,然後增量調整其值。這個操作使您能估計為減少嚴重的效能降低所進行的修改的效果。