注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL9.3Beta1:新增 pg_xlogdump 模块  

2013-05-27 16:02:09|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 
      PostgreSQL 9.3 新增 pg_xlogdump 模块,这个模块的的功能是将 WAL 日志展现成易读的格式,
大家知道, WAL 日志是二进制文件,是了解数据库内部机制的重要文件,新版本的这个模块主要是
从 debugging  或 educational 角度出发,下面简单演示下:

一 手册上的解释
Name
   pg_xlogdump -- Display a human-readable rendering of the write-ahead log of a PostgreSQL 
   database cluster

Synopsis
   pg_xlogdump [option...] [startseg [endseg] ]

Description
    pg_xlogdump displays the write-ahead log (WAL) and is mainly useful for debugging or 
    educational purposes.

    This utility can only be run by the user who installed the server, because it requires read-only 
    access to the data directory.
    
 
二 pg_xlogdump 测试
--2.1 展现 startseg 到 startseg 的 WAL 的事务日志
 [pg93@redhatB pg_xlog]$ ll
total 65M
-rw-------. 1 pg93 pg93  16M May 15 12:04 000000010000000000000001
-rw-------. 1 pg93 pg93  16M May 18 15:25 000000010000000000000002
-rw-------. 1 pg93 pg93  16M May 24 13:46 000000010000000000000003
-rw-------. 1 pg93 pg93  16M May 27 13:18 000000010000000000000004
drwx------. 2 pg93 pg93 4.0K May 24 13:47 archive_status

[pg93@redhatB pg_xlog]$ pg_xlogdump -b -n1 000000010000000000000001 000000010000000000000004 
rmgr: XLOG        len (rec/tot):     68/    96, tx:          0, lsn: 0/01000024, prev 0/00000000, bkp: 0000, desc: checkpoint: redo 0/1000024; tli 1; prev tli 1; fpw true; xid 0/3; oid 10000; multi 1; offset 0; oldest xid 3 in DB 1; oldest multi 1 in DB 1; oldest
   备注:这里展现的是 000000010000000000000001 到 000000010000000000000004 之间的 WAL 日志,
           -n 表示显示的行数。

--2.2 展现 WAL 中所有的  resource manager 名称
 [pg93@redhatB pg_xlog]$ pg_xlogdump --rmgr=list
XLOG
Transaction
Storage
CLOG
Database
Tablespace
MultiXact
RelMap
Standby
Heap2
Heap
Btree
Hash
Gin
Gist
Sequence
SPGist
 备注:pg_xlogdump 展现的所有资源信息为以上。
 
---2.3 仅展现 WAL 中资源名称 Sequence 的日志
 [pg93@redhatB pg_xlog]$ pg_xlogdump -r Sequence -n1 000000010000000000000001 000000010000000000000004 
rmgr: Sequence    len (rec/tot):    158/   186, tx:       1852, lsn: 0/024DCD7C, prev 0/024DCCC8, bkp: 0000, desc: log: rel 16385/16386/16438
     
   备注:上面指定的 resource manager 为 Sequence,字段信息解释如下:
     
           rmgr: 资源名称
           len:  rmgr记录长度
           tx:   事务ID (transaction ID)
           lsn:  log sequence numbe,包括之前的 LSN 
           bkp:  backup blocks (具体意思还没弄懂)
           desc: 一些描述信息,包括 relation 的相关页信息(重要信息)
 
--2.3.1 关于 desc 信息 
     
        再来看上面的 des 信息,有条“rel 16385/16386/16438” 记录,这是指什么?很容易猜到
  表示:  {reltablespace}/{databaseid}/{relfilenode}*, 接着验证:\

 --tabespace  
francs=> select oid,spcname from pg_tablespace where oid=16385;
  oid  |  spcname   
-------+------------
 16385 | tbs_francs
(1 row)

--database
francs=> select oid,datname from pg_database where oid=16386;
  oid  | datname 
-------+---------
 16386 | francs
(1 row)

--relation
francs=> select oid,relkind,relname from pg_class where oid=16438;
  oid  | relkind |      relname      
-------+---------+-------------------
 16438 | S       | test_json1_id_seq          
   
 备注:可见,最终是个序列。
             
--2.4 仅展现 WAL 中资源名称 Database 的日志
 [pg93@redhatB pg_xlog]$ pg_xlogdump -r Database -b  000000010000000000000001 000000010000000000000004 
rmgr: Database    len (rec/tot):     16/    44, tx:       1797, lsn: 0/0176C9D4, prev 0/0176C974, bkp: 0000, desc: create db: copy dir 1/1663 to 12890/1663
rmgr: Database    len (rec/tot):     16/    44, tx:       1804, lsn: 0/0178332C, prev 0/017832CC, bkp: 0000, desc: create db: copy dir 1/1663 to 12895/1663
rmgr: Database    len (rec/tot):     16/    44, tx:       1808, lsn: 0/0178441C, prev 0/017843BC, bkp: 0000, desc: create db: copy dir 12890/1663 to 16386/16385
rmgr: Database    len (rec/tot):     16/    44, tx:       1814, lsn: 0/0178619C, prev 0/0178613C, bkp: 0000, desc: create db: copy dir 12890/1663 to 16390/16389
pg_xlogdump: FATAL:  error in WAL record at 0/40019F8: record with zero length at 0/4001A58
 备注:上面指定的 resource manager 为 Database,也可以指定LSN,如下。
   
--2.5 指定 LSN
 [pg93@redhatB pg_xlog]$ pg_xlogdump -r Database --start 0/0178332C 000000010000000000000001 000000010000000000000004 
rmgr: Database    len (rec/tot):     16/    44, tx:       1804, lsn: 0/0178332C, prev 0/017832CC, bkp: 0000, desc: create db: copy dir 1/1663 to 12895/1663
rmgr: Database    len (rec/tot):     16/    44, tx:       1808, lsn: 0/0178441C, prev 0/017843BC, bkp: 0000, desc: create db: copy dir 12890/1663 to 16386/16385
rmgr: Database    len (rec/tot):     16/    44, tx:       1814, lsn: 0/0178619C, prev 0/0178613C, bkp: 0000, desc: create db: copy dir 12890/1663 to 16390/16389
pg_xlogdump: FATAL:  error in WAL record at 0/40019F8: record with zero length at 0/4001A58
 
--2.6 关于 LSN
--2.6.1 查看当前 LSN
 postgres=# select pg_current_xlog_location();
 pg_current_xlog_location 
--------------------------
 0/4001A58
(1 row)
 
--2.6.2 查看 LSN 位于哪个 WAL 文件
 postgres=# select pg_xlogfile_name('0/4001A58');
     pg_xlogfile_name     
--------------------------
 000000010000000000000004
(1 row)
 

三 总结
  
   1 从上来看, pg_xlogdump 有点像 Oracle 的 LogMiner,但目前 pg_xlogdump 还不能生成历史 SQL 信息。
   2 目前 pg_xlogdump 主要是出于从 debugging  或 educational 角度使用,生产上使用需谨慎。
   3 pg_xlogdump 展现的信息有限,希望在之后版本加强。


四 参考
pg_xlogdump                                 
  评论这张
 
阅读(8059)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016