# 文件句柄 ulimit -n 65535 # 進程數 ulimit -u 65535 # 禁用 NUMA(跨節點內存訪問延遲) numactl --interleave=all mysqld_safe ...
[mysqld_safe] malloc-lib = /usr/local/lib/libtcmalloc_minimal.so # 或 jemalloc malloc-lib = /usr/lib/libjemalloc.so
顯著降低高並發下內存碎片與鎖競爭。
# XFS /dev/nvme0n1 /data xfs rw,noatime,nodiratime,nobarrier 0 0 # Ext4 /dev/sda1 /data ext4 rw,noatime,nodiratime,nobarrier,data=ordered 0 0
echo deadline > /sys/block/nvme0n1/queue/scheduler
SSD 推薦 deadline 或 none(NVMe 通常無需調度)。
InnoDB Buffer Pool 已緩存數據頁,Query Cache 反而增加寫入開銷(失效掃描)。MySQL 5.6+ 默認關閉,5.7 移除。
-- 每連接內存 = read_buffer_size + read_rnd_buffer_size + join_buffer_size + sort_buffer_size + binlog_cache_size + thread_stack + ... -- 建議值(按需調整,單位字節) read_buffer_size = 2M sort_buffer_size = 4M join_buffer_size = 4M
innodb_buffer_pool_instances = 8(>1GB 時)innodb_buffer_pool_dump_at_shutdown=ON| 值 | 含義 | 安全性 | 性能 |
|---|---|---|---|
| 1 | 每提交 fsync | 最高(無數據丟失) | 基準 |
| 2 | 提交寫 OS 緩存,每秒 fsync | 崩潰丟 1 秒 | +30~50% |
| 0 | 每秒寫+fsync | 崩潰丟 1 秒+ | 最高 |
建議:核心金融=1,一般業務=2,緩存/日誌=0。
sync_binlog = 1 # 配合 Group Commit(5.6+)最佳 # 无 Group Commit 時可設 0 獲取性能
innodb_flush_method = O_DIRECT # 繞過 OS 緩存,減少雙重緩存
Innodb_os_log_written 速率)# SAS 15K RPM innodb_io_capacity = 800 # NVMe SSD innodb_io_capacity = 2000 innodb_io_capacity_max = 4000 # 5.6+ 關聯參數 innodb_lru_scan_depth = innodb_io_capacity / innodb_buffer_pool_instances
innodb_file_per_table = ON
TRUNCATE TABLE 瞬間回收空間# 有 Thread Pool innodb_thread_concurrency = 0 # 無 Thread Pool # 5.5: 16~32 # 5.6/5.7: 36~64 # 8.0: 0 (自適應)
-- 默認 REPEATABLE-READ -- 建議讀已提交 + Row 格式 Binlog SET GLOBAL transaction_isolation = 'READ-COMMITTED'; SET GLOBAL binlog_format = 'ROW';
┌─────────────┐
│ SQL/索引 │ ← 80% 收益來源
├─────────────┤
│ 架構/分庫 │
├─────────────┤
│ 核心參數 │
├─────────────┤
│ 硬件/OS │ ← 基石,不可忽視
└─────────────┘