您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

SQLScript 变量缓存

描述

SQLScript 数据缓存通过利用与分配给 SELECT 查询的表变量相对应的缓存中间结果数据来提高性能。

它主要用于在计算存储分离体系结构中存储从分布式查询处理获取的中间结果。

语法

语法

CREATE PROCEDURE  [()] [LANGUAGE ]

[SQL SECURITY ] [DEFAULT SCHEMA ] [READS SQLDATA] []

[] AS

BEGIN [SEQUENTIAL EXECUTION] END

CREATE FUNCTION [()]

RETURNS [LANGUAGE ]

[SQL SECURITY ] [DEFAULT SCHEMA ] []

[] AS

BEGIN END

语法元素

 ::= VARIABLE CACHE ON

::= ENABLE | DISABLE | AUTOMATIC

::= [, …]

::= ( )

::= |

::=

::=

::= [, …]

::= [, …]

::= |

::=

::=

::= PROCEDURE | FUNCTION

-- Add new variables

ALTER ADD

-- Remove variables

ALTER DROP

-- Remove all variables

ALTER DROP VARIABLE CACHE ALL

-- Change enable mode of existing variables

ALTER ALTER

配置

变量缓存模式

所有表变量(不含指定的缓存模式)都可以分配到具有以下配置的变量缓存。

ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'system') SET ('sqlscript','variable_cache_default_mode') = 'enable|disable|automatic' WITH RECONFIGURE;

在变量缓存模式下自动指定

当满足以下格式的配置中指定的阈值时,会缓存缓存缓存模式为自动缓存的表变量。

LOAD_TIME:语句执行 + ITAB(中间结果)实现

ITAB_SIZE:已实现 ITAB 的大小(中间结果)

ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'system') SET ('sqlscript','variable_cache_automatic_config') = ' {"LOAD_TIME": , "ITAB_SIZE":  }' WITH RECONFIGURE;

示例

示例代码create table mytab1(a int);insert into mytab1 values(1);create table mytab2(b int);insert into mytab2 values(2);create table mytab3(c int);insert into mytab3 values(3); drop procedure myproc;create procedure myprocas begin a = select * from mytab1; b = select * from mytab2; c = select * from mytab3; select * from :a, :b, :c;end; call myproc; -- disabled cachealter procedure myproc add variable cache on A enable,B enable;call myproc; -- 1st run, cache miss and store results for a and bcall myproc; -- 2nd run, cache hit a and binsert into mytab1 values (11); -- invalidate cache for mytab1call myproc; -- 3rd run, cache miss for a, and hit for balter procedure myproc drop variable cache on C;call myproc; -- disabled cache

支持性

系统视图/监控视图

SQLSCRIPT_VARIABLE_CACHE:指示要缓存的变量的视图

列名称数据类型描述SCHEMA _NAMENVARCHAR(256)目标对象的模式OBJECT_ NAMENVARCHAR(256)目标对象名称OBJECT_TYPEVARCHAR(16)对象类型("PROCEDURE" 或 "FUNCTION")VARIABLE _NAMENVARCHAR(256)要缓存的变量名称VARIABLE_TYPEVARCHAR(16)变量类型(“TABLE”)ENABLE_MODEVARCHAR(16)激活模式(“已启用”、“已禁用”或“自动”) 

M_SQLSCRIPT_ VARIABLE _CACHE:监控视图预测当前缓存变量的统计

列名称数据类型描述主机VARCHAR(64)缓存数据所在的节点的主机。PORT整数缓存数据所在的节点端口SCHEMA_NAMENVARCHAR(256)目标对象的模式OBJECT_NAMENVARCHAR(256)目标对象名称OBJECT_TYPEVARCHAR(16)对象类型("PROCEDURE" 或 "FUNCTION")VARIABLE_NAMENVARCHAR(256)要缓存的变量名称VARIABLE_TYPEVARCHAR(16)变量类型(“TABLE”)SQLSCRIPT_PLAN_ID整数SQLScript 执行计划的标识SQLSCRIPT_OPERATOR_ID整数SQLScript 运算符标识MEMORY_SIZE整数缓存变量的内存大小CACHE_TIMESTAMP时戳生成最新缓存数据的日期和时间。 

范围

  • 仅支持缓存表变量。标量、数组和行类型变量无法高速缓存。

  • 可以缓存仅引用持久表或视图的 SELECT 语句的结果。

  • 无法高速缓存具有以下条件的 SELECT 语句:语句包含非确定性 SQL 函数:RAND、SYSUUID、CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、CURRENT_CONNECTION、CURRENT_USER、SESSION_CONTEXT语句包含加密函数:HASH_SHA256、HASH_MD5语句包含可在当前过程的其它语句中更新的表,这些表由 DDL/DML 语句引用,或者由未使用 READ SQL DATA 指定的过程的另一个 CALL 语句引用语句包含其他 SQLScript 变量

  • 语句包含非确定性 SQL 函数:RAND、SYSUUID、CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、CURRENT_CONNECTION、CURRENT_USER、SESSION_CONTEXT

  • 语句包含加密函数:HASH_SHA256、HASH_MD5

  • 语句包含可在当前过程的其它语句中更新的表,这些表由 DDL/DML 语句引用,或者由未使用 READ SQL DATA 指定的过程的另一个 CALL 语句引用

  • 语句包含其他 SQLScript 变量

  • 更新任何相关表时,缓存条目将失效。