Shared Server 的高可用特性
1. 资源创建
开始实验之前,您需要先创建相关实验资源。
登录成功后,搜索并进入 PolarDB 的控制台:
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要3~8分钟。
2. 创建用户并登录到 DMS
首先打开桌面的 Chrome 浏览器,使用左侧给出的子用户名称和子用户密码登录。
登录成功后,搜索并进入 PolarDB 的控制台:
进入控制台以后,点击全局概览,可以看到正在运行中的 PolarDB for PostgreSQL 实例。
点击这个实例查看详情:
实例详情如下:
对于一个新实例来说,我们需要创建一个新的用户才可以使用 PolarDB 实例。点击创建用户,创建一个名为 polardb 的高权限用户。
另外,如果需要使用自己的客户端来连接阿里云上的 PolarDB 实例,还需要配置客户端的 IP 地址白名单。只有在这个白名单中的 IP 地址才可以连接到 PolarDB 上。那么这里我们可以直接使用阿里云数据库的 DMS(数据管理服务),从网页上直接连接到数据库。这样就会使用 DMS 的内部 IP 地址来连接数据库,是不需要配置 IP 白名单的。
点击登录数据库,进入到 DMS 控制台。
输入刚才创建的数据库账号的用户名和密码:
成功登录 DMS 以后,点击左侧的 SQL 窗口,选择连接默认数据库 postgres :
3. 参数学习
shared server为保证系统性能和兼容特性,提供了众多参数来适配不同的场景。
实验版本的shared server功能默认关闭,由于开启参数需要使用后台超级管理员权限(后续会逐步放开权限)并配合实例的重启,
受限于演示环境的权限限制不能开启直接演示,本次实验着重让大家了解下相关的系统参数,对于并发连接时的backend的共享效果直接在后一页通过截图展示(最后一页不用实践)。
- shared server使用的核心参数
1.1 polar_enable_shared_server:控制shared server功能开启,当前默认关闭
1.2 polar_ss_shared_memory_size控制shared server使用全局共享内存的上限, 默认1MB
-单位kB, 为0时表示关闭Shared Server
-单个空白session要占用共享内存2k,一个查询的prepare plancache占用0.6k。 plancache的内存占用是大头,如果单个session有较多prepare plancache, 多个session时很容易oom。
show polar_ss_shared_memory_size; show polar_enable_shared_server;
1.3 polar_enable_shm_aset:参数控制是否开启全局共享内存,当前默认关闭(需要超级管理员用户配置,实验环境暂不支持)
show polar_enable_shm_aset;
具体配置方式如下
注意:下面代码不需要实验
alter system set polar_enable_shm_aset = on;
alter system set polar_ss_shared_memory_size = '1MB';
alter system set polar_enable_shared_server = 1;
select pg_reload_conf();
- 与shared server相关的参数众多,为了可以在少量并发场景下可以察到backend共享,可以对如下参数进行调整,从而达到降低shared server开启阀值的目的。
2.1 polar_ss_dispatcher_count:控制dispatcher最大个数, 默认2,最大为cpu核数
2.2 polar_ss_client_threshold_for_shared:控制超过多少个连接后, 新连接才会使用SS。 默认100
show polar_ss_dispatcher_count; show polar_ss_client_threshold_for_shared;
- 除此之外还有很多策略参数,这里简单举两例,剩余参数搭建可以关注后续官网发布。
polar_ss_client_schedule_policy:控制client选择dispatcher的策略, 默认load-balancing, 支持round-robin, random
polar_ss_session_schedule_policy:控制session选择backend的策略, 默认fifo, 支持random, disposable, dedicated
show polar_ss_client_schedule_policy; show polar_ss_session_schedule_policy;
4. backend共享验证
由于实验环境的限制,对backend共享的场景直接通过截图展示:
其中pg_backend_pid表示session id,polar_session_backend_pid表示使用的backend id
图一和图二分别可以观测到:
- 同一个seesion不同的事务内可以使用不同的backend;
- 不同的session可以使用同一个backend id;
图一:
图二:
实验链接:https://developer.aliyun.com/adc/scenario/12384f08c88048acadcc756851664259