PolarDB-O提供了Outline功能,用于抓取、查看和删除固定的执行计划。

功能介绍

执行计划管理SPM(SQL Plan Management)是一种预防性机制,可以使优化器自动管理执行计划,确保数据库仅使用已知或经过验证的计划。

Outline是SPM的子集,仅支持固定执行计划,不支持演进执行计划。目前PolarDB的Outline功能仅支持固定PREPARE类型语句的执行计划。

PolarDB的Outline功能是通过polar_outline插件实现的,如需使用请提交工单联系技术支持进行开启。

创建插件

创建插件语句如下:

CREATE EXTENSION polar_outline;

配置参数

打开Outline固定执行计划功能,开启语句如下:

SET polar_outline.use_stored_plan TO ON;

由于Outline定义的函数和关系(Relation)都在polar_outline这个schema下,为了方便使用,您可以通过如下语句设置路径。

SET search_path To "$user",public,polar_outline;

准备测试数据

创建表t,并在表中插入数据。语句如下:

CREATE TABLE t(a INT,b INT);
INSERT INTO t SELECT i, i FROM generate_series(1, 1000)i;

更新表数据以确保优化器使用的统计信息正确。

ANALYZE t;

执行一个PREPARE类型的语句。

PREPARE test AS SELECT * FROM t WHERE a=$1;
说明

测试数据仅适用于本文中的示例,实际使用中请根据您的实际情况进行调整。

抓取和固定执行计划

目前PolarDB提供了两种方法来抓取和固定执行计划,分别如下:

  • 使用polar_outline_create函数抓取执行计划(推荐使用),语句如下:
    SELECT polar_outline_create('EXECUTE test(100)');

    返回信息如下:

     polar_outline_create 
    ----------------------
     t
    (1 row)
  • 使用执行计划抓取功能,该方法更适合批量抓取执行计划,操作方式如下:
    注意 开启执行计划抓取功能会导致计划缓存(plancache)
    1. 开启抓取执行计划功能,语句如下:
      SET polar_outline.capture_plan TO ON;
    2. 抓取执行计划,语句如下:
      EXECUTE test(100);

      返回信息如下:

        a  |  b
      -----+-----
       100 | 100
      (1 row)
    3. 关闭抓取执行计划功能,语句如下:
      SET polar_outline.capture_plan TO OFF;