# PostgreSQL性能分析工具-PoWA

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:19:00.000Z
> 分类: 云主机
> 标签: AI, 数据库, 安全
> 原文链接: http://117.50.162.249:3000/yun/articles/1431

---

# PostgreSQL性能分析工具-PoWA

> 来源: https://www.ucloud.cn/yun/129504.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:19

PostgreSQL性能分析工具-PoWA

**点击上方“IT那活儿”公众号，关注后了解更多内容，不管IT什么活儿，干就完了！！！**

1

**PoWA 是啥？**

PoWA是PostgreSQL 9.4及以后更新版本的性能工具，允许从各种Stats Extensions收集、聚合和清除多个 PostgreSQL 实例的统计信息。全称为PostgreSQL工作负载分析器(PostgreSQL Workload Analyzer)

2

**那它主要有哪些组成部分？**

**PoWA组成部分如下：**

1. PoWA-archivist是PostgreSQL的插件，收集其他插件获取到的性能统计数据。
2. PoWA-collector是在专用存储库服务器上，用于收集远程PostgreSQL实例性能指标的守护进程。
3. PoWA-web是PoWA-collector收集到的性能指标的用户展示界面。
4. 安装于目标PostgreSQL数据库实例上的其他插件，其是性能指标数据的实际来源。

除了pg\_stat\_statements、btree\_gist、powa为必须的插件，**PoWA还支持以下几个插件作为新能指标采集的扩展**：

1. **pg\_qualstats：**用于保存在WHERE语句和JOIN子句中发现的谓词的统计信息，powa 利用它来提供索引建议。
2. **pg\_stat\_kcache：**收集有关文件系统层的实际读取和写入的统计信息，可以用于观察SQL花费多少cpu等。
3. **pg\_wait\_sampling：**用于收集等待事件的采样统计信息，启用后它会收集如下两种统计信息:

   --历史等待事件。它被实现为内存中的环形缓冲区，其中每个进程等待事件的样本都以给定的（可配置的）周期写入。因此，对于每个正在运行的进程，用户可以根据历史大小（可配置）查看一些最近的样本。假设有一个客户端定期读取此历史记录并将其转储到某个地方，则用户可以拥有连续的历史记录。

   --等待分析，以内存hash表形式存在，表中存放每个进程和每个等待事件累积的样本，该表可以根据用户请求进行reset。假设有一个客户端定期转储并reset，用户可以统计一段时间内等待事件的详细。
4. **p****g\_track\_settings：**该插件提供了一个可定期调用的函数(pg\_tracksettingssnapshot())。 在每次调用时，它将存储自上次调用以来更改的设置。
5. **Hypopg：**类似MySQL虚拟索引。
6. **pg\_stat\_statements：**用于SQL语句监控。

3

**那它有没有什么风险或者说对数据库服务器有没有什么影响？**

**存在如下风险或者影响：**

1. PoWA 会对PostgreSQL服务器性能产生很小的负面影响。且很难准确评估这种影响。
2. 如果不使用远程模式，数据将定期存储在本地，所以必须考虑磁盘使用情况，避免影响备份。
3. 在使用远程模式时，powa-repository中配置采集性能指标实例信息需要输入目标实例的IP、帐号及口令，并且可以通过powa\_servers表查询到相关信息，其中连接口令以明文形式呈现，存在安全风险。
4. 在PoWA-collector配置文件中，powa-repository的连接信息中无连接口令配置，表示powa-repository对于PoWA-collector的连接配置项必须为trust，存在安全风险。
5. 在PoWA-web配置文件中，可选配置username、password对应powa-repository（远程模式）或者数据库实例（本地模式）的root用户及连接口令，且以明文形式存储，存在安全风险。

4

**那有什么措施杜绝这种风险呢？**

**建议如下：**

1. 检查pg\_hba.conf文件，设置只容许相关网段的连接。
2. 不允许用户从外网直接访问PoWA。
3. 不允许用户从外网直接访问PostgreSQL。
4. 在HTTPS服务器上运行PoWA并禁用HTTP访问。
5. 使用SSL保护GUI和PostgreSQL之间的连接，拒绝GUI和PostgreSQL之间不受保护的连接。
6. 建议手动授权专用角色查看powa数据库中的数据。
7. 建议使用依赖其他libpq身份验证方法，杜绝纯文本密码存储，其身份验证方法详见官档**https://www.postgresql.org/docs/current/auth-methods.html。**

5

**PoWA详细安装如下：**

在生产环境中，我们要做的是竟可能避免单个PG的powa库中的数据量过大。但是我们又要存放一段时间的快照信息用于性能分析，这个类似于Oracle的AWR快照信息。

这个时候我们就需要专门创建一个多带带的powa数据库用于存储各个pg采集过来的数据。所以生产环境中我们基本上采取的远程模式部署powa。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129504/images/129504_000.png)

远程模式示意图

**PoWA-archivist安装**

**5.1 PoWA-archivist是PoWA的核心组件。****其主要有如下2个部分：**

1. 名为“powa”的管理功能扩展。
2. 名称为“powa”的模块，可以选择作为后台工作程序运行，用以收集本地实例上的性能数据。

**5.2 先决条件**

1. PostgreSQL版本为9.4或更新版本。
2. 需安装pg\_stat\_statements和btree\_gist模块。

**5.3 本次安装环境**

操作系统版本：Redhat7.5

PoWA-archivist版本：4.1.2

**5.4 安装步骤**

1）首先下载PoWA-archivist安装包，地址如下：

**https://github.com/powa-team/powa-archivist/tree/REL\_4\_1\_2**

2）解压：

```
su - postgresunzip powa-archivist-REL_4_1_2.zipcd  powa-archivist-REL_4_1_2
```

3）编译并安装：

```
makemake install
```

例：  
![](https://ucloud-blog.cn-bj.ufileos.com/articles/129504/images/129504_001.png)

4）创建 PoWA 数据库并创建所需的扩展：

```
create database powa;create extension pg_stat_statements;create extension btree_gist;create extension powa;
```

例：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129504/images/129504_002.png)

如果需要本地信息收集，PoWA-archivist可作为后台进程去收集。但是对应的library需要在参数文件中配置且重启生效。

5）修改postgresql.conf配置文件，将powa和pg\_stat\_statements添加到shared\_preload\_libraries参数中,并开启track\_io\_timing。

```
track_io_timing = onshared_preload_libraries = pg_stat_statements,powa
```

例：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129504/images/129504_003.png)

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129504/images/129504_004.png)

由于内容比较多，我们分上下2篇了解PoWA，上篇就到此为止。下篇我们可以了解PoWA-collector、PoWA-web的安装使用及性能指标等的介绍。

参考：

https://github.com/

https://powa.readthedocs.io/en/latest/index.html

https://support.huaweicloud.com/rds/index.html

END

## 本文作者：魏 斌

## 本文来源：IT那活儿（上海新炬王翦团队）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129504/images/129504_005.png)