步骤1:明确ERP数据库类型与版本(例如 MySQL 8.0 / MariaDB / PostgreSQL 13 / SQL Server)。
步骤2:定义性能目标:QPS、并发连接数、最大延迟、RPO/RTO(备份恢复目标)。
步骤3:在香港托管时确认网络需求(内网带宽、跨境访问延迟),并选择离业务最近的可用区以降低延迟。
1) 选择裸金属或高性能云实例:优先考虑支持本地NVMe或高IOPS SSD的实例。
2) CPU与内存估算:内存用于缓冲池(例如 InnoDB buffer pool >= 数据库活跃数据集的70%),CPU核数与并发连接相关。
3) 存储配置:将数据库数据目录放在独立的高速卷(NVMe/SSD),日志(redo/pg_wal)放在低延迟卷。建议示例:/dev/nvme0n1 数据,/dev/nvme1n1 日志。
1) 关闭swap或设置低使用率:sudo sysctl -w vm.swappiness=1 并写入 /etc/sysctl.conf。
2) 增加文件句柄:sudo sysctl -w fs.file-max=200000 并在 /etc/security/limits.conf 添加 mysql soft/hard nofile 200000。
3) TCP参数:sudo sysctl -w net.core.somaxconn=4096; sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096; 持久化到 /etc/sysctl.conf。
1) 选择文件系统:推荐 XFS 或 EXT4(XFS 对大并发写更友好)。格式化示例:sudo mkfs.xfs -f /dev/nvme0n1。
2) 挂载选项:在 /etc/fstab 使用 noatime,nodiratime,discard(SSD)示例:UUID=xxx /var/lib/mysql xfs defaults,noatime,nodiratime,discard 0 2。
3) I/O 调度:sudo echo noop > /sys/block/nvme0n1/queue/scheduler(对于 NVMe,通常使用 none 或 noop)。
编辑 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf,示例关键项:
innodb_buffer_pool_size=70G(按实际内存调整)
innodb_log_file_size=4G(根据事务量调整)
innodb_flush_method=O_DIRECT
innodb_flush_neighbors=0
innodb_io_capacity=2000
max_connections=1000(根据连接池配置)
thread_cache_size=100
query_cache_type=0(MySQL8禁用)
完成后重启:sudo systemctl restart mysqld
编辑 postgresql.conf:
shared_buffers=25GB(约总内存的25%)
effective_cache_size=75GB(估算可用缓存)
work_mem=64MB(根据并发调整)
maintenance_work_mem=2GB
wal_level=replica; synchronous_commit=off(视可接受风险)
wal_buffers=16MB; checkpoint_completion_target=0.9
重载配置:sudo systemctl reload postgresql
1) 开启慢查询并定位:MySQL 设置 long_query_time=0.5 并开启 slow_query_log,收集一周数据。
2) 使用 EXPLAIN 分析慢 SQL,关注全表扫描、临时表、文件排序。
3) 建立覆盖索引和复合索引:按 WHERE 和 ORDER BY 列顺序建立索引。示例:ALTER TABLE sales ADD INDEX idx_store_date (store_id, sale_date);
4) 避免 SELECT *,分页使用索引或 keyset pagination,必要时考虑分区表(按日期/租户分区)。
1) 在应用层使用连接池(Java -> HikariCP,.NET -> built-in pool),设置 maxPoolSize 与数据库 max_connections 对齐。
2) 对于高读负载,部署只读副本(MySQL:主从复制 或 Group Replication,Postgres:streaming replica),并使用 ProxySQL / PgBouncer 做读写分离与负载均衡。
3) 配置健康检查与自动故障转移(使用 Orchestrator / repmgr)。
1) 备份策略:逻辑备份(mysqldump)+ 增量/二进制日志(binlog)配合全备周期(xtrabackup 或 pg_basebackup)。
2) 恢复演练:每月演练一次全量恢复并记录时间。
3) 监控:部署 Prometheus + Grafana,采集 InnoDB metrics、pg_stat、OS 级指标;配置告警(磁盘使用、IOPS、长时间锁、慢查询)。推荐使用 Percona PMM 或 pmm-client 采集。
答:把数据库和应用尽量放在同一可用区;优先使用本地高速实例和 NVMe 存储;通过内网链路部署应用与DB;开启 TCP 优化(somaxconn、tcp_max_syn_backlog)、使用连接池减少频繁建立连接;对跨境访问要使用近源缓存或专线。
答:常见陷阱包括:日志与数据放在同一慢盘、没有调优 innodb_buffer_pool_size、未开启慢查询日志、频繁小事务导致 WAL 压力、没有连接池导致连接风暴、未做索引审计。解决方法见上述步骤:分盘、调整参数、建索引、使用连接池与监控。
答:先做基线测试(使用 Sysbench/pgbench/自有负载脚本记录 QPS、平均/95/99 延迟、IOPS、CPU、磁盘队列长度),逐项变更并做 A/B 测试;每次修改记录配置与结果,确保回滚方案;最终在生产流量窗口做平滑切换与监控验证。