GaussDB(DWS)ユーザー監視の原理と応用を詳しく解説

要約: この記事では、ユーザー監視の原理と応用に焦点を当てます。

この記事は、Huawei Cloud Community「GaussDB (DWS) Monitoring Tool Guide (2) User-level Monitoring」、著者: 舞台裏の小さな黒い爪から共有されたものです。

序文

リソースの監視は、運用とメンテナンス全体、さらには製品ライフサイクル全体においても重要な部分であり、障害は事前にタイムリーに検出され、その後、問題を追跡して特定するために詳細なデータが提供されます。GaussDB (DWS) のリソース監視システム全体は、ジョブ レベルの監視、ユーザーの監視、およびリソース プールの監視に分かれています。この記事では、ユーザー監視の原理と応用に焦点を当てます。

1.GuassDB (DWS) ユーザーシステム

製品の場合、最も単純なユーザー分類は、一般ユーザー、システム管理者、およびスーパー管理者の 3 層システムです。スーパー管理者が最上位の権限を持ち、一般ユーザーが最も基本的なユーザーであり、システム管理者はユーザーのOSの権限の一部も持ち、一般ユーザーの権限を変更することもできます。スーパー管理者はすべての権限を持っていますが、使い方は簡単ではありません。

1.1 2 層ユーザー メカニズムの概要

企業の場合、データベースの運用も部門に分かれており、部門ごとにテーブルがあり、優先順位も部門ごとに異なるため、GaussDB (DWS) が設計するユーザーシステムも 2 つに分かれています。レイヤー。:

第 1 層はグループユーザーであり、この層のユーザーはグループリソースプールに関連付けられており、ジョブの実行ユーザーとしては使用されません。

2層目はビジネスユーザーであり、ビジネスリソースプールに関連付けられ、ジョブを実行するユーザーとして利用できます。

グループユーザー間で利用できるリソースを個別に設定することもできます。ビジネスユーザーごとに個別のリソースを設定することもできます。従来の単層ユーザー機構と比較して、二層ユーザー機構では、よりきめ細かいユーザーリソースの制御を実現できます。

例:

# 创建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 構文を使用してユーザーにアクセス許可を付与したり、アクセス許可を取り消したりすることができます。この操作は、sysadmin アクセス許可を持つユーザーが実行する必要があります。たとえば、

# 将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、ネットワークなどの監視をサポートします。これらのリソースを監視することで、管理者はシステム負荷、プロセスの実行ステータス、ディスクスペースの使用状況、ネットワーク帯域幅の使用状況を把握できます。およびその他の情報。この情報は、管理者がシステムの異常を適時に発見し、システムのクラッシュやサービスの中断を回避するために適時に措置を講じるのに役立ちます。

使用例:

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_logical_io_statistics : ユーザーリソース監視とリソースプールリソース監視の IO 関連値の切り替え デフォルトは on 有効にすると、ユーザー監視の IO 関連レコード (read_kbytes、write_kbytes、read_counts、write_counts、read_speed、write_speed) がカウントされます。

Enable_user_metric_persistent : ユーザー/リソース プールの履歴リソースの監視およびダンプ機能を有効にするかどうか。有効にすると、監視レコードが履歴テーブルにダンプされます。

user_metric_retention_time:ユーザーの履歴リソース監視データの保存日数を設定します。デフォルトは 7 日です。

2.3.2 関連する指示

現在のユーザー監視では、高速レーンと低速レーンのすべてのジョブの CPU、IO、メモリ使用量を同時に監視できます。

ユーザーが CN に対してクエリを実行すると、すべての DN リソース プールの使用量とリソース制限の累積合計が表示されます。DN がクエリされると、DN 上のリソース プールの使用量とリソース制限情報のみがカウントされます。

DN でのデータ収集期間は 5 秒で、CN は 5 秒ごとに DN から情報を収集します。補助スレッドは、ユーザー監視データを永続化するために 30 秒ごとに永続化操作を自動的に実行します。

初期管理ユーザーはスーパー管理者ユーザーのため、一時的にリソースの監視は行われず、監視する必要がありません。

2.4 ケーススタディ

2.4.1 メモリが使用できない場合、このビューを使用して、どのユーザーがメモリを過剰に使用しているかを確認できます

2.4.2 ネットワークの送受信速度など、ユーザーのネットワーク使用状況を監視できます。

 

クリックしてフォローして、Huawei Cloudの最新テクノロジーについて初めて学びましょう~

{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4526289/blog/9104847