作为一个不断发展的开源数据库,PostgreSQL 在过去几年中不断扩展其监控和可观察性功能,以便更好地了解数据库性能。这些增强功能(在最新的 PostgreSQL 16 版本中尤为显著)突显了社区致力于提供强大的、用户友好的监控解决方案的承诺,这些解决方案能够跟上数据库管理日益增长的复杂性。
在这篇博文中,我们将介绍 PostgreSQL 16 中最新的数据库监控改进,并介绍一种更好、更精细的方法来查看查询性能,以便快速找到加快数据库速度的新方法。
PostgreSQL 16 中引入了 pg_stat_io,这是数据库监控功能向前迈进的一步。此功能与其前身有很大不同,它提供了对 I/O 操作的更精细、更全面的视图。
以下结果给出了 pg_stat_io 视图
timescale=# \d pg_stat_io
View "pg_catalog.pg_stat_io"
Column | Type | Collation | Nullable | Default
----------------+--------------------------+-----------+----------+---------
backend_type | text | | |
object | text | | |
context | text | | |
reads | bigint | | |
read_time | double precision | | |
writes | bigint | | |
write_time | double precision | | |
writebacks | bigint | | |
writeback_time | double precision | | |
extends | bigint | | |
extend_time | double precision | | |
op_bytes | bigint | | |
hits | bigint | | |
evictions | bigint | | |
reuses | bigint | | |
fsyncs | bigint | | |
fsync_time | double precision | | |
stats_reset | timestamp with time zone | | |
pg_stat_io
将数据细分为每个后端类型和目标 I/O 对象的详细统计信息。这种特性使您能够访问涵盖读/写操作、这些操作的时间分配以及共享缓冲区中命中和逐出的复杂性的丰富数据集。例如,pg_stat_io
允许全局评估 VACUUM 操作的影响。您可以通过关注与自动清理工作进程后端类型关联的条目来了解 VACUUM 进程如何影响系统。
timescale=# SELECT * FROM pg_stat_io WHERE backend_type = 'autovacuum worker';
backend_type | object | context | reads | read_time | writes | write_time | writebacks | writeback_time | extends | extend_time | op_bytes | hits | evictions | reuses | fsyncs | fsync_time |
stats_reset
-------------------+----------+----------+-------+-----------+--------+------------+------------+----------------+---------+-------------+----------+-------+-----------+--------+--------+------------+-----
--------------------------
autovacuum worker | relation | bulkread | 0 | 0 | 0 | 0 | 0 | 0 | | | 8192 | 0 | 0 | 0 | | | 2023
-12-07 06:40:17.439866+00
autovacuum worker | relation | normal | 247 | 0 | 0 | 0 | 0 | 0 | 8 | 0 | 8192 | 19034 | 0 | | 0 | 0 | 2023
-12-07 06:40:17.439866+00
autovacuum worker | relation | vacuum | 146 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8192 | 111 | 0 | 109 | | | 2023
-12-07 06:40:17.439866+00
(3 rows)
`pg_stat_io` 对大规模数据库操作的潜在影响非常大。如果您尝试微调 PostgreSQL 性能,此功能可以更深入地了解处理大量数据和复杂事务的数据库的 I/O 模式和瓶颈。这种级别的详细信息对于在高要求环境中调整数据库性能至关重要,允许更精确的资源分配和优化策略。
但是,如果您想更仔细地查看数据库查询怎么办?🔎
在 Timescale,我们是 PostgreSQL 监控工具的重度用户。因此,我们默认在所有 Timescale 服务中启用了pg_stat_statements(一个记录有关正在运行的查询的信息的 PostgreSQL 扩展)。
此 PostgreSQL 扩展对于识别缓慢或有问题的查询至关重要。它提供了有关查询执行时间和命中缓存比率的详细数据,这些数据对于分析长时间运行的查询和经常需要磁盘存储访问的查询(PostgreSQL 本机工具可能无法胜任的领域)至关重要。
但是,pg_stat_statements 仍然不足以让我们深入了解我们想要的查询。此外,该扩展不会记录长时间运行的查询的信息,并且仅限于 PostgreSQL 级别的详细信息,这意味着来自其他扩展的任何有用信息都会被遗漏。
为了补充 PostgreSQL 的本机监控工具,我们引入了Insights,这是我们用于深入数据库查询分析的创新解决方案。Insights 超越了 PostgreSQL 的传统监控功能,允许您观察长时间运行的数据库查询。
借助 Insights,您可以比以往更深入地了解时间、延迟和内存使用情况的关键统计信息,以 PostgreSQL 无法比拟的精度观察长时间运行的数据库查询。
该工具能够跟踪查询性能随时间的演变,这为数据库监控增添了动态维度。您可以利用它来识别趋势、预测未来的性能问题并实施主动措施。这在工作负载波动或数据库频繁更改的环境中特别有用。
而且,在这种特殊情况下,我们说到做到:这不仅是因为我们通过内部使用自己的产品来构建 Insights——您可以阅读我们如何将 PostgreSQL 扩展到 350 TB+ 以实现这一目标的故事——还因为它帮助我们找到了自己解决方案中的一个错误,这充分证明了它的有效性。
使用 Insights 分析热门查询
使用 Insights 深入分析查询
通过将两者合并,我们的目标是使 PostgreSQL 数据库监控尽可能方便。如前所述,我们通过默认激活 pg_stat_statements 来简化您的设置过程。这意味着您可以立即访问全面的监控功能,从而简化识别和解决性能瓶颈的途径。然后,在 Timescale 控制台中,您可以使用 Insights 详细视图来实现更高的粒度并改进您的可观察性工作。
PostgreSQL 16 中的增强功能,尤其是 pg_stat_io
视图,代表了数据库监控方面的重大进步,可以让您更深入地了解数据库的内部工作机制。
作为对这些改进的补充,Timescale 的 Insights 以及 pg_stat_statements
的集成在数据库分析中提供了无与伦比的细节和粒度。现在您可以快速识别性能瓶颈,请查看我们有关提高 PostgreSQL 性能的完整指南。从确定数据库大小到设计模式,您都将找到加速数据库性能的最佳实践。
作者:Abhinav D. 和 Ana Tavares