通过


使用 pg_stat_statements 进行监视

重要

Lakebase 自动缩放在以下区域处于 Beta 版本:eastus2westeuropewestus

Lakebase 自动缩放是最新版本的 Lakebase,可自动缩放计算、缩放到零、分支和即时还原。 有关 与 Lakebase 预配的功能比较,请参阅 在版本之间进行选择

pg_stat_statements 是一个 Postgres 扩展,提供 Lakebase Postgres 数据库中 SQL 语句执行的详细统计视图。 它跟踪执行计数、总执行时间和平均执行时间等信息,帮助你分析和优化 SQL 查询性能。

何时使用pg_stat_statements

在需要时使用 pg_stat_statements

  • 详细的查询执行统计信息和性能指标
  • 识别缓慢或频繁执行的查询
  • 查询性能分析和优化见解
  • 数据库工作负荷分析和容量规划
  • 与自定义监视工具和仪表板集成

启用pg_stat_statements

pg_stat_statements 扩展在 Lakebase Postgres 中可用。 若要启用:

  1. 使用 SQL 编辑器或 Postgres 客户端连接到数据库。

  2. 运行以下 SQL 命令以创建扩展:

    CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
    
  3. 该扩展在创建后立即开始收集统计信息。

数据持久性

扩展收集的 pg_stat_statements 统计信息存储在内存中,在 Lakebase 计算暂停或重启时不会保留。 例如,如果计算资源因为不活动而缩减,则任何现有的统计信息都将丢失。 计算重启后会收集新的统计信息。

此行为意味着:

  • 计算重启或挂起后重置统计信息
  • 长时间运行的性能分析需要一致的计算可用性
  • 在计划内维护或重启之前,可能需要导出重要统计信息

注释

如果需要跨计算生命周期事件的历史性能数据,请考虑定期运行监视查询并在外部存储结果。

了解详细信息: Postgres 扩展

查询执行统计信息

启用扩展后,您可以使用 pg_stat_statements 视图查询执行统计信息。 此视图包含每个不同数据库查询的一行,其中显示了各种统计信息:

SELECT * FROM pg_stat_statements LIMIT 10;

该视图包含详细信息,例如:

用户ID dbid queryid 查询 calls
16391 16384 -9047282044438606287 SELECT * FROM 用户; 10

有关列和说明的完整列表,请参阅 PostgreSQL 文档

关键监视查询

使用这些查询分析数据库性能:

查找最慢的查询

此查询标识平均执行时间最高的查询,这可能指示需要优化的低效查询:

SELECT
    query,
    calls,
    total_exec_time,
    mean_exec_time,
    (total_exec_time / calls) AS avg_time_ms
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 20;

查找最常执行的查询

最常执行的查询通常是关键路径和优化候选项。 此查询包括缓存命中率,以帮助识别可能受益于更好的索引的查询:

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 calls DESC
LIMIT 20;

查找具有最高 I/O 的查询

此查询识别进行最多磁盘 I/O 操作的查询,这可能会影响数据库的整体性能。

SELECT
    query,
    calls,
    shared_blks_read + shared_blks_written AS total_io,
    shared_blks_read,
    shared_blks_written
FROM pg_stat_statements
ORDER BY (shared_blks_read + shared_blks_written) DESC
LIMIT 20;

查找最耗时的查询

此查询标识在所有运行中消耗最多总执行时间的查询:

SELECT
    query,
    calls,
    total_exec_time,
    mean_exec_time,
    rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

查找返回多行的查询

此查询识别了会返回大型结果集的查询,这些结果集可能受益于分页或筛选:

SELECT
    query,
    calls,
    rows,
    (rows / calls) AS avg_rows_per_call
FROM pg_stat_statements
ORDER BY rows DESC
LIMIT 10;

重置统计信息

重置由pg_stat_statements收集的统计信息:

注释

只有 databricks_superuser 角色具有执行此函数所需的权限。 使用 Lakebase 项目创建的默认角色和在 Lakebase App 中创建的角色被授予 databricks_superuser 角色的成员身份。

SELECT pg_stat_statements_reset();

此函数清除所有累积的统计数据,例如 SQL 语句的执行时间和计数,并开始收集新的数据。 当你希望重新开始收集性能统计信息时,它特别有用。

资源

了解详细信息: PostgreSQL 文档