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

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

下载安装 pg_profile 
从github链接下载pg_profile: https://github.com/zubkov-andrei/pg_profile/releases
解压缩到以下位置
# cd $PGHOME/share/extension/
# su - postgress
$ psql -h 127.0.0.1 -d postgres -U postgress
postgres=# CREATE EXTENSION pg_stat_statements;
postgres=# CREATE EXTENSION pg_profile;

验证参数设置如下
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/pl
track_wal_io_timing = on      # Since Postgres 14

注意:如果需要生成远程服务器的性能报告,就需要有 dblink 扩展
postgres=# CREATE EXTENSION dblink;

验证如下扩展是否已经存在
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.6     | public     | PostgreSQL load profile repository and report builder
 pg_stat_statements | 1.10    | public     | track planning and execution statistics of all SQL statements executed
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
(4 rows)

验证服务器信息:默认情况下,本地服务器将添加到服务器列表中
postgres=# select * from show_servers();
 server_name |          connstr          | enabled | max_sample_age | description 
-------------+---------------------------+---------+----------------+-------------
 local       | dbname=postgres port=5432 | t       |                | 
(1 row)

开始采样
要生成报告,您至少需要两个快照
postgres=# select show_samples();
 show_samples 
--------------
(0 rows)

postgres=# select take_sample();
      take_sample       
------------------------
 (local,OK,00:00:01.36)
(1 row)

postgres=# select show_samples();
           show_samples            
-----------------------------------
 (1,"2024-08-28 16:29:34+08",t,,,)
(1 row)

跑5分钟压力测试然后在采样
$ pgbench -i postgres -- 创建压测用表
$ pgbench -M prepared -r -c 8 -j 4 -T 300 -U postgress -p 5432 -d postgres -l
... ...
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: prepared
number of clients: 8
number of threads: 4
maximum number of tries: 1
duration: 300 s
number of transactions actually processed: 311830
number of failed transactions: 0 (0.000%)
latency average = 7.696 ms
initial connection time = 9.861 ms
tps = 1039.447761 (without initial connection time)
statement latencies in milliseconds and failures:
         0.019           0  \set aid random(1, 100000 * :scale)
         0.016           0  \set bid random(1, 1 * :scale)
         0.015           0  \set tid random(1, 10 * :scale)
         0.015           0  \set delta random(-5000, 5000)
         0.158           0  BEGIN;
         0.226           0  UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
         0.184           0  SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
         2.476           0  UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
         3.702           0  UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
         0.197           0  INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
         0.662           0  END;

压测完成后采样
postgres=# select take_sample();
      take_sample      
-----------------------
 (local,OK,00:00:01.8)
(1 row)

postgres=# select * from show_samples();
 sample |      sample_time       | sizes_collected | dbstats_reset | clustats_reset | archstats_reset 
--------+------------------------+-----------------+---------------+----------------+-----------------
      1 | 2024-08-28 16:29:34+08 | t               |               |                | 
      2 | 2024-08-28 16:42:23+08 | t               |               |                | 
(2 rows)

生成性能报告
1 和 2 是快照 ID。
$ psql -d postgres -Aqtc "SELECT get_report('local',1,2)" -o 2024-1-2_report.html
采样生成的报告如下:
[postgress@obocp ~]$ ll
total 10424
-rw-rw-r-- 1 postgress postgress  397055 Aug 28 16:44 2024-1-2_report.html

打开生成的性能报告如下,可以看到包含如下图所示的几方面信息

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

Ahern_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值