字體:  

MySQL 效能調整 - MySQL Basic Tunning

ppstream 發表於: 2012-1-27 21:38 來源: ADJ網路控股集團


要調整MySQL效能,如果是利用phpMyAdmin工具的話,可以從【狀態】按鈕中,大致查看到MySQL的狀態,phpMyAdmin會針對異常狀態的值用紅色標示出來,此時管理員就可以針對這些異常狀態做效能的調整,當然您也可以直接在mysql command中下 #show status; 的指令查看。

最近常常 SHOW STATUS 看效能,而之前最常遭遇到的問題是:

Handler_read_rnd_next :當進行大量排序查詢的時候不理想,或許可以調高 read_buffer_size
Handler_read_rnd :表示每次 query 都必須要直接掃整個 table 而且 index 可能沒有發揮作用,但是我不曉得是不是 Active Record 造成的,因為我 WHERE 和 ORDER BY 選用的欄位都有檢查過了,應該都建了 index
Qcache_lowmem_prunes :我應該要把 query cache 調小,因為每次查出來結果都不同(鮮少重複的查詢),所以不需要調太大。
Created_tmp_disk_tables:在磁碟上建立的臨時 table 太大,應該要調高 tmp_table_size 的數值(記憶體中建立臨時 table ),以改善效能。
Sort_merge_passes:應該要增加 sort_buffer 的值。
Opened_tables:則要增加 table_cache 的值。
Table_locks_waited:雖然我的 Table_locks_immediate 有 12M,而 Table_locks_waited 有 112K ,發生鎖定等待的情況大約是比例上為 1/100 (一百次鎖定中,可以直接鎖定 99 次,有一次要等待)

底下為符合硬碟設備設定的範例:
64 bit system – 假設 64 bit CPU 以及作業系統
8GB+ of memory – 超過 8 GB 記憶體
Dedicated DB Box – 專職的資料庫伺服器
All MyISAM – 使用 MyISAM 儲存引擎
[mysqld]
thread_cache_size = 256
table_cache = 1024
key_buffer = 4000M
sort_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
max_allowed_packet = 1M
tmp_table_size=64M
max_heap_table_size=64M
query_cache_size=128M
myisam_recover = backup
myisam_sort_buffer_size=512M
skip-innodb
資料參考:http://blog.roga.tw/2009/06/mysql-basic-tunning/

最新回復

tttaco at 2012-1-29 23:51:35