25.wal日志大小是怎样规划的?
1. WAL空间是由那些参数决定的
WAL空间主要以下这三个参数控制:
- max_wal_size
- min_wal_size
- wal_keep_segments或wal_keep_size
所以需要正确设置这个几个参数。这几个参数的原理具体可以见文章:PostgreSQL数据库WAL日志空间大小以及不清理的原因深入分析
2. 空间规划以及参数设置
WAL空间的大小实际上是应该从每天产生多少的WAL的另来规划,但在还没有把数据库建立起来之前,我们很难之道这个数据库每天产生多少日志,所以这时我们通常把WAL空间规划为数据库大小的5%~10%左右。
当然如果这个数据库很小,如只有10GB大小,我们给WAL空间规划为2GB也是没有问题的。但是如果这个数据库的空间很大,如20TB,而这个数据库的更新量不大,则可以小一些,如100GB。
参数min_wal_size通常不需要设置的太大,通常1GB就够了,如果是小库(小于100GB),也可以设置的更小一些,如160MB。
max_wal_size设置为WAL空间的规划大小,而wal_keep_segments设置为max_wal_size - min_wal_size的大小。从原理上说,我们不一定要保证:wal_keep_size + min_wal_size <= max_wal_size,也是可以设置:wal_keep_size + min_wal_size > max_wal_size,这时max_wal_size就与WAL得空间大小没有太大得关系了,max_wal_size主要控制checkpoint发生的频度,每写WAL的日志量超过: max_wal_size的1/3~1/2时就会发生一次checkpoint。
注意如果wal_keep_segments设置的过小,容易导致备库失效。有些人说我们使用复制槽来防止备库需要的WAL日志被清理掉,但是我的经验是物理备库尽量不要使用复制槽,因为复制槽容易导致WAL空间失控,导致主库宕机,这个风险是很大的。通常我们设置合理的wal_keep_segments或wal_keep_size就可以保证备库在绝大多数情况下不会因主库把他需要的WAL日志清理掉而失效。另一般我们还会打开主库的归档,打开归档后,即使备库失效了,还可以通过滚归档的WAL日志来恢复过来,而不必重搭。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-04-28 4.Oracle在启动中报错:ORA-00205