三月 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)