當單表超過 2000 萬行、單庫超過 500GB,單機 MySQL 會面臨 IOPS 瓶頸、備份恢復慢、DDL 鎖表久、統計信息失準等問題。本文系統總結 8 大架構優化方向、MySQL 參數調優、硬件選型與大流量應對策略。
order_202401, order_202402...),配合分區表或中間件 (ShardingSphere、MyCat、Vitess) 路由。user_profile_ext),主表只保高頻列,減少行大小、提升 Buffer Pool 命中率。daily_order_stats),避免大表實時聚合。datadir)、Redo Log (innodb_log_group_home_dir)、Binlog、臨時目錄 (tmpdir) 掛載不同物理盤 (NVMe/SSD/HDD),消除 IO 爭用。| 參數 | 建議值/原則 | 作用 |
|---|---|---|
| innodb_buffer_pool_size | 物理內存 60%-80% (專用 DB) | 核心緩存,數據+索引+鎖+自適應哈希 |
| innodb_log_file_size | 1GB-4GB (總 2-4 個文件) | 減少 Checkpoint 衝刷、支撐大事務 |
| innodb_io_capacity / _max | SSD: 2000-5000 / 10000-20000 | 背景刷盤/合併插入緩衝/ Purge IOPS 預算 |
| innodb_flush_log_at_trx_commit | 1 (強一致) / 2 (高性能微秒級丟失) | Redo Log 落盤策略 |
| max_connections | 應用峰值連接數 * 1.5 | 防止 Too many connections |
| query_cache_type/size | OFF / 0 (5.7+ 建議關閉) | 查詢快取在高併發下鎖爭用嚴重 |
innodb_buffer_pool_size ≥ 96GB。COUNT(col) 忽略 NULL,COUNT(*) 不忽略,語義易混淆。NOT NULL 列優化器可直接套用等值/範圍推導,生成更優計劃。limit_rate、Token 桶)。performance_schema 全鏈路可觀測。大數據量優化沒有銀彈,只有「分而治之」:垂直拆表減行寬、水平分表減行數、分庫分散壓力、讀寫分離擴讀力、冗余預聚合減計算、冷熱分離降成本、多盤分離減爭用、緩存前置減穿透。每一步都要有監控驗證,切忌為優化而優化。