PostgreSQL日志号LSN和wal日志文件简记
弄明白日志号的原理之后,一段时间又有点忘记了,干脆整理一遍:
(一)wal文件命名规则
1)在$PGDATA目录下面的pg_xlog目录中存放着xlog日志文件(10.1之后变为了pg_wal):
total 165896
-rw-r--r-- 1 apple staff 660K 11 22 15:46 000000010000000000000013.dump
-rw------- 1 apple staff 295B 11 22 16:12 000000010000000000000014.00000028.backup
-rw------- 1 apple staff 16M 12 15 16:28 000000010000000000000046
-rw------- 1 apple staff 16M 12 15 16:30 000000010000000000000047
-rw------- 1 apple staff 16M 12 15 16:30 000000010000000000000048
-rw-r--r-- 1 apple staff 357K 1 16 16:27 000000010000000000000044.dump
-rw------- 1 apple staff 16M 3 27 09:49 000000010000000000000045
-rw------- 1 apple staff 16M 3 27 09:49 000000010000000000000044
drwx------ 4 apple staff 136B 4 9 10:52 archive_status
2)wal日志号由64位组成,即有2**64个日志编号,用完了需要重置,但是这个数量已经很多了,相当于1024P个,1024*1024个T。
日志文件则由24个16进制数字组成,分三部分:时间线、LSN高32位、LSN低32位/(2**24)的值(即低32位中最高两位,表示该日志文件的LSN起始编号,结合具体的LSN方便理解一点)。
(二)在数据库查看具体的日志编号LSN
1)用到的一些方法:
apple=# select proname from pg_proc where proname like 'pg_%_location';
proname
---------------------------------
pg_current_xlog_insert_location
pg_current_xlog_location
pg_last_xlog_receive_location
pg_last_xlog_replay_location
pg_tablespace_location
(5 rows)
2)数据库中可以查询到当前的日志编号情况:
apple=# select pg_current_xlog_location();
pg_current_xlog_location
--------------------------
0/45000098
(1 row)
可以看到:
0表示LSN的高32位
45表示对应的xlog文件的最后两位
000098表示当前的LSN在对应的xlog中的偏移字节地址,我记得有人写过工具来读取xlog中对应块的数据并解析的,需要的时候再用用。
从current_xlog_location也可以推断出该日志对应的xlog文件:
时间线0000000000000045 ----> 000000010000000000000045
(三)LSN在用于恢复时
1)通过pg_controldata来获取control文件中的控制信息:
appledeMacBook-Pro-2:pg_xlog apple$ pg_controldata
pg_control version number: 942
Catalog version number: 201510051
Database system identifier: 6451705940496018968
Database cluster state: in production
pg_control last modified: 一 4/ 9 10:52:12 2018
Latest checkpoint location: 0/45000028
Prior checkpoint location: 0/446C7878
Latest checkpoint's REDO location: 0/45000028
Latest checkpoint's REDO WAL file: 000000010000000000000045
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID: 0/535519
Latest checkpoint's NextOID: 20278
2)用于恢复的两个LSN
Latest checkpoint location: 0/45000028 --表示在做checkpoint本身的日志号
Prior checkpoint location: 0/446C7878
Latest checkpoint's REDO location: 0/45000028 --表示checkpoint时wal日志的位置,也是恢复时,开始日志回滚的起始日志号,即从45这个wal文件中的28字节处开始重做wal日志
PostgreSQL日志号LSN和wal日志文件简记的更多相关文章
- PgSQL · 追根究底 · WAL日志空间的意外增长
问题出现 我们在线上巡检中发现,一个实例的pg_xlog目录,增长到4G,很是疑惑.刚开始怀疑是日志归档过慢,日志堆积在pg_xlog目录下面,未被清除导致.于是检查归档目录下的文件,内容如下.但发现 ...
- WAL日志文件名称格式详解
转自:http://blog.osdba.net/534.html WAL日志文件名称格式详解 PostgreSQL的WAL日志文件在pg_xlog目录下,一般情况下,每个文件为16M大小: osdb ...
- postgresql如何维护WAL日志/归档日志
WAL日志介绍 wal全称是write ahead log,是postgresql中的online redo log,是为了保证数据库中数据的一致性和事务的完整性.而在PostgreSQL 7中引入的 ...
- PostgreSQL WAL日志详解
wal日志即write ahead log预写式日志,简称wal日志.wal日志可以说是PostgreSQL中十分重要的部分,相当于oracle中的redo日志. 当数据库中数据发生变更时:chang ...
- KingbaseES通过sys_waldump解析wal日志
前言 oracle中的redo日志我们无法直接读取,然而对于KingbaseES数据库,我们可以利用sys_waldump工具解析wal日志,查看wal日志记录的信息. 我们可以利用 sys_wald ...
- SQL Server数据库事务日志序列号(LSN)介绍
原文:http://blog.csdn.net/tjvictor/article/details/5251463 日志序列编号(LSN)是事务日志里面每条记录的编号. 当你执行一次备份时,一些 ...
- postgresql数据库配置csv格式的日志输出
postgresql数据库配置csv格风格日志输出 以下介绍postgresql数据库中关于csv格式日志(pg中一种比較具体的日志输出方式)的设置方法. 1.进入$PGDATA文件夹(pg的安装文件 ...
- Log4j配置详解及不同的包(package)下的日志写入到不同的日志文件下
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt262 以下都是log4j.properties要写入的内容: 一:参数介绍: ...
- 主库的wal日志已经被归档或异常丢失如何搭建从库
关键字:wal日志归档 搭建从库 restore_command master 194.1 slave 194.4 wal归档目录 /backup/pgsql/pg_arch/ xlog目录 / ...
随机推荐
- 有道云笔记配合MPic+七牛云 自制MarkDown文档图床(适用Typora)
注:从有道云笔记v6.5开始,有道云笔记会员可以使用MarkDown有道自带的图床.(但是非会员可以采用下面的七牛云图床+MarkDown方法) 0x00 前言 一直用有道云笔记,粘贴图片,做笔记没问 ...
- Spring cloud + boot 问题记录
1 配置中心更新值的时候,要在有需要更新的属性 类上 加入 @RefreshScope 注解 2 关于Spring Cloud 调用服务 服务名称的问题 spring: applicatio ...
- SQLite内存数据库操作类
using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...
- java -d . **.java 与 java **.java 的区别
如何在命令行模式下运行带包的java文件 https://blog.csdn.net/lytor/article/details/17048361 javac,使用"-d ."与省 ...
- JavaScript高级程序设计-读书笔记(6)
第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l 简单值:使用与JavaScript相同的语法,可以在JS ...
- webpack入门配置
webpack入门配置 根据该篇文章进行配置: 入门 Webpack,看这篇就够了 其中由于版本更新的问题会出现几个问题: 1.Would you like to install webpack-cl ...
- 【程序员笔试面试必会——排序②】Python实现 计数排序、基数排序
一.计数排序 概要: 时间复杂度O(n),空间复杂度O(k),k是输入序列的值的范围(最大值-最小值),是稳定的.计数排序一般用于已知输入值的范围相对较小,比如给公司员工的身高体重信息排序. 思路: ...
- Java String类为什么不可变?
原文地址:# Why String is immutable in Java? 众所周知,String类在Java中是不可变的.不可变类简单地说是实例不可修改的类.对于一个实例创建后,其初始化的时候所 ...
- vim编程技巧
1, :E 浏览目录 如果你要改变当前浏览的目录,或是查看当前浏览的目录,你可以使用和shell一样的命令: :cd <dir> – 改变当前目录 :pwd - 查看当前目录 2, :l ...
- Dubbo本地开发技巧
背景 作为后端服务负载.前后分离的主要手段,dubbo在业界中使用率还比较高.随着Dubbo系统的增多,本地开发.调试就出现了麻烦之处 直接在开发本地起同样一份服务 由于Dubbo采用负载均衡的策略, ...