1. 删除虚拟集群
DROP VCLUSTER [IF EXISTS] <name>
一个繁忙的(简易理解:有资源请求)虚拟集群无法被删除。
2. 虚拟集群缩容扩容
ALTER VCLUSTER <name> WITH (SEGMENTS='<hostnames>' | SEGMENTFILE='<hostfile>')
ALTER VCLUSTER <name> WITHOUT (SEGMENTS='<hostnames>' | SEGMENTFILE='<hostfile>')
WITH用来扩容,WITHOUT用来缩容,此DDL同样支持扩展匹配。
同一时刻一个节点(域名或IP)只能归属一个虚拟集群。
若缩容节点有资源被使用,则缩容会提示失败。
3. 虚拟集群属性
随着虚拟集群的引入,有些GUC不再是全局范围的定义而是从属于虚拟集群的属性,我们将这些GUC移入pg_vcluster中,将其作为虚拟集群的属性。
GUC与虚拟集群属性对照表
设置虚拟集群属性
ALTER VCLUSTER <name> WITH (<VCPROPERTY>=<value> [, <VCPROPERTY>=<value>]) [IN SESSION]
ALTER VCLUSTER <name> WITHOUT (<VCPROPERTY> [, <VCPROPERTY>]) [IN SESSION]
设置使用WITH,取消使用WITHOUT(不要设值)。 持久话不要加IN SESSION,临时设置请使用IN SESSION。
显示虚拟集群属性
SHOW VCPROPERTY <name>
虚拟集群属性的使用/显示按照以下优先级:SESSION>CATALOG>DEFAULT。
4. FAQ
4.1. 资源队列和ROLE
● 使用vcname.rsqname来表示资源队列,以前的pg_root/pg_default可以对应成vc_default.pg_root/pg_default。
● 修改用户的资源队列同样请使用vcname.rsqname来表示。
● 创建用户不指定资源队列会自动使用vc_default.pg_default。
● 没有了none资源队列,如果需要请用vc_default.pg_default。
● 查看用户绑定的资源队列
select * from pg_resqueue_status
where rsqname = (select rsqname from pg_resqueue
where oid=(select rolresqueue from pg_authid
where rolname=(select current_user)));
● 查看用户绑定的虚拟集群
select * from pg_vcluster
where oid = (select vcid from pg_resqueue
where oid=(select rolresqueue from pg_authid
where rolname=(select current_user)));
4.2. RM拒绝资源申请请求
Deferred the resource request because the resource queues have no valid resource capacities yet.
出现这种情况意味着当前用户绑定的资源队列没有可用资源,可以进行以下步骤进行检查:
- 检查用户绑定的资源队列,理论上报了此错误,则segcore为-1,segsize为0
- 检查对应虚拟集群,vcseg列是否有节点:
■ 若没有节点,需要向vc加入节点后使用。
■ 若有节点,则进一步排查。 - 检查节点健康状况,观察vcseg中的节点在gp_segment_configuration是否健康:
■ 若节点显示d
则需要排查节点状况,令其可用。
■ 若vcseg中的节点没在gp_segment_configuration中出现,或一个是IP一个是域名,则意味着域名解析错误,需要检查/etc/hosts,确认域名与IP对应一致。
4.3. 如何正确扩容
4.4.0.0版本以前,在对应节点上开启OushuDB的segment进程即可。4.4.0.0版本以后,开启segment进程只会将其识别为isolated节点,可以在gp_segment_configuration中看到此信息,此时需要按需手动将其加入到某个虚拟集群中使用。