从Oracle到PostgreSQL:动态性能视图 vs 标准统计视图

本文对比了Oracle和PostgreSQL在性能监控方面的视图,探讨了PostgreSQL中的pg_stat_activity、pg_stat_archiver、pg_stat_bgwriter、pg_stat_database等视图,以及它们如何帮助DBA诊断性能问题。虽然Oracle提供了更详细的视图,但PostgreSQL的视图设计简洁,易于理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从 Oracle 到 PostgreSQL :从 Uptime 到数据库实例运行时间

Oracle数据库的性能视图几乎可以说是最引以为骄傲的功能,在那样细粒度的采样统计强度下,依然保持卓越的性能,基于这些性能数据采样之后形成的AWR,更是Oracle DBA分析数据库性能问题的最重要手段之一。


那么在誉为最接近Oracle的开源数据库PostgreSQL中,如果要诊断性能问题,又有哪些视图可以使用呢?作为Oracle DBA,在学习PostgreSQL的时候,不可避免地会将PostgreSQL和Oracle进行比较。


以下SQL命令,在mydb=#提示符下的均为在PostgreSQL中执行的,在SQL>提示符下的均为在Oracle中执行的。


先看一下在PostgreSQL中存在那些统计信息视图。PostgreSQL中数据字典的命名还是很规范的,所有统计信息基本上都以pg_stat_开头。

 
 
mydb=# select relname from pg_class where relname like 'pg_stat_%';	
             relname              	
----------------------------------	
 pg_statistic	
 pg_stats	
 pg_stat_all_tables	
 pg_stat_xact_all_tables	
 pg_stat_sys_tables	
 pg_stat_xact_sys_tables	
 pg_stat_user_tables	
 pg_stat_xact_user_tables	
 pg_statio_all_tables	
 pg_statio_sys_tables	
 pg_statio_user_tables	
 pg_statio_all_indexes	
 pg_statio_sys_indexes	
 pg_statio_user_indexes	
 pg_statio_all_sequences	
 pg_statio_sys_sequences	
 pg_statio_user_sequences	
 pg_stat_activity	
 pg_stat_replication	
 pg_stat_database	
 pg_stat_database_conflicts	
 pg_stat_user_functions	
 pg_stat_xact_user_functions	
 pg_stat_archiver	
 pg_stat_bgwriter	
 pg_stat_all_indexes	
 pg_stat_sys_indexes	
 pg_stat_user_indexes	
 pg_statistic_relid_att_inh_index	
(29 rows)	
pg_stat_activity


该视图显示了连接入一个Cluster下所有数据库的会话的统计信息,每个会话一行记录,类似于Oracle中的V$SESSION视图。


pg_stat_activity.query字段直接显示了该会话正在执行的SQL或者上次执行的SQL语句文本。在Oracle中检查一个会话正在执行的SQL语句文本,则需要通过V$SESSION和V$SQL视图Join才可以。

pg_stat_activity.pid字段直接显示了该会话在操作系统上的进程ID,这样通过top命令看到的繁忙操作系统进程,可以很简单地通过该字段定位,来作进一步的诊断。在Oracle中则需要通过V$SESSION和V$PROCESS视图Join才可以。


pg_stat_archiver

该视图始终只有一条记录,显示了负责一个cluster下所有数据库的重做日志(PostgreSQL中称为WAL file)归档进程的统计信息,记录项比较简单。last_archived_wal和last_archived_time分别显示了最近一次归档的文件名和最近一次归档时间。

类似于Oracle中的V$ARCHIVE_DEST_STATUS。由于PostgreSQL中的归档实现实在是太简单了,所以几乎跟Oracle没有太多可比性。


pg_stat_bgwriter

该视图始终只有一条记录,显示了负责一个cluster下所有数据库的后台写进程的统计信息,也就是在操作系统中看到的postgres: writer process。该进程每隔bgwriter_delay初始化参数定义的间隔(默认200ms)会唤醒,将Buffer Pool中修改过的页写入到磁盘。跟Oracle的后台进程DBWR非常相仿。


在Oracle中没有专门记录DBWR进程的性能视图,V$BGPROCESS视图也同样没有提供类似的信息,但是在V$SYSSTAT却记录了DBWR的统计信息,这部分跟pg_stat_bgwriter中记录的信息相仿。Oracle 11gR2中有超过600项的统计信息记录在V$SYSSTAT视图中。

 
 
SQL> select NAME,VALUE from v$sysstat where upper(name) like '%DBWR%';	
	
NAME                                                                  VALUE	
---------------------------------------------------------------- ----------	
flash cache insert skip: DBWR overloaded                                  0	
DBWR checkpoint buffers written                                     1564210	
DBWR thread checkpoint buffers written                                    0	
DBWR tablespace checkpoint buffers written                             2852	
DBWR parallel query checkpoint buffers written                            0	
DBWR object drop buffers written                                        324	
DBWR transaction table writes                                         81619	
DBWR undo block writes                                               485016	
DBWR revisited being-written buffer                                       0	
DBWR lru scans                                                            0	
DBWR checkpoints                                                       4158	
DBWR fusion writes                                                        0	
	
12 rows selected.


pg_stat_database

该视图对于每个database显示一行记录,PostgreSQL中的Cluster类似于Oracle的一个Instance,一个Cluster下可以创建多个database。


该视图中记录了每个数据库提交了多少事务,回滚了多少事务,读了多少数据块,查询、插入、更新、删除了多少记录(在PostgreSQL中用Tuple这个奇怪的词表示跟Row相同的概念),产生过多少死锁。总之这是一个数据库级别相对很简单的统计信息。


但是,在Oracle中还真没有与此类似的性能视图,实际上Oracle没有一个视图简单地记录了一个Schema下面总共查询或者DML了多少条记录,但是却有DBA_TAB_M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值