2 有关日志操作的一些问题
2.1 Bgwriter进程对于日志是如何影响的?
1. Bgwriter进程判断是否有其他进程发送请求作checkpoint的信号
a) 如果有,执行CreateCheckPoint()操作,否则调用BgBufferSync,将缓冲区数据写入磁盘(数据缓冲区中包括用户的操作信息,如对于表中数据的操作、创建索引的操作、对于xlog等的操作等等,这可以查看调用关系得知,从 BgBufferSync 函数入手,调用关系为: BgBufferSync -> SyncOneBuffer;而SyncOneBuffer函数刷出的是“BufferDescriptors”内存块中的内容,“BufferDescriptors”的分配是通过“BufferAlloc”函数分配的,而BufferAlloc的调用关系为:ReadBuffer -> BufferAlloc; ReadBuffer被诸多和heap、gin、gist、xlog等缓存申请调用 )
2. 判断已经有多久没做日志段切换的操作,如果没作日志段切换的时间段比XLogArchiveTimeout大且在“postgresql.conf”文件中设置 “archive_timeout”的值大于零(即XLogArchiveTimeout,默认初值为零),那么调用RequestXLogSwitch,强制日志段切换。