了解统计信息
当查询运行时,它需要创建一个计划来决定如何访问数据。 例如,如果 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_statements
如果查询是唯一的,并且不定期重复相同的查询,那么历史查询数据就不那么有用了。 此外,如果不使用“pg_stat”视图,它们不会带来任何好处。 维护“pg_stat_statements”会产生高达 50% 的开销,在这些场景中可以关闭对“pg_stat_statements”的跟踪。
要关闭对“pg_stat_statements”的跟踪,请执行以下步骤:
转到 Azure 门户并选择 Azure Database for PostgreSQL 服务器。
选择“服务器参数”并导航到“pg_stat_statements.track”设置。
如果想关闭跟踪,请选择“无”。
如需更精确的跟踪,请选择“全部”。
默认设置为“最多”。
选择“保存”。