VastbaseG100

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

Menu

查询缓存函数

新增内置函数

vb_result_cache_status

功能描述: 查看查询缓存的状态。

入参:

输出:

  • ACTIVE: 查询缓存特性是激活的。

  • DISABLED:查询缓存特性是不可用的。

示例

1、设置GUC参数。

alter system set enable_global_result_cache to on;
alter system set result_cache_max_size to 409600000;
alter system set result_cache_max_result to 10;

2、重启数据库。

vb_ctl restart;

3、查看查询缓存的状态。

select vb_result_cache_status();

结果显示为:

 vb_result_cache_status
------------------------
 active
(1 row)

4、手动修改配置文件将步骤1中开启的查询缓存相关三个参数注释掉并重启数据库。

vi postgresql.conf

5、查看查询缓存的状态。

select vb_result_cache_status();

结果显示为如下:

 vb_result_cache_status
------------------------
 invalid
(1 row)

vb_result_cache_memory_report

功能描述: 列出结果缓存内存利用的一个概要(默认)或详细的报表。

入参:

输出:

  • TotalMemory

    查询缓存总共可用内存(字节)。

  • UsedMemory

    查询缓存当前已用内存(字节)。

  • CacheCo

    当前缓存个数。

  • MaxCacheSize

    当前缓存中使用的最大内存(字节)。

示例

参见查询缓存的示例1

vb_result_cache_flush

功能描述:清理整个查询缓存,清理期间,查询缓存不可用。

入参:

输出: 清理结果

示例

参见查询缓存的示例3

vb_result_cache_invalidate

功能描述: 使指定缓存失效。

入参: cache_id

cache_id可通过函数vb_result_cache_items查询得到。

输出: 清理结果。

示例

1、设置GUC参数。

alter system set enable_global_result_cache to on;
alter system set result_cache_max_size to 409600000;
alter system set result_cache_max_result to 10;

2、重启数据库。

vb_ctl restart;

3、使用vsql重新连接数据库后,创建测试表并插入数据。

CREATE TABLE employees (
emp_no int NOT NULL,
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL);

CREATE TABLE dept_emp (
emp_no int NOT NULL,
dept_no char(4) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL);

INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28');
INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01');
INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12');
INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02');
INSERT INTO employees VALUES(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10');
INSERT INTO employees VALUES(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15');
INSERT INTO employees VALUES(10009,'1952-04-19','Sumant','Peac','F','1985-02-18');
INSERT INTO employees VALUES(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24');
INSERT INTO employees VALUES(10011,'1953-11-07','Mary','Sluis','F','1990-01-22');
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d004','1995-12-03','9999-01-01');
INSERT INTO dept_emp VALUES(10004,'d004','1986-12-01','9999-01-01');
INSERT INTO dept_emp VALUES(10005,'d003','1989-09-12','9999-01-01');
INSERT INTO dept_emp VALUES(10006,'d002','1990-08-05','9999-01-01');
INSERT INTO dept_emp VALUES(10007,'d005','1989-02-10','9999-01-01');
INSERT INTO dept_emp VALUES(10008,'d005','1998-03-11','2000-07-31');
INSERT INTO dept_emp VALUES(10009,'d006','1985-02-18','9999-01-01');
INSERT INTO dept_emp VALUES(10010,'d005','1996-11-24','2000-06-26');
INSERT INTO dept_emp VALUES(10010,'d006','2000-06-26','9999-01-01');

4、设置参数result_cache_mode为force并查询表

set result_cache_mode=force;

select *
from employees
where not exists
(
select emp_no
from dept_emp
where employees.emp_no=dept_emp.emp_no
);

结果返回为如下:

 emp_no |     birth_date      | first_name | last_name | gen
der |      hire_date
--------+---------------------+------------+-----------+----
----+---------------------
  10011 | 1953-11-07 00:00:00 | Mary       | Sluis     | F
    | 1990-01-22 00:00:00
(1 row)

5、查看缓存状态。

select * from pg_catalog.vb_result_cache_items();
select * from vb_result_cache_memory_report;

返回结果为如下:

 cache_id |              query_string              | ref_cou
nt
----------+----------------------------------------+--------
---
        1 | select *                              +|
 2
          | from employees                        +|
          | where not exists                      +|
          | (                                     +|
          | select emp_no                         +|
          | from dept_emp                         +|
          | where employees.emp_no=dept_emp.emp_no+|
          | );                                     |
(1 row)

 TotalMemory | UsedMemory | ElementCount | MaxResultSize
-------------+------------+--------------+---------------
   409600000 |         56 |            1 |            56
(1 row)

5、使用函数清除缓存。其中vb_result_cache_invalidate的入参cache_id从步骤4中的返回结果中获取。

select vb_result_cache_invalidate('1');
select * from pg_catalog.vb_result_cache_items();
select * from vb_result_cache_memory_report;

返回结果为如下,查询pg_catalog.vb_result_cache_items()结果为0,清理缓存成功:

 vb_result_cache_invalidate
----------------------------

(1 row)

 cache_id | query_string | ref_count
----------+--------------+-----------
(0 rows)

 TotalMemory | UsedMemory | ElementCount | MaxResultSize
-------------+------------+--------------+---------------
   409600000 |          0 |            0 |             0
(1 row)

vb_result_cache_items

功能描述: 查询已经生效的缓存的相关信息。

入参:

输出:

  • cache_id

    缓存id。

  • query_string

    语句字符串。

  • ref_count

    对于缓存的引用计数。

示例

参见vb_result_cache_flush的示例

vb_result_cache_items_debug

功能描述: 查询已经生效的缓存的相关信息,此函数不建议用户使用,其本质属于额外辅助信息的输出,不推荐用户使用此函数的返回内容作为评判依据,建议使用vb_result_cache_items

入参:

输出:

  • cache_id

    缓存id。

  • query_string

    语句字符串。

  • ref_count

    对于缓存的引用计数。

  • Querycache_id

    查询树的hash值。

  • Bucket_no

    缓存对应的hash桶下标。

vb_result_cache_items_debug2

功能描述: 查询已经生效的缓存的相关信息,此函数不建议用户使用,其本质属于额外辅助信息的输出,不推荐用户使用此函数的返回内容作为评判依据,建议使用vb_result_cache_items

入参:

输出:

  • cache_id

    缓存id。

  • ref_count

    对于缓存的引用计数。