更新时间:2026-07-03 GMT+08:00
分享

配置建议

在数据库系统运行过程中,资源过载是导致系统性能下降和业务中断的重要因素。为了有效应对和预防资源过载问题,本章节提供了详细的配置建议,涵盖了CPU飙升、内存高负载和连接数满三种常见过载场景。这些配置建议分为过载前、过载中和过载后三个阶段,旨在帮助用户在不同阶段采取相应的措施,确保系统的稳定性和业务的连续性。

  • 过载前:预防与优化

    在过载发生之前,通过合理的配置和优化措施,可以有效预防资源过载的发生。

  • 过载中:应急处理

    当资源过载已经发生时,需要采取紧急措施快速恢复系统性能。

  • 过载后:持续优化

    在过载问题解决后,需要进行持续优化,防止问题再次发生。

通过下表中的配置建议,您可以在不同阶段采取相应的措施,有效应对和预防资源过载问题,确保数据库系统的稳定运行。

表1 过载场景配置建议

过载类型

阶段

过载前

过载中

过载后

CPU飙升

  • 建议新上业务时,提前对关键SQL通过EXPLAIN、SQL诊断等工具进行执行计划分析,根据优化建议添加索引,避免全表扫描。
  • 如果实例规格较小,可以适当地扩大实例规格
  • 开启读写分离:将读请求分流到只读节点,减轻主库压力。
  1. 获取明显导致CPU冲高的SQL,并对其进行SQL限流
  2. 若难以找到明显导致CPU冲高的SQL,则可以选择以下方式快速恢复:
    1. 主备倒换:当主节点的CPU打满,但是只读节点CPU不高时,可以主备倒换快速恢复业务。
    2. 重启只读节点:当某个只读CPU打满时,可以重启该只读节点。
    3. 重启实例:请谨慎使用(重启会导致Buffer Pool中的热数据被清空)。重启实例为最后手段,当所有节点的CPU都打满时,可以重启实例快速恢复业务。

SQL优化:使用EXPLAIN分析执行计划,添加合适的索引避免全表扫描。

内存高负载

获取明显导致内存冲高的SQL,并对其进行SQL限流

优化异常SQL,避免其大量消耗内存,例如:

  1. 只查询必要字段,而不使用select *。
  2. 加上limit使用分页查询,而不是一次性查询全量数据。
  3. 尽可能利用索引避免排序,例如为排序字段建立联合索引
  4. 使用join时,被驱动表的连接列必须有索引,通常选择小表作为驱动表(可通过 STRAIGHT_JOIN 强制指定)
  5. 使用IN查询时,值列表控制在200 个以内,并确保 IN 列有索引。
  6. 针对大的Insert语句,建议分批插入,values后的值个数通过不超过100。
  7. 针对大的Update语句,建议分配更新,SQL后面加上limit N,N值通常不超过100。
  8. 避免一次查询过多含BLOB、TEXT 字段的数据行,可以通过分页查询LIMIT,减少查询数据量。

连接数满

1. 业务侧合理配置连接池,业务侧无连接池容易导致连接数满。

2. 结合业务实际,合理设置max_connections、max_user_connections、wait_timeout/interactive_timeout等参数值。

3. 定期kill掉空闲会话、长会话等。

  • 临时调大max_connections的值,一般建议扩大为当前值的一倍。业务恢复之后再调回原值。
  • 对异常SQL进行SQL限流

排查业务找出连接泄露的原因并整改。例如业务未使用连接池,则合理配置连接池。

相关文档