阿里云RDS PgSQL AWR报告手册

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介:

标签

PostgreSQL , AWR , Oracle , 数据库诊断 , 性能报告 , snapshot , 快照


背景

熟悉Oracle的童鞋一定对AWR不陌生,通常要分析一个数据库在某个时间段的性能,可以从数据库的动态视图等统计信息记录中生成一份该时段的统计分析报告。

里面包含了常见的等待事件分析,TOP SQL, TOP event等。

PostgreSQL是一个功能和Oracle几乎可以媲美的开源产品,分析报告的工具也非常多,例如pgstatsinfo, pgsnap, pgtop, pgfouine, ..... 非常的多。

我不想介绍这么多的工具,而是自己根据对PG的经验写了一个非常简单易用的,不需要安装一堆的插件,周期性的打快照即可。 用法和AWR非常类似。

本文主要是将之前写的一个比较完整的巡检脚本转换成SQL接口的AWR,易用性更强,不需要登陆数据库主机,即可获得报告。

将来PG加入新的统计信息表,我会继续追加到这个简单的工具中。

希望大家一起来使用和改进,有问题可以发给我。

一、用法

1. 创建插件

create extension pg_awr;  

2. 打快照(全局)

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

3. 打快照(库级)

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

4. 查看快照清单

select * from __rds_pg_stats__.snap_list;  

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

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

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

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

7. 指定快照起始ID,生成全局报告(md模式)

psql --pset=pager=off -q -h xxx.xxx.xxx.xxx -p xxxx -U superuser -d dbname -c "select * from __rds_pg_stats__.snap_report_global(1,1)" > /tmp/global.md  

8. 指定快照起始ID,生成库级报告(md模式)

psql --pset=pager=off -q -h xxx.xxx.xxx.xxx -p xxxx -U superuser -d dbname -c "select * from __rds_pg_stats__.snap_report_database(2,10)" > /tmp/db.md  

9. 解读报告(略, 报告内自带推荐建议)

10. 清除历史快照

10.1 删除指定snap_ID以前的快照。

select __rds_pg_stats__.snap_delete(10::int8);               -- 删除指定SNAP ID以前的快照  

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

select __rds_pg_stats__.snap_delete('2016-11-23 12:00:00');  -- 删除指定时间前的快照。  

10.3 保留最近的几个快照,其他删除。

select __rds_pg_stats__.snap_delete(10::int4);                -- 保留最近的10个快照,其他删除。    

二、接口介绍

1. 快照列表

其实就是快照的清单,每打一个快照,就会新增一条记录。

postgres=# select * from __rds_pg_stats__.snap_list;  
 id |          snap_ts           | snap_level   
----+----------------------------+------------  
  1 | 2016-11-23 19:59:10.321282 | database  
  3 | 2016-11-23 22:29:55.139357 | global  
  4 | 2016-11-23 22:30:42.602292 | database  
  5 | 2016-11-23 22:30:42.602292 | database  
  6 | 2016-11-23 22:30:42.602292 | database  
  7 | 2016-11-23 22:29:55.139357 | global  
  8 | 2016-11-23 22:29:55.139357 | global  
  9 | 2016-11-23 22:29:55.139357 | global  
 10 | 2016-11-23 23:00:31.796333 | global  
 11 | 2016-11-23 22:29:55.139357 | global  
 12 | 2016-11-23 23:02:36.590308 | database  
 13 | 2016-11-23 23:03:51.727333 | global  
 14 | 2016-11-23 23:03:51.727333 | global  
 15 | 2016-11-23 23:03:51.727333 | global  
 16 | 2016-11-23 23:03:51.727333 | global  
 17 | 2016-11-23 23:03:51.727333 | global  
 18 | 2016-11-23 23:03:51.727333 | global  
 19 | 2016-11-23 23:03:51.727333 | global  
 20 | 2016-11-23 23:03:51.727333 | global  
 21 | 2016-11-23 23:02:36.590308 | database  
 22 | 2016-11-23 23:08:50.900675 | global  
 23 | 2016-11-23 23:08:53.153526 | global  
 24 | 2016-11-23 23:08:55.816379 | global  
 25 | 2016-11-23 23:09:11.242692 | database  
 26 | 2016-11-23 23:09:32.270733 | database  
(25 rows)  

2. 快照历史数据表

打快照时,会将系统的统计信息记录到这些历史表,后面根据时间段生成诊断报告就用到这里的数据。

postgres=# \dt __rds_pg_stats__.snap_*  
                      List of relations  
    Schema    |            Name            | Type  |  Owner     
