pg_profile: 开始上手

三月 6, 2024

摘要pg_profile扩展可以帮助您找出 PostgreSQL 数据库中资源密集型的活动。

介绍

如果您使用过 Oracle,那么您肯定了解过 AWR 报告,它用于生成特定时间段内数据库的工作负载性能报告。

但是在 PostgreSQL 中没有内置函数来生成性能报告。然而,有一个名为pg_profile的扩展可以用来生成类似的性能报告。

在本文中,我们将给您介绍如何实现这一点。

安装

从项目的发布页面下载扩展文件。

1. 将压缩包文件复制到服务器,并解压缩到下面的位置。

$ tar xzf pg_profile--4.4.tar.gz --directory /usr/pgsql/share/extension/

使用超级用户连接到数据库,并创建扩展:

CREATE EXTENSION pg_profile;

2. 验证参数设置。确保高亮显示的参数设置如下。

select name, setting from pg_settings where name like 'track%';

           name            | setting
---------------------------+---------
 track_activities          | on
 track_activity_query_size | 1024
 track_commit_timestamp    | off
 track_counts              | on
 track_functions           | all
 track_io_timing           | on
(6 rows)

3. 创建依赖的扩展:

为了更好地提供 SQL 语句相关的详细性能报告,你需要在你的 PostgreSQL 设置中添加 pg_stat_statements 扩展。

CREATE EXTENSION pg_stat_statements;

使用 pg_profile,您还可以生成远程服务器的性能报告。所以你也需要添加 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         | 4.4     | 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. 验证服务器详细信息:

默认情况下,本地服务器会被添加到服务器列表中。

# select * from show_servers();
 server_name |          connstr          | enabled | description
-------------+---------------------------+---------+-------------
 local       | dbname=postgres port=5444 | t       |
(1 row)

2. 收集本地服务器的样本:

要生成报告,您需要至少有两个样本。

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

--- after doing some transaction.

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

# 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)

3. 生成性能报告:

1 和 2 是样本 ID。

$ psql -d postgres -Aqtc "SELECT get_report('local', 1, 2)" -o 1st_report.html

样例报告:

4. 设置样本保留期:

我们不能永久保存样本,因为这会占用存储空间。因此,最好将保留期设置为 30 天或 60 天。

因此,您可以使用下面的命令,为服务器设置 max_sample_age

-- 30 means 30 days.

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

然而,还有另一个叫做基线的概念,即支持你为特定的时间段,保持一个特定范围的样本。如果需要,那么你可以参照下面的示例,创建基线。

注意:基线保留期会覆盖 max_sample_age 设置值。

-- Create baseline

# select create_baseline('elmtest', 'baseline_name', 1, 2, 30);
 create_baseline
-----------------
               5
(1 row)

-- Show baselines

# 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)

了解更多

pg_profile: PostgreSQL 历史工作负载报告