查询缓存函数
新增内置函数
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
对于缓存的引用计数。