数据库性能

PostgreSQL 扩展:pg_stat_statements

pg_stat_statements 是一个强大的 PostgreSQL 扩展,它提供了一种方法来跟踪服务器执行的所有 SQL 语句的执行统计信息。此扩展对于开发人员非常有用,因为它有助于识别 PostgreSQL 数据库中的性能问题。它跟踪每个查询的频率、执行时间和其他有价值的统计信息,从而使开发人员能够优化数据库性能。

安装 pg_stat_statements 扩展

在使用 pg_stat_statements 扩展之前,您需要安装它。以下是方法:

1. 首先,确保您的 PostgreSQL 版本中可用该扩展。您可以通过运行以下命令来检查:


SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements';

如果您的 PostgreSQL 版本中没有该扩展,您应该真正升级 - 它早在 PostgreSQL 9.0 之前就已经捆绑在一起了。如果您需要帮助确定升级 PostgreSQL 的最佳实践,请查看此博客文章

2. 如果该扩展可用,您需要先将其加载到 postgresql.conf 中的 shared_preloaded_libraries,因为它需要额外的共享内存。如果您使用的是Timescale,您可以简单地跳过此步骤,因为该扩展已经预先加载。如果您没有使用 Timescale,您可以通过运行以下命令来安装它:


CREATE EXTENSION pg_stat_statements;

请注意,您需要超级用户权限才能在 PostgreSQL 中安装扩展。

使用 pg_stat_statements 扩展

安装后,pg_stat_statements 会自动开始跟踪查询。您可以通过查询 pg_stat_statements 视图来查看统计信息。以下是一个简单的示例

SELECT
    query,
 calls,
    total_exec_time,
rows,
    100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 5;

此查询返回总执行时间最长的前五个查询。

pg_stat_statements 扩展的时间序列用例

pg_stat_statements 在时间序列数据库中特别有用,因为在时间序列数据库中查询性能至关重要。通过跟踪查询性能随时间的变化,开发人员可以识别缓慢的查询并优化它们以获得更好的性能。这在时间序列数据库中至关重要,因为数据会持续不断地被摄取和查询。

将 pg_stat_statements 与 Timescale 和时间序列数据一起使用

如果您使用的是 Timescale(高性能、时间序列 PostgreSQL++ 云数据库),您可以使用pg_stat_statements 来监控查询性能。PostgreSQL 扩展在所有 Timescale 服务中默认启用,会自动跟踪查询。然后,您可以查询pg_stat_statements 视图来分析时间序列查询的性能。

✨ 编辑注:如果您希望以便捷易用的方式查看更多洞察,那么尝试 Timescale(免费试用 30 天)值得考虑 - 我们在 UI 控制台中提供了有关您的查询性能的直观信息。

请记住,优化数据库性能是一个迭代和持续的过程。定期使用pg_stat_statements 监控查询性能,并进行必要的优化,以确保时间序列数据库平稳运行。

访问我们的博客以了解如何识别缓慢的查询和其他性能问题,以及如何使用 pg_stat_staments 进行数据库和查询的特定时间点监控