介绍 PoWA
PoWA 是 PostgreSQL 9.4 及以后版本的性能工具,拥有 PostgreSQL 工作负载分析器(PostgreSQL Workload Analyzer)这个全称,可以从各种 StatsExtensions 中收集、聚合和清除多个 PostgreSQL 实例的统计信息。

PoWA 的组成部分
PoWA 由以下组成部分构成:
- PoWA-archivist:PostgreSQL 插件,收集其他插件获取到的性能统计数据。
- PoWA-collector:在专用存储库服务器上,用于收集远程 PostgreSQL 实例性能指标的守护进程。
- PoWA-web:PoWA-collector 收集到的性能指标的用户展示界面。
- 其他安装于目标 PostgreSQL 数据库实例上的插件,其是性能指标数据的实际来源。除了 pg_stat_statements、btree_gist、powa 为必须的插件外,PoWA 还支持以下几个插件作为新能指标采集的扩展:
- pg_qualstats:用于保存在 WHERE 语句和 JOIN 子句中发现的谓词的统计信息,powa 利用它来提供索引建议。
- pg_stat_kcache:收集有关文件系统层的实际读取和写入的统计信息,可以用于观察 SQL 花费多少 CPU 等。
- pg_wait_sampling:用于收集等待事件的采样统计信息,启用后它会收集如下两种统计信息:
- 历史等待事件。它被实现为内存中的环形缓冲区,其中每个进程等待事件的样本都以给定的(可配置的)周期写入。因此,对于每个正在运行的进程,用户可以根据历史大小(可配置)查看一些最近的样本。
- 等待分析,以内存 hash 表形式存在,表中存放每个进程和每个等待事件累积的样本,该表可以根据用户请求进行 reset。假设有一个客户端定期转储并 reset,用户可以统计一段时间内等待事件的详细。
- pg_track_settings:该插件提供了一个可定期调用的函数(pg_tracksettingssnapshot()),在每次调用时,它将存储自上次调用以来更改的设置。
- Hypopg:类似 MySQL 虚拟索引。
- pg_stat_statements:用于 SQL 语句监控。
PoWA 的风险及影响
PoWA 会对 PostgreSQL 服务器性能产生很小的负面影响,具体影响难以准确评估。如果不使用远程模式,数据将定期存储在本地,所以必须考虑磁盘使用情况,避免影响备份。在使用远程模式时,powa-repository 中配置采集性能指标实例信息需要输入目标实例的 IP、帐号及口令,并且可以通过 powa_servers 表查询到相关信息,其中连接口令以明文形式呈现,存在安全风险。在 PoWA-collector 配置文件中,powa-repository 的连接信息中无连接口令配置,表示 powa-repository 对于 PoWA-collector 的连接配置项必须为 trust,存在安全风险。在 PoWA-web 配置文件中,可选配置 username、password 对应 powa-repository(远程模式)或者数据库实例(本地模式)的 root 用户及连接口令,并且以明文形式存储,存在安全风险。
杜绝 PoWA 的风险及影响的措施
以下是杜绝 PoWA 的风险及影响的建议:
- 检查 pg_hba.conf 文件,设置只容许相关网段的连接。不允许用户从外网直接访问 PoWA。
- 不允许用户从外网直接访问 PostgreSQL。
- 在 HTTPS 服务器上运行 PoWA 并禁用 HTTP 访问。
- 使用 SSL 保护 GUI 和 PostgreSQL 之间的连接,拒绝 GUI 和 PostgreSQL 之间不受保护的连接。
- 建议手动授权专用角色查看 powa 数据库中的数据。
- 建议使用依赖其他 libpq 身份验证方法,杜绝纯文本密码存储,其身份验证方法详见官档 https://www.postgresql.org/docs/current/auth-methods.html。
以上是 PoWA 的介绍和相关风险及影响、措施的建议。下篇文章将介绍 PoWA-collector、PoWA-web 的安装使用及性能指标等的介绍。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6362.html
