更新时间:2024-11-12 GMT+08:00
分享

Global Plsql Cache特性函数

  • invalidate_plsql_object(),invalidate_plsql_object(schema, objname, objtype);

    描述:失效Global Plsql Cache全局缓存中的对象,仅在enable_global_plsqlcache = on时可用。调用该函数的用户需要具有SYSADMIN权限。

    参数:该函数为重载函数。当无入参时,将所有DATABASE内的所有全局缓存对象失效。

    当指定schema、objname、objtype三个参数时可将当前DATABASE内的指定全局缓存对象失效。其中:schema为对象所属的schema名称;objname为对象名称;objtype为对象类型,对象为package类型时值为“package”,对象为函数或存储过程时值为“function”。

    示例:

    该函数不返回失效结果,可通过gs_glc_memory_detail视图查询,对象未被失效时可在视图中查找到对应的valid状态的行,失效后则没有对应的valid状态行。

    invalidate_plsql_object所属的Schema为pg_catalog,但不指定Schema也可调用该函数。

    --创建一个包pkg1和函数f2,查询视图缓存信息,状态为valid。
    gaussdb=# CREATE SCHEMA testInvalidate;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA TO testInvalidate;
    SET
    gaussdb=# CREATE OR REPLACE PACKAGE pkg1 AS
    gaussdb$#     var1 VARCHAR;
    gaussdb$# FUNCTION f1() RETURN VARCHAR;
    gaussdb$# END pkg1;
    gaussdb$# /
    CREATE PACKAGE
    gaussdb=# CREATE OR REPLACE PACKAGE BODY pkg1 AS
    gaussdb$#   FUNCTION f1() RETURN VARCHAR
    gaussdb$#   IS
    gaussdb$#   BEGIN
    gaussdb$#     var1 := '2';
    gaussdb$# RETURN var1;
    gaussdb$#   END;
    gaussdb$# END pkg1;
    gaussdb$# /
    CREATE PACKAGE BODY
    gaussdb=# CREATE OR REPLACE FUNCTION f2() RETURN VARCHAR
    gaussdb-# IS
    gaussdb$# DECLARE
    gaussdb$# var2 VARCHAR := 'li2';
    gaussdb$# BEGIN
    gaussdb$#   var2='22';
    gaussdb$#   RETURN var2;
    gaussdb$# END
    gaussdb$# /
    CREATE FUNCTION
    gaussdb=# CALL pkg1.f1();
     f1 
    ----
     2
    (1 row)
    gaussdb=# CALL f2();
     f2 
    ----
     22
    (1 row)
    gaussdb=# SELECT * FROM gs_glc_memory_detail WHERE schema = 'testinvalidate';
     contextname  | database |     schema     | type | status |       location       | env | usedsize | usecount |  oid  | isspec |           searchpath           | invalidreason 
    --------------+----------+----------------+------+--------+----------------------+-----+----------+----------+-------+--------+--------------------------------+---------------
     GLC_PKG_pkg1 | postgres | testinvalidate | pkg  | valid  | in_global_hash_table |   0 |    19856 |        1 | 16755 | f      | addUser: false, schemas: 16754 | valid
     GLC_FUNC_f1  | postgres | testinvalidate | func | valid  | in_global_hash_table |   0 |    10840 |        1 | 16756 |        | addUser: false, schemas: 16754 | valid
     GLC_FUNC_f2  | postgres | testinvalidate | func | valid  | in_global_hash_table |   0 |    12072 |        1 | 16757 |        | addUser: false, schemas: 16754 | valid
    (3 rows)
    --调用函数,指定schema、函数名、类型即可将pkg1失效,再次查询视图,则没有pkg1对应的valid状态行
    gaussdb=# SELECT invalidate_plsql_object('testinvalidate','pkg1','package');
     invalidate_plsql_object 
    -------------------------
    (1 row)
    --如果要失效function,参数如下所示
    gaussdb=# SELECT invalidate_plsql_object('testinvalidate','f2','function');
     invalidate_plsql_object 
    -------------------------
    (1 row)
    --调用时没有入参,则将失效所有缓存对象
    gaussdb=# SELECT invalidate_plsql_object();
     invalidate_plsql_object 
    -------------------------
    (1 row)
  • gs_plsql_memory_object_detail(db_oid, obj_oid, obj_type)

    描述:获取存储过程创建的package、function的主要有效内存占用情况。enable_global_plsqlcache = off时该函数显示当前session中的存储过程内存情况,跨session查询暂不支持。调用该函数的用户需要有SYSADMIN权限。

    参数:该函数需传入db_oid、obj_oid、obj_type三个参数,如传入参数不匹配,返回空行。具体参数说明见表1。其中db_oid、obj_oid传入0为默认查找cache中所有package、function的有效内存使用情况。

    返回值类型:Tuple

    表1 gs_plsql_memory_object_detail参数说明

    参数列表

    类型

    描述

    取值范围

    db_oid

    uint32

    查询数据库oid为db_oid内存储的存储过程的主要有效内存占用情况。0默认为当前缓存中全部数据库实例。

    0 - 2^32-1。

    obj_oid

    uint32

    查询object的oid。0默认为当前缓存中全部pkg与function。

    0 - 2 ^32-1。

    obj_type

    text

    查询object的类型,标识查询目标object为package或function。

    • all:默认全部查询。
    • pkg:查询满足条件的package有效内存占用。
    • func:查询满足条件的function有效内存占用。
    • func_in_pkg:查询满足条件的package中的function的 有效内存占用。

    gs_plsql_memory_object_detail函数显示数据库内满足查询条件的有效内存占用情况说明如表2所示。

    表2 gs_plsql_memory_object_detail返回值

    名称

    类型

    描述

    object_oid

    uint32

    查询内存对象的oid。

    context_name

    text

    内存对象名。

    item

    text

    查询内存对象项目名。

    searchpath

    text

    内存对象访问编译产物的Schema及其他环境变量。

    guc

    uint64

    创建对象时的环境参数,即behavior_compat_flags的值。

    file

    text

    内存对象创建所在文件。

    line

    uint32

    内存对象创建所在文件行数。

    size

    uint32

    内存对象大小。

    db_oid

    uint32

    查询内存对象所在数据库oid。

    示例:

    --如下用例构造当enable_global_plsqlcache = on时,创建package和function,调用gs_plsql_memory_object_detail获取内存使用占用的情况。
    
    gaussdb=# CREATE OR REPLACE PACKAGE my_package AS
    gaussdb$#   PROCEDURE public_proc(a int, b int);
    gaussdb$# END my_package;
    gaussdb$# /
    CREATE PACKAGE
    gaussdb=# CREATE OR REPLACE PACKAGE BODY my_package AS
    gaussdb$#   PROCEDURE public_proc(a int, b int) AS
    gaussdb$#   BEGIN
    gaussdb$#     RAISE NOTICE 'a + b = %', a + b;
    gaussdb$#   END;
    gaussdb$# END my_package;
    gaussdb$# /
    CREATE PACKAGE BODY
    gaussdb=# BEGIN
    gaussdb$#   my_package.public_proc(2, 3);
    gaussdb$# END;
    gaussdb$# /
    NOTICE:  a + b = 5
    CONTEXT:  SQL statement "CALL my_package.public_proc(2,3)"
    PL/pgSQL function inline_code_block line 2 at PERFORM
    ANONYMOUS BLOCK EXECUTE
    gaussdb=# SELECT * FROM gs_plsql_memory_object_detail(0,16716,'pkg');
     object_oid |    context_name    |    item     |          searchpath           |       guc       |      file      | line | size | db_oid 
    ------------+--------------------+-------------+-------------------------------+-----------------+----------------+------+------+--------
          16716 | GLC_PKG_my_package | pkg         | addUser: false, schemas: 2200 | 303465209266176 | pl_package.cpp | 1143 | 1096 |  14584
          16716 | GLC_PKG_my_package | invalItems  | addUser: false, schemas: 2200 | 303465209266176 | NA             |    0 |    0 |  14584
          16716 | GLC_PKG_my_package | proc_list   | addUser: false, schemas: 2200 | 303465209266176 | list.cpp       |  110 | 3168 |  14584
          16716 | GLC_PKG_my_package | ndatums     | addUser: false, schemas: 2200 | 303465209266176 | pl_package.cpp | 1342 |    8 |  14584
          16716 | GLC_PKG_my_package | GSPLSQLType | addUser: false, schemas: 2200 | 303465209266176 | NA             |    0 |    0 |  14584
          16716 | GLC_PKG_my_package | namespace   | addUser: false, schemas: 2200 | 303465209266176 | pl_funcs.cpp   |  229 |  240 |  14584
    (6 rows)
    gaussdb=# SELECT * FROM gs_plsql_memory_object_detail(0,16717,'func');
     object_oid |     context_name     |    item    |          searchpath           |       guc       |     file     | line | size | db_oid 
    ------------+----------------------+------------+-------------------------------+-----------------+--------------+------+------+--------
          16717 | GLC_FUNC_public_proc | function   | addUser: false, schemas: 2200 | 303465209266176 | pl_comp.cpp  | 1538 | 1800 |  14584
          16717 | GLC_FUNC_public_proc | ndatums    | addUser: false, schemas: 2200 | 303465209266176 | pl_comp.cpp  | 2362 | 6072 |  14584
          16717 | GLC_FUNC_public_proc | invalItems | addUser: false, schemas: 2200 | 303465209266176 | NA           |    0 |    0 |  14584
          16717 | GLC_FUNC_public_proc | exprlist   | addUser: false, schemas: 2200 | 303465209266176 | list.cpp     |  110 |  320 |  14584
          16717 | GLC_FUNC_public_proc | StmtBlock  | addUser: false, schemas: 2200 | 303465209266176 | pl_gram.cpp  |  696 |  176 |  14584
          16717 | GLC_FUNC_public_proc | namespace  | addUser: false, schemas: 2200 | 303465209266176 | pl_funcs.cpp |  229 | 1152 |  14584
    (6 rows)

相关文档