了解统计信息
查询运行时,需要创建一个计划来决定如何访问数据。 例如,如果 SELECT 查询返回每一行,则使用索引没有好处,扫描整个表会更有效。 在这种情况下,规划查询是很简单的,但大多数查询计划并不像那么容易解决。
假设你在运行一个查询以搜索金额在 $10.00 到 $20.00 之间的每笔订单。 最初,我们不知道查询是否返回表中的所有数据,或者只返回一个小子集。 这一未知使得在看到数据之前很难规划查询策略。 如果我们知道该表包含的订单的购买价格介于 $1.00 到 $800.00 之间,索引可用于搜索少量的数据子集。 但是,可能没有足够的信息来生成正确的查询计划。 在此示例中,虽然订单的购买价格在 1.00 至 800.00 美元之间,但订单的 95 个% 介于 10.00 到 20.00 美元之间,但对数据的扫描实际上是最有效的计划。
使用前面的示例等方案,PostgreSQL 需要详细的统计信息才能使用最佳查询计划。
若要监视规划和执行统计信息,有一个名为 pg_stat_statements的 PostgreSQL 扩展。 默认情况下,pg_stat_statements 在 Azure Database for PostgreSQL 中启用,并允许 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 设置。
如果要关闭跟踪,请选择 NONE。
如需更加精确的跟踪,请选择 全部。
默认设置 TOP。
选择 保存。