Swap(交换空间)是操作系统中的一种内存管理机制。当物理内存(RAM)不足时,操作系统会将物理内存中不常用的数据暂时写入到磁盘上预先划分的 Swap 空间(虚拟内存)中,从而为急需内存的程序腾出空间。当需要这些数据时,再将其从磁盘读回内存。Swap 是物理内存的扩展。当物理内存不足时,系统会使用 Swap 来防止进程因内存耗尽而被强制终止(OOM Killer)。
使用 Swap 会严重拖累性能,消耗 CPU 和 I/O 资源。理想状态是避免数据库活动数据使用 Swap。所有数据库进程使用的总内存(shared_buffers + wal_buffers + work_mem * 并发数 + ...)不应超过物理内存,以避免触发 Swap。
swap 设置建议:
| 策略 | 推荐大小 | 适用场景 | 说明 |
|---|---|---|---|
| 传统经验法则 | 物理内存的 1 到 2 倍 | 物理内存较小(如 < 32GB)的通用服务器。 | 这是一个历史悠久的原则,为系统应对内存压力提供较大的缓冲空间。 |
| 现代服务器建议 | 一个固定值(如 4GB 或 8GB) 或 与物理内存等大 | 物理内存较大(如 ≥ 32GB)的数据库专用服务器。 | 大内存服务器通常是为了避免使用 Swap。设置 Swap 的主要目的变为: 1. 满足休眠(Hibernate)需求 (如需休眠,Swap 应 ≥ 物理内存)。 2. 应对极端情况,为系统内核和少量后台进程提供最低限度的保障。 |
| 最小化策略 | 一个较小的固定值(如 1GB - 4GB) | 云端虚拟机或容器环境,磁盘性能通常较差。 | 在这些环境下,使用 Swap 的性能代价极高。设置一个较小的 Swap 主要是为了满足系统稳定性要求,防止 OOM Killer 杀死关键进程。 |
| 禁用策略 | 0 (不设置 Swap) | 对性能要求极高,且有严格监控和运维保障的系统。 | 不推荐用于生产环境。除非您能绝对保证物理内存充足,并且能承受因内存耗尽导致数据库崩溃的风险。 |
针对 KingbaseES 的生产环境建议
强调 "避免使用 Swap" 的性能原则,对于专用数据库服务器,建议如下:
1.首要目标:通过合理配置数据库内存参数(如 shared_buffers,文档建议初始值为系统内存的 25%),确保数据库的活跃数据集能够容纳在物理内存中,从而从根本上避免业务运行期使用 Swap。
2.Swap 大小设置:
如果您的服务器物理内存很大(例如 64GB 以上),建议设置一个 4GB ~ 8GB 的 Swap 空间。这足以应对操作系统本身的内存需求和一些非预期的内存峰值,同时又不会分配过多几乎用不到的磁盘空间。
如果服务器内存相对紧张,可以采用 与物理内存等大 的策略,提供一个安全的缓冲。
3.重要检查:无论设置多大,安装后都应按照文档指导,使用 free -m 等命令监控系统运行状况。如果发现 Swap 被频繁使用(si/so 值较高,可通过 vmstat 1 命令查看),说明物理内存已不足,应优先考虑优化应用或扩容内存,而不是增大 Swap。