使用 pg_profile 在 Postgres 中生成性能报告

如果使用过 oracle,就必须了解 AWR 报告,该报告用于生成特定持续时间的数据库的工作负载性能报告。
在 postgres 中没有生成性能报告的内置函数。 但是有一个名为 pg_profile 的扩展可以用来生成类似的性能报告。
在本文中,我们将解释如何实现这一目标
1.下载安装pg_profile 从github链接下载扩展文件-> https://github.com/zubkov-andrei/pg_profile/releases
复制到服务器并解压缩到以下位置

[root@~]# cd /usr/edb/as12/share/extension/
[root@extension]# ls -ltr *gz
-rw-r--r-- 1 root root 186808 Jun 1 14:06 pg_profile--0.3.6.tar.gz
[root@extension]# tar xzf pg_profile--0.3.6.tar.gz --directory /usr/share/postgresql/10/extension
[root@extension]# ls -ltr
total 3928
-rw-r--r-- 1 root root 2259 Nov 24 2019 pldbgapi--unpackaged--1.1.sql


--Connect with super user and create the extension:

postgres=# CREATE EXTENSION pg_profile;

2.验证参数设置如下:

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = 'top'
pg_stat_statements.save = on
track_activities = on
track_counts = on
track_io_timing = on
track_functions = all

3.如果需要生成远程服务器的性能报告,就需要有 dblink 扩展:

CREATE EXTENSION dblink;

4.验证如下扩展是否已经存在:

postgres=# \dx
                                        List of installed extensions
        Name        | Version |   Schema   |                          Description
--------------------+---------+------------+----------------------------------------------------------------
 dblink             | 1.2     | public     | connect to other PostgreSQL databases from within a database
 pg_profile         | 0.3.6   | public     | PostgreSQL load profile repository and report builder
 pg_stat_statements | 1.7     | public     | track execution statistics of all SQL statements executed
(14 rows)
  1. 验证服务器信息:
    默认情况下,本地服务器将添加到服务器列表中
postgres=# select * from show_servers();
 server_name |          connstr          | enabled | description
-------------+---------------------------+---------+-------------
 local       | dbname=postgres port=5444 | t       |
(1 row)
  1. 采样:
    要生成报告,您至少需要两个快照
postgres=# select * from show_samples;
 sample | sample_time | sizes_collected | dbstats_reset | clustats_reset | archstats_reset
--------+-------------+-----------------+---------------+----------------+-----------------
(0 rows)

postgres=# select * from take_sample();
 server | result |   elapsed
--------+--------+-------------
 local  | OK     | 00:00:00.48
(1 row)





postgres=# select * from show_samples();
 sample |        sample_time        | sizes_collected | dbstats_reset | clustats_reset | archstats_reset
--------+---------------------------+-----------------+---------------+----------------+-----------------
      1 | 01-JUN-22 14:13:23 +03:00 | t               |               |                |
(1 row)


--- after doing some transaction.


postgres=#  select * from take_sample();
 server | result |   elapsed
--------+--------+-------------
 local  | OK     | 00:00:00.44
(1 row)

postgres=#  select * from show_samples();
 sample |        sample_time        | sizes_collected | dbstats_reset | clustats_reset | archstats_reset
--------+---------------------------+-----------------+---------------+----------------+-----------------
      1 | 01-JUN-22 14:13:23 +03:00 | t               |               |                |
      2 | 01-JUN-22 14:13:56 +03:00 | t               |               |                |
(2 rows)
  1. 生成性能报告:
    1 和 2 是快照 ID。
-bash-4.2$ psql -d postgres  -Aqtc "SELECT  get_report('local',1,2)" -o 1st_report.html

如下是产生的性能报告截图
在这里插入图片描述
8. 为远程服务器创建性能报告:
如果要在远程服务器上生成 postgres 集群的报告,则需要将其添加到 server list 中。

First you need to add the server.

postgres=# SELECT create_server('elmtest','host=10.20.30.131 dbname=postgres port=5444');
 create_server
---------------
             2
(1 row)

update home目录下.pgpass file,

-bash-4.2$ cat .pgpass
10.20.30.131:5444:*:enterprisedb:elm#912345


postgres=# select * from show_servers();
 server_name |                   connstr                    | enabled | description
-------------+----------------------------------------------+---------+-------------
 elmtest     | host=10.20.30.131 dbname=postgres port=5444  | t       |
 local       | dbname=postgres port=5444                    | t       |
(2 rows)


Now take sample

-- 直接run take_sample(),不带参数,将为所有服务器生成样本。
postgres=#  select * from take_sample();
 server  | result |   elapsed
---------+--------+-------------
 elmtest | OK     | 00:00:00.63
 local   | OK     | 00:00:00.51
(2 rows)

-- 如果需要为特定服务器生成快照,则在take_sample() 中传递该值,例如,

postgres=#  select * from take_sample('elmtest');
 server  | result |   elapsed
---------+--------+-------------
 elmtest | OK     | 00:00:00.63
(1 rows)


-- 显示远程服务器 elmtest 的快照ID:
postgres=#  select * from show_samples('elmtest');
 sample |        sample_time        | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
