了解统计信息

已完成

当查询运行时,它需要创建一个计划来决定如何访问数据。 例如,如果 SELECT 查询返回每一行,则使用索引没有任何好处,扫描整个表会更有效。 在这种情况下,规划查询很简单,但大多数查询计划并不是那么容易。

想象这样一个场景,你正在运行一个查询,该查询搜索每个 $10.00 到 $20.00 之间的订单。 最初,我们不知道查询是返回表中的所有数据,还是只返回一小部分数据。 这种未知性使我们在看到数据之前很难规划查询策略。 如果我们知道该表包含的订单的采购价格介于 $1.00 到 $800.00 之间,则可使用索引搜索一小部分数据。 但是,可能仍然没有足够的信息来生成适当的查询计划。 在本示例中,虽然订单的采购价格在 $1.00 到 $800.00 之间,但 95% 的订单在 $10.00 到 $20.00 之间,扫描数据实际上是最有效的计划。

对于上一个示例这样的场景,PostgreSQL 需要详细的统计信息才能使用最佳查询计划。

为监视计划和执行统计信息,有一个名为“pg_stat_statements”的 PostgreSQL 扩展。 在 Azure Database for PostgreSQL 中默认启用“pg_stat_statements”,并允许“pg_read_all_stats”角色的成员使用多个“pg_stat”视图查询统计信息。 以下查询使用“pg_stat_activity”视图返回查询活动

SELECT * FROM pg_stat_activity;

pg_stat_activity 查询的屏幕截图。

关闭 pg_stat_statements

如果查询是唯一的,并且不定期重复相同的查询,那么历史查询数据就不那么有用了。 此外,如果不使用“pg_stat”视图,它们不会带来任何好处。 维护“pg_stat_statements”会产生高达 50% 的开销,在这些场景中可以关闭对“pg_stat_statements”的跟踪

要关闭对“pg_stat_statements”的跟踪,请执行以下步骤

  1. 转到 Azure 门户并选择 Azure Database for PostgreSQL 服务器。

  2. 选择“服务器参数”并导航到“pg_stat_statements.track”设置

    pg_statements 命令的屏幕截图。

  3. 如果想关闭跟踪,请选择“无”

  4. 如需更精确的跟踪,请选择“全部”

  5. 默认设置为“最多”

  6. 选择“保存”。