PostgreSQL异常宕机重启时间超长
2020-03-02 04:38
585 查看
1、现象
异常关闭后,重启后一直打印starting up,持续时间很长。并且,异常关闭前没有大量write的业务,也就是说没有需要大量恢复的redo日志。那么时间耗费在哪里了?
2、通过pstack工具,定位到堆栈在StartupXLOG->SyncDataDirectory这个函数中
3、原理分析
crash后再次重启,需执行2个动作:创建新的WAL文件时,pg_wal目录可能仍然残留临时WAL文件,因此重启时需要执行清理动作;
write data后,可能存在发起fsync但是还没执行。因此断点后可能造成丢失数据,为了避免这种事情发生,需要fsync整个data目录。
StartupXLOG:
if (ControlFile->state != DB_SHUTDOWNED &&
ControlFile->state != DB_SHUTDOWNED_IN_RECOVERY){
RemoveTempXlogFiles();//删除xlogtemp开头的临时文件
SyncDataDirectory();
}
SyncDataDirectory
lstat("pg_wal", &st);
//对目录进行递归,进行pre_sync_fname动作
walkdir(".", pre_sync_fname, false, DEBUG1);
walkdir("pg_tblspc", pre_sync_fname, true, DEBUG1)
walkdir(".", datadir_fsync_fname, false, LOG);
walkdir("pg_tblspc", datadir_fsync_fname, true, LOG);
walkdir->opendir
->readdir
->lstat
->pre_sync_fname | datadir_fsync_fname
pre_sync_fname:
open
pg_flush_data->sync_file_range(fd,0,0,SYNC_FILE_RANGE_WRITE)
close
datadir_fsync_fname->fsync_fname_ext
open
pg_fsync->fsync
close
4、总结
异常宕机后重启,需要将data目录下所有文件stat、open、sync、close。当磁盘性能比较差的时候耗费时间就比较长。
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- PostgreSQL 时间函数 时区的影响
- 异常宕机 Ora-00600 [Kccpb_sanity_check_2] 错误解决方法
- Json序列化空时间字段出异常
- Jsp时间格式转换错误----fmt包uri路径指定错误会报以下异常
- android 出现异常重启
- PostgreSQL基于时间点恢复(PITR)实验记录
- WinXP设置自动关机/重启时间WinXP设置自动关机/重启时间
- 电脑时间倒流,程序拒绝穿越:应用程序发生异常 未知的软件异常(0xe06d7363)
- 异常 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase
- android 中处理崩溃异常并重启程序
- Hadoop--SecondNameNode导致服务启动时间超长
- linux计算服务器最近一次重启的时间
- android 中处理崩溃异常并重启程序
- postgresql得到时间对应周的周一
- 一次RAC共享磁盘映射问题导致RAC异常重启的故障处理过程
- 时间序列异常事件检测
- postgresql的时间数据处理
- Postgresql 数据库插入当前时间命令
- linux内核线程死锁或死循环之后如何让系统宕机重启
- 在catch中捕获了异常后重启应用程序