Sundry MySQL提供的腳本相比mysqlreport更進一步:除了報表還進一步提供了修改建議。安裝和使用非常簡單:
wget http://www.day32.com/MySQL/tuning-primer.sh
chmod +x tuning-primer.sh
./tuning-primer.sh
和mysqlreport一樣,tuning-primer.sh也支持.my.cnf
[client]
user = USERNAME
password = PASSWORD
socket = /tmp/mysql.sock
樣例輸出:在終端上按照問題重要程度分別用×××/紅色字符標記問題
-- MYSQL PERFORMANCE TUNING PRIMER --
- By: Matthew Montgomery -
MySQL Version 5.0.45 i686
Uptime = 19 days 8 hrs 32 min 54 sec
Avg. qps = 0
Total Questions = 264260
Threads Connected = 1Server has been running for over 48hrs.
It should be safe to follow these recommendationsTo find out more information on how each of these
runtime variables effects performance visit:http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Visit http://www.mysql.com/products/enterprise/advisors.html
for info about MySQL's Enterprise Monitoring and Advisory ServiceSLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10 sec.
You have 0 out of 264274 that take longer than 10 sec. to complete
Your long_query_time may be too high, I typically set this under 5 sec.BINARY UPDATE LOG
The binary update log is NOT enabled.
You will not be able to do point in time recovery
See http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.htmlWORKER THREADS
Current thread_cache_size = 0
Current threads_cached = 0
Current threads_per_sec = 1
Historic threads_per_sec = 0
Your thread_cache_size is fineMAX CONNECTIONS
Current max_connections = 100
Current threads_connected = 1
Historic max_used_connections = 33
The number of used connections is 33% of the configured maximum.
Your max_connections variable seems to be fine.MEMORY USAGE
Max Memory Ever Allocated : 96 M
Configured Max Per-thread Buffers : 268 M
Configured Max Global Buffers : 7 M
Configured Max Memory Limit : 276 M
Physical Memory : 1.97 G
Max memory limit seem to be within acceptable normsKEY BUFFER
Current MyISAM index space = 8 M
Current key_buffer_size = 7 M
Key cache miss rate is 1 : 1817
Key buffer fill ratio = 6.00 %
Your key_buffer_size seems to be too high.
Perhaps you can use these resources elsewhereQUERY CACHE
Query cache is supported but not enabled
Perhaps you should set the query_cache_sizeSORT OPERATIONS
Current sort_buffer_size = 2 M
Current read_rnd_buffer_size = 256 K
Sort buffer seems to be fineJOINS
Current join_buffer_size = 132.00 K
You have had 0 queries where a join could not use an index properly
Your joins seem to be using indexes properlyOPEN FILES LIMIT
Current open_files_limit = 1024 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fineTABLE CACHE
Current table_cache value = 64 tables
You have a total of 125 tables
You have 64 open tables.
Current table_cache hit rate is 9%, while 100% of your table cache is in use
You should probably increase your table_cache
TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 564 temp tables, 6% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Created disk tmp tables ratio seems fineTABLE SCANS
Current read_buffer_size = 128 K
Current table scan ratio = 1 : 1
read_buffer_size seems to be fineTABLE LOCKING
Current Lock Wait ratio = 0 : 264392
Your table locking seems to be fine
更有用是作者總結的處理MySQL性能問題處理的優先級:尤其是頭3條,基本上可以解決大部分瓶頸問題的原因。
# Slow Query Log 慢查詢 尤其是like操作,性能殺手,輕易不要使用,讓全文索引交給Lucene或者利用Tag機制減少like操作;
# Max Connections 併發連接數:一個MySQL deamon缺省最大連接數是100,調到更高只是爲了出現問題是給我們更多的緩衝時間而不是任其一直處於那麼高的狀態,併發連接數類似於等候大廳:當等候人數過多的時候,一味擴大等候廳不是根本解決問題的辦法,提高業務的處理速度,多開幾個窗口才是更好的解決方法;我的經驗就是超過100: 數據就要想辦法(鏡像或者分片)分佈到更多Deamon上;
# Worker Threads: Jeremy Zawondy 曾在部落格上說到:Thread caching 並不是我們最需要關心的問題,但當你解決了所有其他更嚴重的問題之後,它就會是最嚴重的問題。(thread caching really wasn't the worst of our problems. But it became the worst after we had fixed all the bigger ones.)
# Key Buffer
# Query Cache
# Sort Buffer
# Joins
# Temp Tables 臨時表
# Table (Open & Definition) Cache 表緩存;
# Table Locking 表鎖定
# Table Scans (read_buffer)
# Innodb Status
其他一些工具:
1 mytop: 一個top like的show processlist;
2 使用cacti做MySQL的監控:推薦配置模板;
3 把binlog導出成文本和slowquery的格式幾乎是一樣的,調用mysqlslowquery腳本分析,有時候也會有意外收穫;
謝謝 oldplantegg 補充:
mysqlsla(hackmysql.com推出的一款日誌分析工具該網站還維護了,mysqlreport, mysqlidxchk 等比較實用的mysql工具)能夠分析slow query 和binlog等,這樣就不用將binlog導出來了.
from:http://www.chedong.com/blog/archives/001451.html