摘要:通过引入资源监控和管制等伎俩,实现资源在可控的状况下被正当利用的目标,避免出现资源的无序应用,避免数据库系统性能变慢、进行响应。
本文分享自华为云社区《GaussDB(DWS) 资源管理技术浅析》,原文作者:门前一棵葡萄树 。
1 资源管理是什么?
1.1 资源管理简介
通过引入资源监控和管制等伎俩,实现资源在可控的状况下被正当利用的目标,避免出现资源的无序应用,避免数据库系统性能变慢、进行响应。资源管理能够实现以下性能:
- 通过创立和治理队列,实现队列级别资源(CPU、内存、存储空间)隔离和作业的异样解决;
- 通过设置CN和队列的并发下限,限度容许运行的并发数,超出并发数后作业排队期待唤醒,避免并发过多导致性能降落;
- 通过优先级管制实现资源的无效调度,实现高优先级作业优先运行;
- 反对多维度资源监控视图,能够监控作业、用户和实例的资源耗费。
1.2 资源管理性能
资源管理次要蕴含并发管制、资源管控、资源监控以及异样作业处理。并发管制次要分为全局并发管制和资源池并发管制,其中资源池并发管控由快慢车道实现,快车道管控简略作业,慢车道管控简单作业,反对自动识别和手动切换快慢车道,实践上快车道并发大、作业运行工夫短、占用资源少;慢车道并发少、作业运行工夫长,占用资源多。
资源管控通过对计算资源和存储资源别离管控实现作业间资源隔离,保障单作业异样不会影响到其余作业运行。上面别离对计算资源和存储资源管控进行概述:
(1)计算资源
计算资源蕴含:CPU、IO和内存。GaussDB中CPU和内存资源关联在队列上,用户通过关联队列应用计算资源。队列按应用场景分为超户队列、默认队列和用户队列。其中超户队列不受资源管控,用于运维和故障修复;默认队列(default_pool)为数据库初始化阶段创立的队列,未关联用户队列的用户应用默认队列;用户队列为用户本人创立的队列,依照用户配置的并发和资源进行管控。IO管控基于逻辑IO实现,依据作业运行工夫及优先级对IO进行管控,配置异样解决规定后,在零碎IO达到瓶颈后,被动升高作业IO优先级。
(2)存储资源
存储资源管控蕴含以下几个方面:
- 数据库只读检测
数据库只读检测次要为防止出现磁盘满的问题,实现逻辑如下:cm_server开启enable_transaction_read_only状况下,每十分钟查看一次磁盘空间占用率,当 磁盘空间占用率超过阈值(默认90%)时,就通过guc参数设置数据库只读,数据库只读后只容许只读作业运行,作业产生写盘操作报错退出。然而因为数据库只读会导致用户所有业务无奈运行,因而在磁盘空间占用率达到80%时会提前告警提醒用户。
- 用户/schema空间管控
存储资源蕴含:长久表空间、长期表空间和算子落盘空间。长期表空间和算子落盘空间是作业运行过程中占用的空间,属于长期占用空间。长久表空间和长期占 用空间采纳两种不同的管控策略,长久表空间管控通过对用户(队列)和schema空间限度实现,8.1.1版本之后的GaussDB空间管控均为单实例空间,防止出现数据歪斜导致的磁盘应用问题。长期占用空间同样反对在用户层级设置空间限额,另外还提供异样规定查杀长期空间占用异样的作业。
- 异样解决规定
GaussDB目前反对算子落盘异样规定,用户通过管控面或gs_cgroup工具设置算子落盘异样规定,设置异样规定后作业执行过程中算子落盘空间达到阈值后报错退出。
1.3 资源管理框架
用户连贯数据库执行SQL后,SQL会通过全局并发队列管控以及资源池队列管控。在作业进入管控逻辑前设置定时器,作业pending超时报错退出,作业通过队列管控开始运行前从新设置定时器,作业运行超时报错退出。作业下推DN执行时实时监控作业耗费的资源并上报CN,CN依据DN上报资源信息提供异样解决和监控视图。
上面对并发、内存和CPU管控配置形式进行简要阐明:
(1)全局并发队列
全局并发队列采纳GUC参数max_active_statements管制单个CN上运行并发执行的作业数量。采纳全局并发队列机制将管制所有普通用户的执行作业,不辨别复杂度,即执行语句都将作为一个执行单元,当并发执行的作业数量达到此参数阈值时,将进入队列期待。对于初始用户(Oid=10)执行的作业,不走全局并发管制逻辑。
注:max_active_statements限度单CN上运行的作业数,默认值为60,假如用户有3个DN,则理论全局并发下限为3*60=180;
DDL和DML语句均受max_active_statements并发管制。
(2)资源池并发队列
资源池并发队列蕴含快车道并发队列和慢车道并发队列,配置形式如下:
CREATE RESOURCE POOL respool_a WITH (max_dop=10,active_statements=5);
其中max_dop为快车道并发下限,active_statements为慢车道并发下限。
注:资源池队列只限度DML语句,不限度DDL语句;
max_dop限度单CN上资源池快车道并发数;
active_statements在动态负载管理模式下限度单CN上资源池慢车道并发数,在动静负载管理模式下限度所有CN上资源池慢车道并发数之
(3)内存管控
实例级别内存管控:guc参数max_process_memory限度DN和CN实例的最大可用内存,当应用内存超过max_process_memory时,作业报错退出;
可动静申请内存:max_dynamic_memory=max_process_memory-cstore_buffers(max_cstore_memory)-(udf_memory_limit - 200M) - max_shared_memory;
资源池内存管控:应用并发点数计算可执行的并发数量,active_statements<=0状况下资源池内存不受控。资源池总点数:total_points = active_statements 100,作业应用点数:active_points = (estimate_mem/respool_mem) active_statements * 100,estimate_mem为优化器估算的作业内存,资源池点数耗尽登程排队。
(4)CPU管控
GaussDB次要利用cgroups做cpu资源的管控,波及cpu、cpuacct、cpuset子系统,cpu配额管控基于cpu子系统的cpu.shares实现,该配置办法的益处是:OS cpu没有占满的状况下,不触发cpu管控;cpu限额管控基于cpuset实现;cpuacct子系统次要用于cpu资源应用的监控。
应用gs_cgroup工具设置cpu限额和配额,gs_cgroup工具常用命令如下:
- root用户挂载cgroup
gs_cgroup -U user -d #删除以后挂载信息
gs_cgroup -U user -c -H homepath [-D mountpath] --upgrade
- 创立Class控制组
gs_cgroup -S class1 -s 40 -c
- 创立Workload控制组
gs_cgroup -S class 1 -G wg1 -c
- 为控制组调配cpu配额
gs_cgroup -S class 1 -G wg1 -g 20 -u
- 设置cpu限额
gs_cgroup -S class 1 -G wg1 -g 30 -u –fixed
- 删除控制组
gs_cgroup -S class 1 -G wg1 -d
- 查看控制组信息
gs_cgroup -p #动态配置文件信息
gs_cgroup -P #挂载信息(树形构造)
- 查问规定
设置查问规定
gs_cgroup -S class -G wg -E "blocktime=1200,elapsedtime=2400" –a
gs_cgroup -S class -G wg -E "spillsize=256,broadcastsize=100" –a
gs_cgroup -S class -E "allcputime=100" –penalty
gs_cgroup -S class -E "qualificationtime=2400,cpuskewpercnt=90
查问异样规定
select gs_respool_exception_info('rp_name')。
cpu管控原理:
- cgroup挂载:应用root用户挂载cgroup;
gs_cgroup -U user -c -H homepath [-D mountpath] --upgrade
- cgroup创立:应用数据库装置用户创立cgroup;
gs_cgroup -S class1 -G wg1 -c
- cgroup关联资源池:创立组资源池pr1关联class控制组class1,创立业务资源池resp1关联workload控制组wg1
CREATE RESOURCE POOL pr1 WITH(CONTROL_GROUP='class1');
CREATE RESOURCE POOL resp1 WITH(CONTROL_GROUP='class1:wg1');
- 用户关联资源池:创立组用户role1关联组资源池pr1,创立业务用户usr1关联业务资源池resp1
CREATE ROLE role1 RESOURCE POOL 'pr1' PASSWORD disable;
CREATE USER usr1 RESOURCE POOL 'resp1' PASSWORD 'Gauss_234' USER GROUP 'role1';
- 应用业务用户usr1执行简单作业,作业执行过程中调用api函数cgroup_attach_task将作业attach到class1:wg1控制组上实现cpu管控。
点击关注,第一工夫理解华为云陈腐技术~