MySQL 效能優化是系統工程,涵蓋硬體選型、OS 核心參數、MySQL 實例配置、Schema 設計四大維度。本文匯總生產環境驗證的最佳實踐,助你構建高效能、高可用的 MySQL 服務。
noatime,nodiratime,nobarrier(nobarrier 僅 XFS 支援)# 減少 Swap 傾向 vm.swappiness = 5-10 # RHEL 7+ 慎設 0,否則觸發 OOM Killer # 平滑髒頁刷新,避免寫入風暴 vm.dirty_background_ratio = 5-10 vm.dirty_ratio = 2×dirty_background_ratio # TCP 連接復用,減少 TIME_WAIT net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 # 讀取優化(視負載測試決定) # read_ahead_kb, nr_requests
| 分支 | 特點 | 推薦度 |
|---|---|---|
| Oracle MySQL | 官方標準、生態最全 | ⭐⭐⭐⭐ |
| Percona Server | 性能+20%、Thread Pool、Extra Port、QUERY_RESPONSE_TIME、完全兼容 | ⭐⭐⭐⭐⭐ 首選 |
| MariaDB | Server層大幅重構、GTID不兼容、目標替代官方版 | ⭐⭐⭐ |
[mysqld] # 基礎 default-storage-engine = InnoDB innodb_buffer_pool_size = 物理記憶體 50%-70% # 單實例純InnoDB innodb_file_per_table = 1 innodb_data_file_path = ibdata1:1G:autoextend innodb_log_file_size = 256M innodb_log_files_in_group = 2 # 持久化權衡 # 強一致:innodb_flush_log_at_trx_commit=1, sync_binlog=1 # 平衡: innodb_flush_log_at_trx_commit=2, sync_binlog=10 # 高性能:innodb_flush_log_at_trx_commit=0, sync_binlog=0 # 慢查詢 long_query_time = 0.05 # 50ms,5.5+ 支援毫秒級 # 連接相關 max_connections = 2000 max_connect_errors = 100000 open_files_limit = 20000 innodb_open_files = 20000 table_open_cache = 20000 table_definition_cache = 20000 # 會話級緩衝(慎設大值,每連接分配!) tmp_table_size = 32M max_heap_table_size = 32M sort_buffer_size = 2M join_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 2M # 廢棄 MyISAM 相關 key_buffer_size = 32M query_cache_type = 0 query_cache_size = 0
SELECT * 讀取觸發隨機 I/OSELECT id FROM t WHERE ... ORDER BY id LIMIT 10000,20 → 回表查詳情pt-duplicate-key-checker 清理重複索引,pt-index-usage 清理低頻索引pt-query-digest 分析 → Anemometer 管理平台pt-kill 幹掉長事務;Percona 專屬 innodb_kill_idle_transactionpt-online-schema-changept-table-checksum + pt-table-sync