--------+---------------------------+-----------------+---------------+-----------------+-----------------
      1 | 03-JUN-22 21:55:05 +03:00 | t               |               |                 |
(1 row)


--- 显示所有server的快照ID:

postgres=# select * from show_sample();
 sample |        sample_time        | sizes_collected | dbstats_reset | clustats_reset | archstats_reset
--------+---------------------------+-----------------+---------------+----------------+-----------------
      1 | 01-JUN-22 14:13:23 +03:00 | t               |               |                |
      2 | 01-JUN-22 14:13:56 +03:00 | t               |               |                |
      3 | 01-JUN-22 14:55:35 +03:00 | t               |               |                |
      4 | 01-JUN-22 22:41:08 +03:00 | t               |               |                |
      5 | 01-JUN-22 22:42:18 +03:00 | t               |               |                |
      6 | 03-JUN-22 19:02:35 +03:00 | t               |               |                |
      7 | 03-JUN-22 21:55:05 +03:00 | t               |               |                |
(7 rows)

9.设置快照的保留期:
我们不可能永远保留快照 ID,因为它会占用存储空间。 所以最好将保留期设置为 30 天/60 天。
因此,可以使用以下命令为服务器设置 max_sample_age。

- 30 means 30 days.

postgres=# select set_server_max_sample_age('elmtest',30);
set_server_max_sample_age
---------------------------
1
(1 row)

还有另一个概念称为基线(baseline),支持在特定持续时间内保留特定范围的快照,然后可以按如下方式创建基线。
注意- - 基线保留将覆盖 max_sample_age 设置

-- Create baseline,

elmtest - server_name,
plm_base1 - baseline_name,
1 and 2 are start and end sample range.
30 - retention period.

postgres=# select create_baseline('elmtest','plm_base1',1,2,30);
create_baseline
-----------------
5
(1 row)

-- Show baselines:


postgres=# select * from show_baselines();
 baseline | min_sample | max_sample |      keep_until_time
----------+------------+------------+---------------------------
 local2   |          1 |          4 | 01-JUL-22 22:44:44 +03:00
 local    |          1 |          3 | 05-JUN-22 15:15:39 +03:00
(2 rows)

postgres=# select * from show_baselines('elmtest');
 baseline  | min_sample | max_sample |      keep_until_time
-----------+------------+------------+---------------------------
 plm_base1 |          1 |          1 | 05-JUL-22 17:59:33 +03:00
(1 row)
-- Modify baseline retention period:

postgres=# select keep_baseline('elmtest','plm_base1',50);
 keep_baseline
---------------
             1
(1 row)

postgres=# select * from show_baselines('elmtest');
 baseline  | min_sample | max_sample |      keep_until_time
-----------+------------+------------+---------------------------
 plm_base1 |          1 |          1 | 25-JUL-22 18:00:52 +03:00
(1 row)
-- Drop a baseline:

postgres=#  select drop_baseline('elmtest','plm_base1');
 drop_baseline
---------------
             1
(1 row)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在正运行的PostgreSQL的Docker容器使用pg_rman恢复数据库,您可以按照以下步骤进行操作: 1. 首先,您需要在Docker容器安装pg_rman工具。可以使用以下命令安装: ```bash docker exec -it <container_name> bash -c "apt-get update && apt-get install -y postgresql-<version>-pg-rman" ``` 其,`<container_name>`是您要安装pg_rman的容器的名称,`<version>`是您正在使用PostgreSQL版本的数字版本号。 2. 然后,您需要从备份还原数据库。您可以使用以下命令将备份文件复制到Docker容器: ```bash docker cp <backup_file> <container_name>:<backup_path> ``` 其,`<backup_file>`是备份文件的路径和名称,`<container_name>`是您要将备份文件复制到的容器的名称,`<backup_path>`是备份文件在容器的路径。 3. 接下来,您需要停止PostgreSQL服务器。您可以使用以下命令在Docker容器停止PostgreSQL服务器: ```bash docker exec -it <container_name> bash -c "pg_ctl stop -D <data_directory>" ``` 其,`<container_name>`是您要停止PostgreSQL服务器的容器的名称,`<data_directory>`是PostgreSQL服务器数据目录的路径。 4. 然后,您需要使用pg_rman工具恢复数据库。您可以使用以下命令在Docker容器运行pg_rman: ```bash docker exec -it <container_name> bash -c "pg_rman restore --backup-path=<backup_path> --restore-target=<restore_directory> --quiet" ``` 其,`<container_name>`是您正在运行pg_rman的容器的名称,`<backup_path>`是备份文件在容器的路径,`<restore_directory>`是要将数据库恢复到的目录的路径。 5. 最后,您需要启动PostgreSQL服务器。您可以使用以下命令在Docker容器启动PostgreSQL服务器: ```bash docker exec -it <container_name> bash -c "pg_ctl start -D <data_directory>" ``` 其,`<container_name>`是您要启动PostgreSQL服务器的容器的名称,`<data_directory>`是PostgreSQL服务器数据目录的路径。 完成以上步骤后,您应该能够在正运行的PostgreSQL的Docker容器使用pg_rman恢复数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值