本文介绍了PolarDB PostgreSQL版(兼容Oracle)的全局执行计划缓存(Global Plan Cache)功能。
背景信息
在之前的PolarDB中,执行计划缓存(Plan Cache)是和Prepared Statement进行绑定的,这种做法存在以下两个问题:
每个连接的Plan Cache是独立的,无法共享。
每个连接都会缓存一份Plan Cache,导致内存占用较多。
PolarDB PostgreSQL版(兼容Oracle)引入了全局执行计划缓存(简称GPC)功能,通过让不同的连接共享同一份Plan Cache来解决以上两个问题。
Plan可以在不同的Prepared Statement、连接之间共享。对于有大量不同SQL的应用程序,GPC可以大大降低内存的使用量,减少OOM(Out of Memory)的风险。 此外更高效的Plan Cache机制减少了生成执行计划的代价,因此性能也有所提升。
Plan共享的前提是它们的Query Key是一致的,Query Key组成包括以下几部分:
查询文本。
数据库标识号。
对象搜索路径。
用户ID。
前提条件
PolarDB PostgreSQL版(兼容Oracle)集群默认开启GPC功能。
支持的PolarDB PostgreSQL版(兼容Oracle)的版本如下:
Oracle语法兼容 2.0(内核小版本2.0.14.9.15.0及以上)
使用限制
仅支持Prepared Statement形式的查询,即不支持PL/SQL场景下的Plan Cache。
仅支持
SELECT
、INSERT
、UPDATE
、DELETE
语句。不支持临时表。
参数说明
参数 | 说明 |
参数 | 说明 |
polar_gpc_mem | 用于设置存放GPC的内存大小。单位:MB。默认值为30 MB,取值不超过
|
polar_enable_gpc_level | GPC功能的开启级别,允许动态修改。取值如下:
|
polar_gpc_clean_timeout | 清理不经常用GPC的时间间隔,可以动态修改,单位:秒。默认值为1800秒,取值范围为0~24小时之间的数值。 |
polar_worker.gpc_clear_interval | 清理失效GPC的时间间隔,可以动态修改,单位:秒。默认值为60秒,最大允许设置为 (2^32 - 1)/1000。 |
polar_gpc_clean_max | 一次清理的GPC数量,可以动态修改。默认值为100,取值范围为10~10000之间的数值。 |
polar_gpc_partitions | 用于保存GPC的哈希表数量。默认值为32,取值范围为1~1024之间的数值。 参数修改后需要重启才能生效。 |
polar_gpc_entries | 每个哈希表中的最大条目数量。默认值为1024,取值范围为1~10000之间的数值。 参数修改后需要重启才能生效。 |
使用指南
全局执行计划缓存(Global Plan Cache)功能的所有监控接口都在polar_gpc
插件中,执行以下命令,创建插件。
CREATE EXTENSION IF NOT EXISTS polar_gpc;
视图
函数
- 本页导读 (1)
- 背景信息
- 前提条件
- 使用限制
- 参数说明
- 使用指南
- 视图
- 函数