30.5. WAL内部

WAL是自动被启用的。除了做一些设置满足存放WAL日志的磁盘空间需求以及一些必要的调节以外(参阅第 30.4 节),对管理员没有什么其他要求。

当每个新记录被写入时,WAL记录被追加到WAL日志中。 插入位置由日志序列号(LSN)描述,该日志序列号是日志中的字节偏移量, 随每个新记录单调递增。LSN值作为数据类型pg_lsn返回。 值可以进行比较以计算分离它们的WAL数据量,因此它们用于衡量复制和恢复的进度。

WAL日志被存放在数据目录的pg_wal目录里,它是作为一个文件段的集合存储的,通常每个段16MB大(但是可以在构建服务器时通过修改--with-wal-segsize配置选项来修改段的大小)。每个段分割成多个页,通常每个页为8K(该尺寸可以通过--with-wal-blocksize配置选项来修改)。日志记录头部在access/xlogrecord.h里描述;日志内容取决于它记录的事件类型。段文件的名字是不断增长的数字,从000000010000000000000000开始。目前这些数字不能回卷,不过要把所有可用的数字都用光也需要非常非常长的时间。

日志被放置在和主数据库文件不同的另外一个磁盘上会比较好。你可以通过把pg_wal目录移动到另外一个位置(当然在此期间服务器应当被关闭),然后在原来的位置上创建一个指向新位置的符号链接来实现重定位日志。

WAL的目的是确保在数据库记录被修改之前先写了日志,但是这可能会被那些谎称向内核写成功的破坏, 这时候它们实际上只是缓冲了数据而并未把数据存储到磁盘上。 这种情况下的电源失效仍然可能导致不可恢复的数据崩溃。 管理员应该确保保存PostgreSQL的WAL日志文件的磁盘不会做这种谎报(参见第 30.1 节)。

在完成一个检查点并且刷写了日志文件之后,检查点的位置被保存在文件pg_control里。因此在恢复的开始, 服务器首先读取pg_control,然后读取检查点记录; 接着它通过从检查点记录里标识的日志位置开始向前扫描执行 REDO操作。 因为数据页的所有内容都保存在检查点之后的第一个页面修改的日志里(假设full_page_writes没有被禁用), 所以自检查点以来的所有变化的页都将被恢复到一个一致的状态。

为了处理pg_control被损坏的情况, 我们应该支持对于现有日志段反向扫描的功能 — 从最新到最老 — 这样才能找到最后的检查点。但这些目前还没有被实现。pg_control很小(比一个磁盘页小),因此它不会出现页断裂问题, 并且到目前为止还没有发现仅仅由于无法读取pg_control本身导致数据库失败的报告。 因此,尽管这在理论上是一个薄弱环节,但是pg_control看起来似乎并不是实际会发生的问题。

本文转自PostgreSQL中文社区,原文链接:30.5. WAL内部

