标签
PostgreSQL , pg_xlogdump , 数据库profile
背景
在PostgreSQL中查看TOP SQL是比较方便的,如下:
《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》
而从另一个角度,比如REDO文件,我们也能分析出每个时间段数据库的操作类型,分析数据库资源消耗,以及提出优化建议。
redo日志长什么样
pg_xlogdump
要查看redo日志,不得不提pg_xlogdump,原理和介绍详见如下
《PostgreSQL xlog dump - pg_xlogdump 源码讲解》
我们简单的看看某个REDO文件的内容:
pg_xlogdump 000000050000159E00000095 000000050000159E00000099|less
rmgr: Btree len (rec/tot): 42/ 74, tx: 891772656, lsn: 159E/95000CA0, prev 159E/94FFEC78, bkp: 0000, desc: insert: rel 1663/56867/10216768; tid 19180/150
rmgr: Btree len (rec/tot): 34/ 66, tx: 891772656, lsn: 159E/95000CF0, prev 159E/95000CA0, bkp: 0000, desc: insert: rel 1663/56867/10906168; tid 150019/337
rmgr: Transaction len (rec/tot): 12/ 44, tx: 891772656, lsn: 159E/95000D38, prev 159E/95000CF0, bkp: 0000, desc: commit: 2017-05-04 13:15:50.262106 CST
rmgr: Heap2 len (rec/tot): 26/ 58, tx: 0, lsn: 159E/95000D68, prev 159E/95000D38, bkp: 0000, desc: clean: rel 1663/56867/10216762; blk 402406 remxid 891772032
rmgr: Heap len (rec/tot): 25/ 8065, tx: 891772657, lsn: 159E/95000DA8, prev 159E/95000D68, bkp: 1000, desc: lock 891772657: rel 1663/56867/10216770; tid 39310/2 LOCK_ONLY EXCL_LOCK
rmgr: Heap len (rec/tot): 36/ 8116, tx: 891772657, lsn: 159E/95002D48, prev 159E/95000DA8, bkp: 0100, desc: update: rel 1663/56867/10216770; tid 39310/2 xmax 891772657 ; new tid 122748/1 xmax 0
rmgr: Btree len (rec/tot): 18/ 5238, tx: 891772657, lsn: 159E/95004D18, prev 159E/95002D48, bkp: 1000, desc: insert: rel 1663/56867/10216776; tid 15681/11
rmgr: Transaction len (rec/tot): 12/ 44, tx: 891772657, lsn: 159E/950061A8, prev 159E/95004D18, bkp: 0000, desc: commit: 2017-05-04 13:15:50.320538 CST
rmgr是指这笔REDO RECORD的类别,后面是长度等信息。
通过以下命令,可以统计每个资源有多少笔redo记录,描述是什么?
pg_xlogdump 000000050000159E00000095 000000050000159E00000099|grep -v " lock "| awk '{print $2" "$16" "$17}'|sort |uniq -c|sort -n -r
178464 Gin Insert item,
39060 Gin Vacuum page,
30980 Heap2 clean: rel
23855 Gin Vacuum data
22240 Btree insert: rel
18068 Heap insert: rel
15650 Heap2 visible: rel
8516 Heap delete: rel
4057 Transaction commit: 2017-05-04
3727 XLOG full-page image:
3331 Gin Insert new
3026 Heap update: rel
1196 Transaction abort: 2017-05-04
1191 Gin Update metapage,
765 Btree vacuum: rel
755 Heap hot_update: rel
243 Gin Delete list
55 Btree insert_upper: rel
50 Btree split_r: rel
32 Btree unlink_page: rel
32 Btree mark_page_halfdead: rel
29 Btree reuse_page: rel
28 Heap2 freeze_page: rel
27 Standby running xacts:
27 Heap insert(init): rel
20 Heap inplace: rel
11 Btree delete: index
9 Heap2 cleanup info:
5 Standby AccessExclusive locks:
5 Btree split_l: rel
4 Gin Page split,
2 XLOG checkpoint: redo
2 Gin Create posting
1 Heap update(init): rel
这个日志可以看出什么问题呢?
比如我们可以看到Gin的REDO非常多,说明用户使用了GIN索引,同时这个索引的写入,更新非常频繁。
对于这种情况,用户可以设置GIN索引的fastupdate特性,同时调大vacuum naptime,以及调大表的vacuum阈值,尽量的减少GIN的合并频率,(但是fastupdate会降低检索性能)。
其他,
如果你看到VACUUM非常多,说明这些REDO中包含大量的垃圾回收信息,用户可能产生了较多垃圾,正在被回收。
如果是VACUUM FREEZE较多,说明冻结较多,用户可以修改一下冻结周期,减少这种REDO。
参考
《PostgreSQL 使用pg_xlogdump找到误操作事务号》
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com
相关推荐
Load Profile 部分显示数据库负载概况,包括 Redo Size、Logical Reads、Block Changes、Physical Reads、Physical Writes、User Calls、Parses 等指标。 * Redo Size:每秒产生的日志大小(单位字节),可标志数据...
- 归档模式 (ARCHIVELOG): 在这种模式下,Oracle记录所有事务的redo日志,使得数据库能够恢复到任何时间点。这是用于生产环境的推荐模式,因为它允许最大程度的数据恢复。 - 非归档模式 (NOARCHIVELOG): 此模式下...
可以使用以下命令调整Redo日志文件的大小: ```sql ALTER DATABASE MODIFY LOGFILE GROUP 2 ('/path/to/redo02a.log', '/path/to/redo02b.log') SIZE 50M; ``` **临时表空间迁移** 临时表空间通常用于临时存储和...
- `logfile GROUP1('/oracle/oradata/mydb/redo1.dbf') size 10m, GROUP2('/oracle/oradata/mydb/redo2.dbf') size 10m, GROUP3('/oracle/oradata/mydb/redo3.dbf') size 10m` **总结**: 手动创建Oracle数据库...
* 日志文件的大小设置,数据库 redo 日志文件的大小一般设置为 2048。 * 字符串比较大小写敏感,建议在开发环境和测试环境中保持一致。 二、Linux 环境安装 * 在安装之前,需要确认打开文件数的那个参数的设置情况...
13.1.3日志线程与联机Redo日志 13.1.4 UNDO表空间 13.2实例恢复 13.2.1 RAC的实例恢复 13.2.2实例恢复的阶段 13.3介质恢复 13.3.1介质恢复的过程 13.3.2物理坏块和逻辑坏块 13.3.3坏块的检测工具 13.3.4块...
- 创建数据库:`create database test logfile group1 'D:\Oracle\admin\DB2\redo1a.log' size 10M, group2 'D:\Oracle\admin\DB2\redo2a.log' size 10M datafile 'D:\Oracle\admin\DB2\system01.dbf' size 300M ...
- **CRS软件版本**:确认CRS的版本与数据库版本兼容,且日志文件`CRSD.LOG`和`OCSSD.LOG`无异常,表明服务正常运行。 **ASM(Automatic Storage Management)** - **ASM磁盘组**:检查磁盘组的名称、冗余级别和使用...
根据你的需求,创建必要的数据库目录,如数据文件、redo日志、控制文件等: ``` mkdir -p $ORACLE_HOME/oradata mkdir -p $ORACLE_HOME/fast_recovery_area ``` 4. **初始化参数文件(SPFILE)** 使用`dbca`...
2. **重做日志文件**:用于记录对数据库的所有更改,如`REDO01.LOG`、`REDO02.LOG`和`REDO03.LOG`。每个数据库至少有两个重做日志文件,通常以循环方式使用,以确保数据的持久性。 3. **数据文件**:包含用户数据和...
- **增加REDO日志组**:增加重做日志文件组的数量。 - **删除日志组**:删除不再需要的重做日志文件组。 - **日志切换**:触发手动的日志文件切换。 - **日志清理**:清除过期的重做日志文件。 - **重做日志...
在AWR报告的Load Profile部分,会显示Redo Size(重做日志大小)、Logical Reads(逻辑读取次数)、Block Changes(块更改次数)、Physical Reads(物理读取次数)、Physical Writes(物理写入次数)和User Calls...
5. **数据库缓存**:Oracle的Buffer Cache和Redo Log Buffer分别缓存数据块和重做日志信息,合理调整缓存大小和LRU(最近最少使用)策略可减少磁盘I/O。 6. **并发控制**:Oracle的锁定机制和多版本并发控制(MVCC...
例如,Redo size表示redo日志的生成速率,反映了数据库的事务活动强度;Logical reads和Block changes分别表示逻辑读和物理写操作的频率,Physical reads和Physical writes则是磁盘I/O的指标。User calls、Parses和...
Load Profile部分详细列出了数据库的负载情况,包括redo日志大小(Redosize)、逻辑读取次数(Logical reads)、块更改数量(Block changes)、物理读取次数(Physical reads)、物理写入次数(Physical writes)等...
2. 主库模式(primary):用户可以正常访问数据库,对数据库对象的修改强制生成redo日志,在归档有效的时候,发送redo日志到备库。 3. 备库模式(standby):接收主库发送过来的redo日志,并重做日志,数据库对用户...
Load Profile部分给出了每秒和每事务的资源使用统计,例如Redo size反映了redo日志的生成速度,Logical reads和Block changes分别代表逻辑读取和数据块的修改频率,Physical reads和writes则表示物理I/O的次数。...
源端的Extract进程负责从redo日志中抽取变更,Pump进程则将这些变更传输至目标端。目标端的Replicat进程接收这些变更并将其应用到目标数据库。 对于DDL同步,源端需要运行特定的脚本来支持DDL复制,并且修改源端...