Oracle2PG系列之检查点引起的故障案例
本文将介绍一个Oracle数据库迁移到PG过程中遇到的故障案例,探讨检查点对数据库稳定性的影响,并提供优化建议。

基础知识
数据库的最小存储单元是数据块,当客户端修改数据时,引擎需要将对应的物理数据块读到buffercache中进行修改。为避免脏块持久化不及时导致性能下降和数据丢失,各大数据库厂商采用预写式(write-ahead log)来记录修改动作,并将其持久化到磁盘,以满足数据持久化的同时实现性能优化。
针对脏块标记,数据库厂商通常采用检查点(checkpoint)来进行间隔性标记,并使用WAL日志进行一致性恢复。在此过程中,全量检查点会导致大量IO,影响数据库稳定性。
PG的检查点
PG在发生检查点时,需要将全量脏块刷新到磁盘中,这会导致IO过载的问题,并且目前版本中还不支持增量检查点。为解决这个问题,PG建议通过控制检查点的周期、刷脏的负荷等方式来优化。
对于这个问题,我们建议在生产环境中进行多轮压测调整,逐步控制检查点的周期、负荷等参数,以达到理想效果。
需要注意的是,相比Oracle,PG的日志信息较少,排查问题相对困难,这方面还有待改进。
以上就是本次故障案例的总结。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6320.html
