如何在PostgreSQL中获取awr报告

0、说明

AWR报告全称Automatic Workload Repository,自动负载信息库,是一种性能收集和分析工具,提供了一个时间段内整个系统的报表数据,熟悉Oracle的人想必都不陌生。
可是在postgresql中并没有AWR这一功能,不过我们可以通过自定义一些监控脚本来实现相似的功能。

1、安装

下载地址:https://download.csdn.net/download/weixin_39540651/13026044

说明:这里我是安装在pg13中的,之前的版本需要将pg_stat_statements的total_plan_time字段改成total_time

1.1、添加pg_stat_statements插件

需要用到pg_stat_statements插件:

$ vi postgresql.conf   
  
shared_preload_libraries='pg_stat_statements'   
  
$ pg_ctl restart -m fast 

1.2、解压安装

pg13@cnndr4pptliot-> cd postgresql-13beta3/contrib/

pg13@cnndr4pptliot-> tar -zxvf pg_awr.tar.gz

pg13@cnndr4pptliot-> cd pg_awr/

pg13@cnndr4pptliot-> make&make install
[1] 31553
make: Nothing to be done for `all’.
/bin/mkdir -p ‘/home/pg13/pgsql13.3/share/extension’
/bin/mkdir -p ‘/home/pg13/pgsql13.3/share/extension’
/bin/install -c -m 644 .//pg_awr.control ‘/home/pg13/pgsql13.3/share/extension/’
/bin/install -c -m 644 .//pg_awr–0.0.1.sql ‘/home/pg13/pgsql13.3/share/extension/’
[1]+ Done make

1.3、创建扩展

bill=# create extension pg_awr;
CREATE EXTENSION

bill=# \dx+ pg_awr
                 Objects in extension "pg_awr"
                      Object description
---------------------------------------------------------------
 function __monitor__.sequence_stats()
 function __monitor__.snap_database(boolean)
 function __monitor__.snap_delete(bigint)
 function __monitor__.snap_delete(timestamp without time zone)
 function __monitor__.snap_delete_data(bigint)
 function __monitor__.snap_global(boolean)
 function __monitor__.snap_report_database(bigint,bigint,text)
 function __monitor__.snap_report_global(bigint,bigint,text)
 function __monitor__.vacuumlo(bigint)
 schema __monitor__
 sequence __monitor__.snap_list_id_seq
 table __monitor__.snap_list
 table __monitor__.snap_pg_conn_stats
 table __monitor__.snap_pg_cputime_topsql
 table __monitor__.snap_pg_database_age
 table __monitor__.snap_pg_db_conn_limit
 table __monitor__.snap_pg_db_rel_size
 table __monitor__.snap_pg_db_role_setting
 table __monitor__.snap_pg_db_size
 table __monitor__.snap_pg_dead_tup
 table __monitor__.snap_pg_hash_idx
 table __monitor__.snap_pg_index_bloat
 table __monitor__.snap_pg_long_2pc
 table __monitor__.snap_pg_long_xact
 table __monitor__.snap_pg_many_indexes_rel
 table __monitor__.snap_pg_notused_indexes
 table __monitor__.snap_pg_rel_age
 table __monitor__.snap_pg_rel_space_bucket
 table __monitor__.snap_pg_role_conn_limit
 table __monitor__.snap_pg_seq_deadline
 table __monitor__.snap_pg_stat_activity
 table __monitor__.snap_pg_stat_archiver
 table __monitor__.snap_pg_stat_bgwriter
 table __monitor__.snap_pg_stat_database
 table __monitor__.snap_pg_stat_statements
 table __monitor__.snap_pg_statio_all_indexes
 table __monitor__.snap_pg_statio_all_tables
 table __monitor__.snap_pg_table_bloat
 table __monitor__.snap_pg_tbs_size
 table __monitor__.snap_pg_unlogged_table
 table __monitor__.snap_pg_user_deadline
 table __monitor__.snap_pg_vacuumlo
 table __monitor__.snap_pg_waiting
(43 rows)

2、使用

2.1、生成快照(全局)

select __monitor__.snap_global();    --  给全局打快照(注意包含的是全局信息,并不是每个库的快照信息)。  

2.2、生产快照(库级)

select __monitor__.snap_database();  --  给当前数据库打快照。  

2.3、查看快照列表

select * from __monitor__.snap_list;  

2.4、指定快照起始ID,生成全局报告(text模式)

select * from __monitor__.snap_report_global($begin_snap_id, $end_snap_id);  

2.5、指定快照起始ID,生成库级报告(text模式)

select * from __monitor__.snap_report_database($begin_snap_id, $end_snap_id);  

2.6、 删除指定snap_ID以前的快照。

select __monitor__.snap_delete(10::int8);            

2.7、 删除指定时间以前的快照。

select __monitor__.snap_delete('2020-10-23 12:00:00'); 

3、配置

create_snap.sql:
创建快照

select __monitor__.snap_global();
select __monitor__.snap_database();

delete_snap.sql:
删除一天前的快照

select __monitor__.snap_delete((current_date-1)::timestamp);

snapshot.sh:

#!/bin/bash
# #################################################
#   create and delete global&database snapshot.
# #################################################

psql --pset=pager=off -q -U bill -d bill -f create_snap.sql > create_snap.log

psql --pset=pager=off -q -U bill -d bill -f delete_snap.sql > delete_snap.log

定时任务:
可以设置成和oracle一样每小时生成一次快照

00 *   * * * nohup sh /home/pg13/snapshot.sh &

猜你喜欢

转载自blog.csdn.net/weixin_39540651/article/details/109245511