--------------+----------------------------+-------+----------  
 __rds_pg_stats__ | snap_list                  | table | postgres  
 __rds_pg_stats__ | snap_pg_conn_stats         | table | postgres  
 __rds_pg_stats__ | snap_pg_cputime_topsql     | table | postgres  
 __rds_pg_stats__ | snap_pg_database_age       | table | postgres  
 __rds_pg_stats__ | snap_pg_db_conn_limit      | table | postgres  
 __rds_pg_stats__ | snap_pg_db_rel_size        | table | postgres  
 __rds_pg_stats__ | snap_pg_db_role_setting    | table | postgres  
 __rds_pg_stats__ | snap_pg_db_size            | table | postgres  
 __rds_pg_stats__ | snap_pg_dead_tup           | table | postgres  
 __rds_pg_stats__ | snap_pg_hash_idx           | table | postgres  
 __rds_pg_stats__ | snap_pg_index_bloat        | table | postgres  
 __rds_pg_stats__ | snap_pg_long_2pc           | table | postgres  
 __rds_pg_stats__ | snap_pg_long_xact          | table | postgres  
 __rds_pg_stats__ | snap_pg_many_indexes_rel   | table | postgres  
 __rds_pg_stats__ | snap_pg_notused_indexes    | table | postgres  
 __rds_pg_stats__ | snap_pg_rel_age            | table | postgres  
 __rds_pg_stats__ | snap_pg_rel_space_bucket   | table | postgres  
 __rds_pg_stats__ | snap_pg_role_conn_limit    | table | postgres  
 __rds_pg_stats__ | snap_pg_seq_deadline       | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_activity      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_archiver      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_bgwriter      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_database      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_statements    | table | postgres  
 __rds_pg_stats__ | snap_pg_statio_all_indexes | table | postgres  
 __rds_pg_stats__ | snap_pg_statio_all_tables  | table | postgres  
 __rds_pg_stats__ | snap_pg_table_bloat        | table | postgres  
 __rds_pg_stats__ | snap_pg_tbs_size           | table | postgres  
 __rds_pg_stats__ | snap_pg_unlogged_table     | table | postgres  
 __rds_pg_stats__ | snap_pg_user_deadline      | table | postgres  
 __rds_pg_stats__ | snap_pg_vacuumlo           | table | postgres  
 __rds_pg_stats__ | snap_pg_waiting            | table | postgres  
(32 rows)  

3. 创建快照

顾名思义,就是创建快照,我这里分为两种快照,一种是全局的,一种是库级的。

全局的在哪里创建(首先创建extension pg_awr;)都可以,但是只需要创建一次就够了,而库级的需要连接到需要分析库去创建快照。

select __rds_pg_stats__.snap_database();  -- 库级快照  
  
select __rds_pg_stats__.snap_global();    -- 全局快照

全局报告样本

PostgreSQL AWR 全局报告样本

库级报告样本

PostgreSQL AWR 库级报告样本

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
172 0
|
19天前
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
|
4月前
|
人工智能 关系型数据库 MySQL
基于阿里云的PolarDB MySQL版实现AI增强数据管理
本文将介绍如何利用阿里云的PolarDB MySQL版结合AI技术,实现数据管理的自动化和智能化。
314 0
|
3月前
|
弹性计算 关系型数据库 MySQL
新一期陪跑班开课啦!阿里云专家手把手带你体验RDS通用云盘核心能力
本次课程将手把手带领用户创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
|
3月前
|
关系型数据库 MySQL 网络安全
阿里云安装Mysql
阿里云安装Mysql
250 1
|
3月前
|
关系型数据库 数据库 数据安全/隐私保护
"告别繁琐!Python大神揭秘:如何一键定制阿里云RDS备份策略,让数据安全与效率并肩飞,轻松玩转云端数据库!"
【8月更文挑战第14天】在云计算时代,数据库安全至关重要。阿里云RDS提供自动备份,但标准策略难以适应所有场景。传统手动备份灵活性差、管理成本高且恢复效率低。本文对比手动备份,介绍使用Python自定义阿里云RDS备份策略的方法,实现动态调整备份频率、集中管理和智能决策,提升备份效率与数据安全性。示例代码演示如何创建自动备份任务。通过自动化与智能化备份管理,支持企业数字化转型。
97 2
|
4月前
|
关系型数据库 Serverless 数据库
函数计算产品使用问题之如何访问阿里云的RDS
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
关系型数据库 MySQL Serverless
体验阿里云PolarDB MySQL Serverless集群
体验阿里云PolarDB MySQL Serverless集群
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
1268 1
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
1758 2

相关产品

  • 云数据库 RDS MySQL 版
  • 云数据库 RDS
  • 下一篇
    无影云桌面