| 參數 | 建議值 (1GB 記憶體) | 說明 |
|---|---|---|
| key_buffer_size | 128M | MyISAM 索引緩衝,比例 Key_reads/Key_read_requests < 1:100 為佳 |
| query_cache_size | 32M | 查詢快取,觀察 Qcache_lowmem_prunes、Qcache_hits 調整 |
| table_cache | 256 | 表快取,Open_tables=table_cache 且 Opened_tables 持續增長時調大 |
| sort_buffer_size | 1M | 排序緩衝 |
| read_buffer_size | 1M | 順序讀取緩衝 |
| join_buffer_size | 512K | JOIN 緩衝 |
| max_connections | 120 | 最大連線數 |
| thread_cache | 32 | 執行緒快取,減少建立/銷毀開銷 |
| thread_concurrency | CPU核心數 x 2 | 並發提示 |
| wait_timeout / interactive_timeout | 120 | 閒置斷線時間,防止連線洩漏 |
| back_log | 100 | 連線等待隊列 |
| skip-innodb / skip-bdb | 啟用 | 不需 InnoDB/BDB 時關閉省資源 |
| skip-name-resolve | 啟用 | 跳過 DNS 反解,加快連線 |
| log_slow_queries | /path/slow_query.log | 慢查詢日志,long_query_time=10 |
| query_cache_type | 1 | 啟用查詢快取 |
Key_read_requests、Key_reads。比例 Key_reads / Key_read_requests 應 ≤ 1:100,理想 1:1000。Qcache_lowmem_prunes 大 → 快取不足,需調大。Qcache_hits 大 → 重複查詢多,快取有效。Qcache_free_blocks 大 → 碎片多,可考慮 FLUSH QUERY CACHE。Open_tables、Opened_tables。若 Open_tables = table_cache 且 Opened_tables 快速增長 → 調大。ulimit -n。若不需時間點恢復或主從複制,註解 log-bin 可減少 I/O。但失去災難恢復能力,需自行備份。
log_slow_queries、long_query_time=10、log-queries-not-using-indexes,定期分析優化。
while (1) {
mysql_query("DELETE FROM logs WHERE log_date <= '2009-11-01' LIMIT 1000");
if (mysql_affected_rows() == 0) break;
usleep(50000);
}
TINYINT、SMALLINT、MEDIUMINT、DATE 替代 INT、DATETIME。ALTER TABLE 鎖表數小時。COUNT(*) 極快、全文索引。無 VARCHAR/TEXT/BLOB 的表為固定長度,MySQL 可直接計算行偏移,讀取更快。可透過垂直分割實現「核心表固定長、擴展表變長」。
key_buffer=384M,Key_reads/Key_read_requests = 1:10000。key_buffer=16M,比例 1:11,磁碟 I/O 極高。Open_tables=103,浪費記憶體。Opened_tables=22423 (6小時),頻繁開表關表。[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
net_buffer_length = 16K
myisam_sort_buffer_size = 1M
max_connections = 120
wait_timeout = 120
back_log = 100
read_buffer_size = 1M
thread_cache = 32
skip-innodb
skip-bdb
skip-name-resolve
join_buffer_size = 512K
query_cache_size = 32M
interactive_timeout = 120
long_query_time = 10
log_slow_queries = /usr/local/mysql4/logs/slow_query.log
query_cache_type = 1
thread_concurrency = 4
server-id = 1
# log-bin # 視需求啟用
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
根據實際硬體 (CPU、記憶體、磁碟)、業務讀寫比例、資料量持續監控調整,方能發揮 MySQL 最大效能。