资源池化性能优化
可获得性
本特性自openGauss 5.1.0版本开始引入,仅适用于资源池化架构。
特性简介
本特性包含以下3个子特性:
- 资源池化备机可见性逻辑优化,本地缓存从主机获取到的事务xid对应的csn,减少网络开销和消息交互。
- 资源池化主机获取集群oldestxmin逻辑优化,主机本地记录备机实时获取快照的xmin,备机定时发送本机的oldestxmin给主机,减少广播开销。
- 资源池化备机获取快照逻辑优化,主机每次广播最新快照给备机,备机从本地获取快照,减少网络开销和消息交互。
客户价值
在资源池化架构下,通过相关逻辑的优化,可以提升备机只读场景的性能,在典型sysbench一主一备,主机读写备机只读测试场景中,备机性能可提升50%到80%。
特性描述
本特性包含以下3个子特性:
- 资源池化备机可见性逻辑优化:原有逻辑中备机在判断元组可见性时,如果元组上的xid未标识已提交,会向主机获取当前元组xid对应的实时csn用于判断可见性,如果备机查询的页面多,查询流程长,该交互逻辑会十分频繁,影响主机和备机的执行效率。该特性通过在备机本地内存中建立事务提交状态的二级缓存信息,备机进行元组可见性判断时,先从本地缓存获取,再从主节点获取,并更新本地缓存。
- 资源池化主机获取集群oldestxmin逻辑优化:原有逻辑中主机在每次生成最新的快照信息时,会触发广播消息从集群中的所有备机获取各自的oldestxmin,从而更新集群的oldestxmin,用于vacuum和heap tuple prune的操作。该特性通过在备机从主机获取快照时,在主机内存记录快照的xmin,同时备机通过后台线程定时发送本地的oldestxmin给主机,主机通过后台线程定时清理无效的xmin信息。
- 资源池化备机获取快照逻辑优化:原有逻辑中备机每次读都需要去主机获取实时的最新的快照信息,当备机读业务多时,主备交互频繁。该特性通过在主机每次生成最新快照时广播发送最新的快照信息给集群中的每个备机,备机在本地缓存最新的快照,备机中的每次读优先从本地最新快照中获取,可以减少备机只读业务多时的备机获取快照的消息交互。同时为减少备机数量多时由于广播操作对主机的影响,该特性通过开关可控制是否打开,默认关闭,详细可参考ss_enable_bcast_snapshot
特性增强
本特性是在资源池化架构下,对原有的备机可见性判断、主机获取oldestxmin以及备机获取快照特性进行的增强。
特性约束
无
依赖关系
本特性依赖资源池化架构。
基本原理
本特性中所包含的3个特性的基本原理如下:
- 资源池化备机可见性逻辑优化:该特性会在备机的每个业务线程中建立一个用于存储事务提交状态的二级缓存。当备机进行元组可见性判断时,先从该缓存中获取,如果获取不到,再通过DMS从主节点获取,获取成功后更新到缓存信息中。同时为了控制业务线程的内存消耗,该缓存中的信息也会通过
LRU
算法实时进行淘汰。 - 资源池化主机获取集群
oldestxmin
逻辑优化:该特性主要对主机维护集群oldestxmin
的逻辑进行了优化。该特性在主机的全局内存中申请了一个数组用于存储每个备机当前已知的最小读xmin,还有一个哈希表用于存放每个xmin获得的时间戳。主机通过遍历哈希表找到时间最早的那个xmin,与数组中存储的xmin对比取最小的作为当前所有备机持有的oldestxmin
。这样的设计可以保证处于网络请求过程中的xmin不会被遗漏,从而可能清理掉备机仍然在访问的数据元组。 - 资源池化备机获取快照逻辑优化:该特性实现了在主机每次生成最新快照时主动广播发送最新的快照信息给集群中的每个备机,备机在本地缓存接收到的最新的快照。当备机的读业务需要获取集群中最新的快照信息时,优先从本地缓存中获取。如果本地缓存中无效,再通过网络从主机侧获取。这样可以减少备机只读业务多时,而主机侧没有多少写业务时,备机获取快照的消息交互次数。该特性通过开关可控制是否打开或关闭,默认关闭,详细可参考ss_enable_bcast_snapshot。
使用指导
- 资源池化备机可见性逻辑优化:该特性默认生效,无需额外操作。
- 资源池化主机获取集群
oldestxmin
逻辑优化:该特性默认生效,无需额外操作。 - 资源池化备机获取快照逻辑优化:该特性通过开关可控制是否打开或关闭,默认关闭,详细可参考ss_enable_bcast_snapshot。打开后在数据库内部生效,对用户不感知。
使用场景
该特性的使用场景为:在资源池化下,需要进行性能测试的场景。
意见反馈