VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

PL/SQL全局缓存

功能描述

Vastbase在Oracle兼容模式下支持PL/SQL全局缓存,实现在PL/SQL在编译过程中,在函数本身和某些依赖项没有发生改变的时候(即判断函数/包有效的情况下),编译得到的产物可以在全局重复使用。且全局缓存支持多会话并发使用。

  • PL/SQL全局缓存可通过如下参数控制:

    GUC参数 参数功能 参数介绍
    enable_plpgsql_global_compile_cache 开启全局缓存功能,若开启本参数,则对函数/包进行编译后,其将被放入全局缓存。修改重建函数/包后,其将在下一次检查编译时重新存入全局缓存。 参数为实例级别,默认值为off,修改后重启数据库生效。
    plpgsql_compile_cache_max_size 用于设置允许全局缓存的大小,当全局缓存达到内存上限时,将会进行缓存替换。 参数为实例级别,默认值为100000000,修改后重启数据库生效。
  • PL/SQL全局缓存可通过如下函数查看相关信息:

    函数名称 函数功能 调用语句
    pl_global_compile_cache_entrys 用于查询所有缓存项目的状态、哈希值、类型等信息。
    select * from pl_global_compile_cache_entrys();
    pl_global_compile_cache_status 用于统计当前全局缓存拥有的缓存项数量和占用内存的大小
    select * from pl_global_compile_cache_status();

注意事项

该功能仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。

示例

1、设置参数开启全局缓存功能。

修改如下参数后应重启数据库使其生效。

set enable_plpgsql_global_compile_cache=1;

2、创建函数,其中在一个函数中调用另一个函数。

create or replace FUNCTION sp_block7
(
MYINTEGER IN INTEGER ,
MYCHAR OUT VARCHAR2(200)
)
returns VARCHAR2(200)
AS $$
DECLARE
BEGIN
MYCHAR := 'sp_block is called';
raise info 'MYINTEGER is %', MYINTEGER;
RETURN ;
END;
$$LANGUAGE plpgsql;

create or replace FUNCTION sp_tempsp7()
returns INTEGER
AS $$
DECLARE
MYINTEGER INTEGER ;
MYCHAR VARCHAR2(20);
PSV_SQL VARCHAR2(200);
BEGIN
MYINTEGER := 1;
PSV_SQL := 'begin call sp_block7(:a,:b);end;';
EXECUTE IMMEDIATE PSV_SQL USING IN MYINTEGER, OUT MYCHAR;
raise info 'MYCHAR is %', MYCHAR;
RETURN 0;
END;
$$LANGUAGE plpgsql;

3、多次调用函数。

call sp_tempsp7();
call sp_tempsp7();
call sp_tempsp7();

返回结果均为如下:

INFO:  MYINTEGER is 1
CONTEXT:  SQL statement "call sp_block7(:a,:b)"
PL/pgSQL function inline_code_block line 1 at EXECUTE statement
PL/pgSQL function public.sp_tempsp7() line 9 at EXECUTE statement
INFO:  MYCHAR is sp_block is called
 sp_tempsp7
------------
          0
(1 row)

4、查看当前全局缓存函数拥有的缓存项数量和占用内存的大小(以用户实际情况为准)。

select * from pl_global_compile_cache_status();

返回结果为如下:

 total_memory | used_memory | entry_count
--------------+-------------+-------------
    100000000 |      218784 |           2
(1 row)

相关链接

Oracle兼容性参数