乐趣区

关于存储:做好数据库运维资源管理技术必须要掌握

摘要:通过引入资源监控和管制等伎俩,实现资源在可控的状况下被正当利用的目标,避免出现资源的无序应用,避免数据库系统性能变慢、进行响应。

本文分享自华为云社区《GaussDB(DWS) 资源管理技术浅析》,原文作者:门前一棵葡萄树。

1 资源管理是什么?

1.1 资源管理简介

通过引入资源监控和管制等伎俩,实现资源在可控的状况下被正当利用的目标,避免出现资源的无序应用,避免数据库系统性能变慢、进行响应。资源管理能够实现以下性能:

  1. 通过创立和治理队列,实现队列级别资源 (CPU、内存、存储空间) 隔离和作业的异样解决;
  2. 通过设置 CN 和队列的并发下限,限度容许运行的并发数,超出并发数后作业排队期待唤醒,避免并发过多导致性能降落;
  3. 通过优先级管制实现资源的无效调度,实现高优先级作业优先运行;
  4. 反对多维度资源监控视图,能够监控作业、用户和实例的资源耗费。

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 管控。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版