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)