萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 服務器調優三部曲:硬體、參數、查詢優化優先序

調優優先序(效能提升幅度遞增)

  1. 替換問題硬體:CPU/記憶體/磁碟升級,效果立竿見影但有上限。
  2. 調優 mysqld 參數:合理分配記憶體、配合負載特性,減少磁碟 IO、後台任務干擾。
  3. 優化查詢與索引:效果最大、成本最低,屬於根治。

注意:硬體再強,若參數錯誤或查詢爛,同樣會倒;參數調好,查詢未優化,高負載下仍會失效。

核心參數配置範本 (my.cnf)

[mysqld]
# 基礎
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

# 連線
max_connections = 1000
max_connect_errors = 100000
wait_timeout = 300
interactive_timeout = 300

# InnoDB 核心
innodb_buffer_pool_size = 4G        # 實體記憶體 60-80%
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1  # ACID
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_thread_concurrency = 0       # 0=不限,高並發可設 16-64

# 查詢快取 (5.7+ 已移除,改用 ProxySQL/Redis)
# query_cache_type = 0
# query_cache_size = 0

# 慢查詢日誌
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1

# 二進制日誌
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1

# 其他
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M
read_rnd_buffer_size = 8M
bulk_insert_buffer_size = 64M

啟用慢查詢日誌與分析

[mysqld]
log-slow-queries = /var/log/mysql/slow.log
long_query_time = 5
log-queries-not-using-indexes

分析工具:mysqldumpslow -s t /var/log/mysql/slow.log(按時間排序)、pt-query-digest (Percona Toolkit) 深度分析。

查詢優化關鍵動作

  • EXPLAIN 分析執行計畫,確認 type、key、rows、Extra。
  • 建立覆蓋索引、複合索引遵循「最左前綴」原則。
  • 避免 SELECT *、ORDER BY RAND()、LIKE '%kw%'、函數包裹索引欄位。
  • 大表分頁改用 WHERE id > last_id LIMIT n。
  • 定期 ANALYZE TABLE、OPTIMIZE TABLE。

監控指標儀表板

指標健康閾值異常處理
Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests< 1%擴大 buffer pool 或檢查熱點資料
Threads_connected / max_connections< 80%檢查連線洩漏、啟用連線池
Innodb_row_lock_waits低分析鎖競爭 SQL、優化索引
Created_tmp_disk_tables / Created_tmp_tables< 25%調大 tmp_table_size、優化 GROUP BY/ORDER BY
Seconds_Behind_Master0檢查從庫 SQL 執行緒、網路、大事務
copyright © 萬盛學電腦網 all rights reserved