本文分享自华为云社区《直播回顾 | 数仓资源管控理论已掌握,是时候实战了》,作者:胡辣汤 。
混合负载场景下,如何高效运维数据库,防止数据库系统过载?GaussDB(DWS)资源管控为数据库平稳可靠运行提供了哪些助力?本期《数仓专家手把手教您资源管控与运维实战》的主题直播中,我们邀请到华为云GaussDB(DWS)技术布道师吕鹏博,针对GaussDB(DWS) 资源管控的原理和系统运维实践与开发者和伙伴朋友们展开交流互动。
GaussDB(DWS)软件架构及运维挑战
GaussDB(DWS)的核心组件主要有CN、DN及相应辅助组件GDS、OM、CM和GTM。本期直播中,资源管控主要聚焦CN和DN,CN是GaussDB(DWS)的协调节点,负责SQL语句的解析、优化及执行计划的生成。DN是数据的存储节点,负责执行SQL的执行计划,并向CN返回执行结果。例如,业务应用下发了一条SQL语句给GaussDB(DWS)集群,它会先经过负载均衡,随机分布到某一个CN上,然后CN生成解析语句和相应的执行计划,下发给DN执行,等DN执行完以后,会返回给CN,然后从CN返回给用户。
GaussDB(DWS)采用的是shared nothing的一个架构,支持节点扩展,提升GaussDB(DWS)整体集群的一个性能。在数据仓库的使用过程中,也面临一些挑战,比如:同时下发很多SQL语句,导致语句执行资源抢占,出现数据库过载,致使大片SQL执行报错;对于用户而言,SQL语句下发后,执行过程是一个黑箱,无法看到语句执行情况和占用资源情况。因此可以使用资源管控的功能来解决这两个挑战。
GaussDB(DWS)资源管控功能全景图
GaussDB(DWS)资源管控功能原理介绍
用户下发SQL语句后,先经过负载管理,之后下发到DN上进行作业执行,在执行过程中会受到资源管控,此处资源管控主要包含CPU管控、空间管控等。另外在执行过程中,会有辅助线程进行数据采集,帮助用户采集语句执行过程中实时占用的计算资源,包含CPU、内存、磁盘IO、网络等。同时GaussDB(DWS)提供了一些运维工具,比如TopSQL视图、资源监控视图用来分析定位问题。此外为了防止烂SQL影响集群整体性能,GaussDB(DWS)提供了异常规则这个功能。集群内部默认会有一些异常规则,同时也支持用户自定义设置一些异常规则,比如说执行时长、排队时长的多少,如果超过限制,会把作业停掉或者降级。负载管理会先经过一个全局并发队列,然后再进入GaussDB(DWS)的资源池队列,在这个过程中,负载管理把作业分为短查询和长时查询,短查询亦称为简单查询,长时查询亦称为复杂查询。短查询的功能开启是为了提升用户点查性能,提升运行效率。
**负载管控:**即查询调度,包含基于并发的查询调度和基于估算内存的查询调度。通过查询调度实现查询的错峰执行,防止并发过高引发资源争抢严重,导致查询堆积。
CPU管控:GaussDB(DWS)为用户提供CPU管控的方式来调整用户CPU的使用,称为共享配额和**专属限额,其中:共享配额是给资源池按照百分比配置一定的权重,共享配额不限制资源池使用的CPU核,当某个CPU满负载时,在该CPU上运行作业的资源池按照权重的比例抢占CPU时间片,**其使用场景为CPU资源较少,想让重要的业务抢占更多的CPU资源,促使高优作业优先运行。专属限额,是按照百分比的方式分配CPU核给资源池使用,该资源池上运行的复杂作业只能在分配的CPU上运行,其使用场景为CPU资源比较充足,对业务的影响较敏感,需要关闭资源池短查询加速开关。两种管控方案各有其适用场景,需要具体场景具体分析。
内存管控: GaussDB(DWS)为用户提供两种内存管控方式,用户可以根据业务需要,合理设置资源池级别的内存配比。针对传统内存管理的弊端,GaussDB(DWS)设计实现了内存自适应技术,解除对work_mem的依赖,优化器依据统计信息对查询使用内存进行估算,执行器执行SQL过程中,如果使用内存超过估算内存即触发下盘;资源管理依据优化器估算的查询内存,对查询进行调度和管控。
空间管控:支持多个维度的空间管控能力,包含用户空间管控、Schema空间管控、单SQL空间管控、磁盘空间管控等多维度空间管控能力。
**网络管控:**在分布式情况下,网络的优劣对查询性能的影响至关重要,为此,GaussDB(DWS)提出优先级+查分加权轮询DWRR的算法,来管控节点间网络流量。并通过异常规则限制用户查询,防止业务被网络拥塞影响。网络管控可以合理配置网络带宽,平滑数据加载,避免拥塞。识别冗余和低价值数据传输,限制其带宽使用。同时可以为关键查询赋予更高的网络资源优先级。数据仓库的网络流量管控对于优化数据加载,提高查询响应,防止故障都有重要帮助。
GaussDB(DWS)资源运维工具
GaussDB(DWS)提供了诸多运维工具,提升问题定位和分析的能力,目前已集成了事前、事中、事后等多种运维手段,包含事前的Explain performance分析执行计划,当作业运行后,可以通过pgxc_stat_activity分析活跃会话信息,pgxc_thread_wait_status分析线程等待信息,pgxc_wlm_session_statistics分析正在运行的作业信息等。当作业运行完毕后,也可以通过pgxc_wlm_session_info分析历史语句的执行情况,pgxc_respool_resource_history分析历史资源池的占用信息,pgxc_wlm_user_resource_history分析用户维度的资源使用情况等。
这些运维视图提供了对数据库内部数据的访问接口,可以获取执行计划、会话信息、性能统计等与运维相关的数据。无需了解复杂的内部存储结构,直接查询视图表即可获得所需信息。查询成本低,不需要每次都全表扫描,提高了访问效率。具有更好的封装性,保护了数据库内部元数据的安全。可以根据需要对返回信息进行过滤,使运维人员更方便地使用。通过join其他视图表,可以获得跨域的综合信息用于分析。一些视图包含了额外的洞察和统计,提供了优化和诊断的依据。使数据库可以被更好地理解、管理和监控。总而言之,数据库运维视图极大地方便了数据库的日常监控、性能调优、故障定位等管理工作,是数据库运维的重要工具。
总体来说,资源管控可以提高资源利用率,保证服务质量,平滑高峰期压力,实现多租户隔离,优化资源分配策略,减少运维工作量,提升用户体验。具体而言:
- 资源管控可以通过监控和限制非核心业务对资源的占用来提高资源利用率;
- 为关键业务和重要查询提供资源保障,防止资源不足影响服务质量;
- 针对数据加载和用户查询的周期性高峰,科学分配资源以平滑高峰期压力;
- 实现不同用户组或租户之间的资源使用隔离和干扰防护;
- 通过资源监控及时发现潜在问题并快速响应;
- 根据实际情况调整资源分配,使资源规划更合理;资源管控降低了数据库调优和问题定位的人工需求,减少了运维工作量;
- 用户可以直接感知到资源管控带来的系统稳定性提升。
综上所述,良好的资源管控机制可以大幅降低管理数据仓库的人力成本,也提升了用户对数据仓库服务的信任度。
欢迎感兴趣的开发者观看直播回放,了解详细信息。更多关于GaussDB(DWS)产品技术解析、数仓产品新特性的介绍,请关注GaussDB(DWS)论坛,技术博文分享、直播安排将第一时间发布在GaussDB(DWS)论坛。
论坛链接:bbs.huaweicloud.com/forum/forum…
直播回放链接:bbs.huaweicloud.com/live/DTT_li…
点击关注,第一时间了解华为云新鲜技术~