
# 缓存管理函数
9.1.1.100集群版本开始DWS支持缓存管理函数，缓存管理函数将缓存从共享缓冲区（shared buffer）中释放，可有效加速查询，优化数据库性能。
只有系统管理员可以执行缓存管理函数。
缓存管理函数提供了三种粒度的接口用于释放缓存：
- 释放指定缓冲页，对应函数[pg_buffercache_evict(bufferid integer)]。
- 释放指定表的所有缓冲页，对应函数[pg_buffercache_evict(nsp_name name, rel_name name, partition_name name, temp_nsp_name name)]、[pgxc_buffercache_evict(nsp_name name, rel_name name, partition_name name, temp_nsp_name name)]。
- 释放所有缓冲页，对应函数[pg_buffercache_evict()]和[pgxc_buffercache_evict()]。
  ![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
  被pin的缓冲页不会被缓存管理函数释放。
  
 #### pg_buffercache_evict(bufferid integer)
描述：释放指定ID的缓冲页。
返回值类型：bool
返回值说明：缓冲页是否被释放并成功写入磁盘。
示例：
```
SELECT pg_catalog.pg_buffercache_evict(1);
 pg_buffercache_evict 
----------------------
 t
(1 row)
```
 #### pg_buffercache_evict(nsp_name name, rel_name name, partition_name name, temp_nsp_name name)
描述：在当前实例上，释放指定表的所有未被pin住的缓冲页。
参数说明：根据不同的表类型，需要传入不同的参数值。具体参见[表2](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0402.html#ZH-CN_TOPIC_0000002279950570__table104001713163213)。
返回值类型：integer
返回值说明：被成功释放的缓冲页数。
示例：
```
SELECT pg_catalog.pg_buffercache_evict('public', 't1', NULL, NULL);
 pg_buffercache_evict 
----------------------
                    4
(1 row)
```
 #### pgxc_buffercache_evict(nsp_name name, rel_name name, partition_name name, temp_nsp_name name)
描述：在所有实例上，释放指定表的所有未被pin住的缓冲页。
参数说明：根据不同的表类型，需要传入不同的参数值。具体参见[表2](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0402.html#ZH-CN_TOPIC_0000002279950570__table104001713163213)。
返回值类型：integer
返回值说明：被成功释放的缓冲页数。
示例：
```
SELECT pg_catalog.pgxc_buffercache_evict('public', 't1', NULL, NULL);
 pgxc_buffercache_evict 
------------------------
                     10
(1 row)
```
 #### pg_buffercache_evict()
描述：在当前实例上，释放所有未被pin住的缓冲页。
返回值类型：integer
返回值说明：被成功释放的缓冲页数。
示例：
```
SELECT pg_catalog.pg_buffercache_evict();
 pg_buffercache_evict 
----------------------
                 2654
(1 row)
```
 #### pgxc_buffercache_evict()
描述：在所有实例上，释放所有未被pin住的缓冲页。
返回值类型：integer
返回值说明：被成功释放的缓冲页数。
示例：
```
SELECT pg_catalog.pgxc_buffercache_evict();
 pgxc_buffercache_evict 
------------------------
                  10881
(1 row)
```
