阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

PostgreSQL启动恢复过程中日志源的切换

197次阅读
没有评论

共计 984 个字符,预计需要花费 3 分钟才能阅读完成。

日志源会在 XLOG_FROM_ARCHIVE->XLOG_FROM_STREAM->XLOG_FROM_ARCHIVE 直接切换,只有读取过程中出错,就会切换到另外一个日志源。但实际执行过程中,XLOG_FROM_ARCHIVE 出错后会到 XLOG_FROM_PG_WAL 读取,但是日志源的变量并不会改变。这个需要注意。

PostgreSQL 启动恢复过程中日志源的切换

static int
XLogFileReadAnyTLI(XLogSegNo segno, int emode, int source)
{
 
 if (expectedTLEs)
  tles = expectedTLEs;
 else
  tles = readTimeLineHistory(recoveryTargetTLI);
 /*
 1、WaitForWALToBecomeAvailable 调用时,source 是 XLOG_FROM_ARCHIVE 时,会使用 XLOG_FROM_ANY
 2、使用 XLOG_FROM_ANY,会首先从归档中读取 xlog,如果 open 失败,则会使用 XLOG_FROM_PG_WAL
 3、外部日志源变量并没有切换
 */
 foreach(cell, tles){
  TimeLineID tli = ((TimeLineHistoryEntry *) lfirst(cell))->tli;
  if (tli < curFileTLI)
   break;    /* don’t bother looking at too-old TLIs */
  if (source == XLOG_FROM_ANY || source == XLOG_FROM_ARCHIVE){
   fd = XLogFileRead(segno, emode, tli,XLOG_FROM_ARCHIVE, true);
   if (fd != -1){
    if (!expectedTLEs)
     expectedTLEs = tles;
    return fd;
   }
  }
  if (source == XLOG_FROM_ANY || source == XLOG_FROM_PG_WAL){
   fd = XLogFileRead(segno, emode, tli, XLOG_FROM_PG_WAL, true);
   if (fd != -1){
    if (!expectedTLEs)
     expectedTLEs = tles;
    return fd;
   }
  }
 }
 return -1;
}

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计984字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中