SQL 计划管理
本文解释了什么是 SQL 计划管理,并描述了如何使用此功能。
概述
SPM(SQL 计划管理,SQL Plan Management)是 MAXIR 提供的一项功能,旨在确保 SQL 查询计划的稳定性。允许你将一个 SQL 命令(称为源 SQL 命令)绑定到另一个 SQL 命令(称为目标 SQL 命令)。源 SQL 命令和目标 SQL 命令之间的关联被定义为 SQL 绑定 (SQL Binding)。启用 SPM 后,每次发布源 SQL 命令运行时,MAXIR 运行目标 SQL 命令。
目前,只有
SELECT可以同时作为源 SQL 命令和目标 SQL 命令。
创建 SQL 绑定
要使用 SPM 功能,你必须至少有一个 SQL 绑定。
语法
CREATE BINDING FOR '<source_sql>' USING STMT '<destination_sql>';在此语法中,
<source_sql>:一个字符串,指定源 SQL 命令。<destination_sql>:一个字符串,指定目标 SQL 命令。
确保
<source_sql>和<destination_sql>的值均符合 SELECT 语法。
示例
创建一个 SQL 绑定,指导 MAXIR 在有人尝试运行 SELECT orders_delivered FROM sales 时运行 SELECT orders_delivered FROM sales:
CREATE BINDING FOR 'SELECT orders_closed FROM sales' USING STMT 'SELECT orders_delivered FROM sales';检查 SQL 绑定
MAXIR 将关于 SQL 绑定的信息存储在 pg_catalog.maxir_spm_info 表中。要检查 SQL 绑定,你可以运行 SELECT * FROM pg_catalog.maxir_spm_info。
要访问
pg_catalog.maxir_spm_info表中的数据,你必须使用实用程序模式连接到 MAXIR。
下图显示了表结构。
在这个表中,
-
original_query_id:一个整数,表示 SQL 绑定适用的查询的 ID。 -
original_sql:一个字符串,表示源 SQL 命令。 -
bind_sql:一个字符串,表示目标 SQL 命令。 -
constant_size:一个整数,表示源 SQL 命令中的常数数量。 -
constant_list:源 SQL 命令中的常数列表。 -
enabled:一个布尔值,表示 SQL 绑定的状态。
其他参数保留用于未来的扩展,可以忽略。
修改 SQL 绑定
创建 SQL 绑定后,你可以在 pg_catalog.maxir_spm_info 表中更新其设置。
语法
UPDATE <table_name> SET <config_param_to_update> = <new_value>[, ... ] WHERE <config_param> = <value>[, ... ];在此语法中,
-
<table_name>:存储 SQL 绑定设置的表。它固定为pg_catalog.maxir_spm_info。 -
<config_param_to_update>:你想要更改值的配置参数。 -
<new_value>:配置参数的新值。 -
<config_param>:你指定的用于识别 SQL 绑定的配置参数。必须指定
original_query_id和original_sql中的至少一个。最好使用original_query_id。这是因为original_sql的值是区分大小写的,并且必须严格符合格式要求。SPM 允许一个 SQL 命令绑定到多个 SQL 命令,也允许重复的 SQL 绑定。因此,如果你在
DELETE命令中只指定了一个original_query_id或original_sql,所有具有相同original_query_id或original_sql的 SQL 绑定都将被删除。我们建议你指定尽可能多的配置参数,以帮助唯一地识别你想要删除的绑定。要检查 SQL 绑定的配置设置,参见 [检查 SQL 绑定](#检查 SQL 绑定)。 -
<value>:配置参数的当前值。
!> 我们建议你使用此语法仅更改 enabled 参数。更改其他参数的值可能会导致意外错误。
示例
禁用源 SQL 命令为 SELECT orders_closed FROM sales 的 SQL 绑定:
UPDATE pg_catalog.maxir_spm_info SET enabled = false WHERE original_sql = 'SELECT orders_closed FROM sales';使用 SQL 绑定
要使用 SQL 绑定,你必须确保已为绑定或所有绑定启用 SPM。
为特定 SQL 绑定启用 SPM
要启用特定的 SQL 绑定,你需要在 pg_catalog.maxir_spm_info 中将其 enabled 的值更改为 true。
例如,启用源 SQL 命令为 SELECT orders_closed FROM sales 的 SQL 绑定:
UPDATE pg_catalog.zdb_spm_info SET enabled = true WHERE original_sql = 'SELECT orders_closed FROM sales';有关语法的更多信息,参见 [修改 SQL 绑定](#修改 SQL 绑定)。
为所有 SQL 绑定启用 SPM
MAXIR 使用 maxir.spm_enable 变量来控制 SQL 功能。要为所有 SQL 绑定启用 SPM,将 maxir.spm_enable 设置为 true,例如:
SET maxir.spm_enable = on;值
on可以是 MAXIR 中表示 true 的任何值。