PostgreSQL 10.1 手册_部分 III. 服务器管理_第 30 章 可靠性和预写式日志_30.5. WAL内部...相关推荐

  1. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 30 章 可靠性和预写式日志_30.4. WAL配置...

    30.4. WAL配置 有几个WAL相关的配置参数会影响数据库性能.本节将解释它们的使用.关于服务器配置参数的设置的一般信息请参考第 19 章. 检查点是在事务序列中的点,这种点保证被更新的堆和索引数 ...

  2. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 20 章 客户端认证

    第 20 章 客户端认证 目录 20.1. pg_hba.conf文件20.2. 用户名映射20.3. 认证方法 20.3.1. 信任认证20.3.2. 口令认证20.3.3. GSSAPI 认证20 ...

  3. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.8. 错误报告和日志...

    19.8. 错误报告和日志 19.8.1. 在哪里做日志19.8.2. 什么时候记录日志19.8.3. 记录什么到日志19.8.4. 使用 CSV 格式的日志输出19.8.5. 进程标题 19.8.1 ...

  4. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制_26.4. 日志传送的替代方法...

    26.4. 日志传送的替代方法 26.4.1. 实现26.4.2. 基于记录的日志传送 前一节描述的内建后备模式的一种替代方案是使用一个轮询归档位置的 restore_command.这是版本 8.4 ...

  5. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 24 章 日常数据库维护工作_24.3. 日志文件维护...

    24.3. 日志文件维护 把数据库服务器的日志输出保存在一个地方是个好主意, 而不是仅仅通过/dev/null丢弃它们. 在进行问题诊断的时候,日志输出是非常宝贵的.不过,日志输出可能很庞大(特别是在 ...

  6. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 16 章 从源代码安装_16.5. 安装后设置...

    16.5. 安装后设置 16.5.1. 共享库16.5.2. 环境变量 16.5.1. 共享库 在一些有共享库的系统里,你需要告诉你的系统如何找到新安装的共享库.那些并不是必须做这个工作的系统包括 F ...

  7. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.11. 客户端连接默认值...

    19.11. 客户端连接默认值 19.11.1. 语句行为 19.11.2. 区域和格式化 19.11.3. 共享库预载入 19.11.4. 其他默认值 19.11.1. 语句行为 search_pa ...

  8. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 21 章 数据库角色_21.4. 删除角色

    21.4. 删除角色 由于角色可以拥有数据库对象并且能持有访问其他对象的特权,删除一个角色 常常并非一次DROP ROLE就能解决.任何被该用户所拥有 的对象必须首先被删除或者转移给其他拥有者,并且任 ...

  9. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 32 章 回归测试_32.5. 测试覆盖检查

    32.5. 测试覆盖检查 PostgreSQL 源代码可以使用覆盖测试指令编译,因此可以检查哪些部分的代码被回归测试或任何其他测试套件所覆盖.当前使用 GCC 编译时支持该特性,并且需要gcov和lc ...

最新文章

  1. mysql常用sql语句优化
  2. WPF企业内训全程实录(下)
  3. android中如何新建一个activity,《Android Activity》活动的介绍和创建
  4. SpringBoot-探索回顾Spring框架本质
  5. 第一章、第一节 Angular基础
  6. mysql linux安装百度经验_MySQL 安装(Windows Linux)
  7. nginx中root和alias的区别
  8. 增加特征对预测准确率的影响
  9. 【计算机网络】—网络编程(socket)02
  10. 颜色特征识别—识别红色,黄色,绿色,蓝色排针的数量
  11. php 生成圆形 图片,php 图片处理 - 将图片变成圆形
  12. 什么是python解释器?有什么作用?
  13. java生成报表_用java实现报表导出
  14. fc模拟器安卓版_【SFC】魂斗罗3-异形战争模拟器情怀通关2020_EVOS
  15. 【避坑指南】Win7虚拟机中VMwareTools 安装报错问题解决
  16. bootstrapTable 根据条件隐藏某列
  17. 巴菲特的在University of Florida商学院的一次演讲
  18. 专业程序员开发-老狼孩插件懒人精灵版
  19. Python获取阿里云产品云监控数据指标
  20. 【Multisim仿真】TL494电路仿真 DC转DC 5V 1A输出

热门文章

  1. oracle数据泵导入提示00972,oracle数据库使用expdp指定FLASHBACK_TIME遇到ORA-39150错误 | 信春哥,系统稳,闭眼上线不回滚!...
  2. python 地理信息_GitHub - sujeek/geospatial-data-analysis-cn: Python地理信息数据教程中文版(GeoPandas、GIS)...
  3. c#截取字符串后几位_基础库的字符串设计
  4. java设置text默认内容_Eclipse自定义内容辅助基于默认Java内容辅助结果
  5. glue与clue的意思
  6. css a标签去掉下划线_这30个CSS选择器,你必须熟记(上)
  7. jquery ajax 删除数据,JQuery ajax 保存数据,删除数据
  8. c语言建立队列(顺序队列、循化队列和链式队列)
  9. 天翼云从业认证(4.8)高性能计算解决方案
  10. 笔记-中项案例题-2020年下-质量管理