Code前端首页关于Code前端联系我们

GaussDB(DWS)用户监控原理及应用详解

terry 2年前 (2023-09-26) 阅读数 79 #后端开发

资源监控是整个运维乃至整个产品生命周期的重要组成部分。及时的报表可以提前发现错误,并在事后提供详细数据,以便跟踪定位问题。 GaussDB(DWS)中整个资源监控系统分为作业级监控、用户监控和资源池监控。本文将重点介绍用户监控的原理和应用。

1。 GuassDB(DWS)用户体系

对于一个产品来说,最简单的用户分类就是普通用户、系统管理员、超级管理员三级体系。超级管理员拥有最高级的权限。普通用户作为最基本的用户,对用户的操作系统拥有部分权限。系统管理员也有部分权限。同时他还可以更改普通用户的权限。超级管理员拥有所有权限,但不能轻易使用。

1.1 两级用户机制介绍

对于一个公司来说,数据库的操作也是分部门的。每个部门都有自己的表,每个部门也有自己的优先级。鉴于此,(DWS)设计的GaussDB用户系统也分为两层:

第一层是群组用户。该层用户与群组资源池关联,不作为执行作业的用户。

第二个层次是企业用户。该级别的用户与业务资源池关联,可以作为执行作业的用户。

组用户之间可以使用的资源也可以单独设置。还可以在每个业务用户之间设置单独的资源。与之前的单层用户机制相比,两层用户机制可以实现对用户资源更细粒度的控制。

示例:

# 创建cgroup控制组
gs_ssh -c "gs_cgroup -c -S ClassG1 -G wn1"
# 创建组资源池resource_pool_a绑定ClassG1控制组。
CREATE RESOURCE POOL resource_pool_a WITH (control_group = 'ClassG1');
# 创建业务资源池resource_pool_a1绑定wn1控制组。
CREATE RESOURCE POOL resource_pool_a1 WITH (control_group = 'ClassG1:wn1');
# 创建组用户关联到组资源池。例如,名称为“tenant_a”的组用户关联到“resource_pool_a”组资源池
CREATE USER tenant_a RESOURCE POOL 'resource_pool_a' PASSWORD '********';
# 创建业务用户关联到业务资源池和组用户。例如,名称为“tenant_a1”的业务用户关联到“resource_pool_a1”组资源池和“tenant_a”组用户。
CREATE USER tenant_a1 RESOURCE POOL 'resource_pool_a1' USER GROUP 'tenant_a' PASSWORD '********';

1.2 Grant

当我们需要普通用户访问表时,我们可以使用grant语法来向用户授予权限或撤销权限。此操作需要具有系统管理员权限的用户。例如

# 将public表空间下的lineitem表的查询权限赋给user_1:
grant select on public.lineitem to user_1;
# 回收user_1的public表空间下的lineitem表的查询权限:
Revoke select on public.lineitem from user_1;

2。用户资源监控

2.1 目的

一般数据仓库产品都会有多个用户同时操作数据库,每个用户使用的资源量是不同的。举个极端的例子,当用户发出慢SQL,导致集群整体性能下降时,我们需要判断是哪个用户发出了作业,然后找到对应的慢SQL并进行管理。

对于管理员用户来说,用户监控可以帮助管理员从用户角度了解系统性能,及时发现并解决资源瓶颈和错误,提高系统的可靠性和稳定性。它还可以区分整个集群中每个用户使用的资源量,确定哪些用户使用的资源超过标准,然后限制超过标准的用户。

2.2 监控维度

用户监控支持对CPU、内存、存储空间、临时空间、操作员磁盘空间、磁盘IO、网络等资源的监控。通过监控这些资源,管理员可以了解系统负载、进程运行状态、磁盘空间消耗、网络带宽利用率等信息。这些信息可以帮助管理员及时发现系统异常情况,并及时采取措施,避免系统崩溃或服务中断。 GaussDB(DWS)用户监控原理及应用详解

使用示例:

postgres=# SELECT * FROM PG_TOTAL_USER_RESOURCE_INFO;
     username     | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_cou
nts | write_counts | read_speed | write_speed | send_speed | recv_speed
------------------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+---------
----+--------------+------------+-------------+------------+------------
 user_grp_1       | 0 | 4928 | 0 | 16 | 1573880 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 perfadm | 0 | 0 | 0 | 0 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 user_normal | 0 | 24643 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 usr1             | 0 | 69763 | 0 | 40 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 logical_cluster1 | 0 | 24643 | 0 | 16 | 1834424 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 user_2           | 0 | 985 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 user_1           | 0 | 3942 | 0 | 16 | 1573880 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 logical_cluster2 | 0 | 45120 | 0 | 24 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 user_default | 0 | 24643 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
 wjx | 0 | 24643 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 0 | 0 | 
 0 | 0 | 0 | 0 | 0 | 0
(10 rows)
postgres=# select * from GS_WLM_USER_RESOURCE_HISTORY;
     username     |           timestamp           | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_
kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed | send_speed | recv_speed
------------------+-------------------------------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+------
-------+--------------+-------------+--------------+------------+-------------+------------+------------
 user_grp_1       | 2023-05-22 16:51:03.380482+08 | 0 | 4928 | 0 | 16 | 1573880 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 wjx | 2023-05-22 16:51:03.380482+08 | 0 | 24643 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 user_default | 2023-05-22 16:51:03.380482+08 | 0 | 24643 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 logical_cluster2 | 2023-05-22 16:51:03.380482+08 | 0 | 45120 | 0 | 24 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 user_1           | 2023-05-22 16:51:03.380482+08 | 0 | 3942 | 0 | 16 | 1573880 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 user_2           | 2023-05-22 16:51:03.380482+08 | 0 | 985 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 logical_cluster1 | 2023-05-22 16:51:03.380482+08 | 0 | 24643 | 0 | 16 | 1834424 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 usr1             | 2023-05-22 16:51:03.380482+08 | 0 | 69763 | 0 | 40 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
 user_normal | 2023-05-22 16:51:03.380482+08 | 0 | 24643 | 0 | 16 | 0 |          -1 | 0 |               -1 | 0 |                -1 | 
 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

2.3 监控原理

作业运行时,核心根据作业携带的用户信息积累相关资源字段,并定期汇总用户监控历史表中的信息。另外,该功能的使用还有一些规范:

2.3.1 相关GUC参数

enable_logic_io_statistics:切换到用户资源监控和资源池监控IO相关值。默认开启。开启后,用户监控位于 io.相关条目(read_kbytes、write_kbytes、read_counts、write_counts、read_speed 和 write_speed)将被计数。

enable_user_metric_persistent:是否开启用户/资源池历史资源监控转储功能。启用后,监视记录将转储到历史表中。 ?使用。

当用户在CN上执行查询时,显示的是所有DN资源池使用情况和资源限制的累计总和。 DN查询时,只统计该DN上资源池的使用情况和资源限制信息。

DN上的数据采集周期为5s,CN每5s向DN采集一次信息。 helper线程每30秒自动执行一次持久化操作,以持久化用户监控数据。

原admin用户不进行资源监控,因为该用户是超级管理员用户,无需监控。 ? 。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门