Db2と、Db2 on Cloudと、Db2 Warehouse on Cloudは何が違う？ ~運用編 (3) モニタリング/監視

#  はじめに

2022年現在、Db2には多くの提供形態があります。
(参考：[2022年6月のDb2製品ラインナップを整理してみる](https://qiita.com/mi-kana/items/f995a924ac6e3368d1db))

10年前まではオンプレミス環境での利用が圧倒的に多かった**Db2**も、
IaaS環境での稼働はすっかり一般的になり、
DBaaSである**Db2 on Cloud**, **Db2 Warehouse on Cloud**（略称：**Db2WoC**）の利用検討も増えてきているようです。

DBaaSであるDb2 on Cloud , WoC ではサービス利用を申し込めば、
作成済のDBを提供されてすぐに利用開始することができます。
そして、OSログインは不要です。そもそもDb2が稼働するOSへログインすることはできません。

となると、どうやって運用管理を行うのでしょう？

DBaaSですから障害が起きたときのサービス復旧はベンダーであるIBMにおまかせで良さそうですが、
DBサーバで日々行われる運用操作は多岐にわたります。

バックアップ、統計情報収集、再編成、モニタリングなど、
一般的に行われるデータベース運用操作がDb2 on Cloud, Db2WoCではどうなるのか、何ができるかは知っておきたいところです。

そこで、オンプレミス環境、IaaS環境で稼働するDb2で通常行われる定常運用操作を、Db2 on Cloud , Db2WoCではどのように行えるのかを整理します。


## 目次

　
[(1) バックアップ/リストア](https://qiita.com/cotflow/items/73fce70958fd27599ac3)
[(2) 統計情報収集/再編成](https://qiita.com/mi-kana/items/1b7f3af2138cea631db0)
[**(3) モニタリング/監視**](https://qiita.com/Haruka-Ogawa/items/ee07a302047b788940c4) ← 当記事

この記事では、**(3) モニタリング/監視** について扱います。



# モニタリング/監視について

まず、**Db2**, **Db2 on Cloud**, **Db2WoC** におけるモニタリング/監視について、大まかな説明をします。

Db2運用においては、サービスやリソースの状況をモニタリング/監視する必要があります。
Db2製品では、モニタリング/監視を行うための様々な機能が提供されています。

**Db2**では、主に以下のような機能を用いて、モニタリング/監視を行うことができます。

+ **OSコマンド**
+ **db2pd コマンド**
+ **MON_GET表関数**
+ **db2mon**
+ **イベントモニター**
+ **監査機能**


しかし、**Db2 on Cloud**・**Db2WoC**では、OSコマンドが使用できませんし、その他 の機能でも いくつか使用できない ものがあります。

それぞれの機能の各環境における使用可否を、以下表にまとめています。


| 機能             | Db2 | Db2 on Cloud ・Db2WoC|
|:----------------:|:------------:|:------------:|
| **OSコマンド**    | 〇 | × | 
| **db2pdコマンド** | 〇 | × | 
| **MON_GET表関数** | 〇 | 〇 | 
| **db2mon**        | 〇 | × | 
| **イベントモニター**| 〇 | 〇 | 
| **監査機能** | 〇 | 〇 | 


一方、**Db2 on Cloud**・**Db2WoC** では、**Webコンソール**が使用でき、
GUI画面より手軽に、さまざまな項目についてモニタリングを行うことができます。メモリー等のリソース使用状況も、ダッシュボードで確認可能です。

**Db2 on Cloud**・**Db2WoC**は、クラウドマネージドサービスとしての利用になるため、運用方法が オンプレミスでの**Db2**と異なります。

各製品で利用できる モニタリング/監視機能を把握し、適した運用方法を検討することが必要となります。


# 従来型 Db2 のモニタリング/監視

ここでは、従来からある**Db2**でのモニタリング/監視 について記述します。

## 1. OSコマンド

OSコマンドを使用して、プロセスやリソースの監視を行います。

たとえば、Linux/Unix環境において **psコマンド**を実行して、プロセス情報やメモリー使用状況を確認したり、**dfコマンド**を実行して、ディスクの使用状況を確認したりします。
リソース監視には、**nmonコマンド**を使用する場合もあります。

Db2が稼働すると **db2sysc**（Windowsの場合 **db2syscs.exe**） がプロセスとしてあがります。

Linux/Unix環境で、Db2が正常に稼働しているかどうかは、**ps コマンド** で以下のように確認することができます。

```
$ ps -ef | grep db2inst1 | grep db2sysc | grep -v grep
db2inst1  1793  1791  9 00:19 pts/0    00:00:04 db2sysc 0
```

Db2の詳細なプロセス・モデルについては、以下リンク先をご参照ください。

(参考)
・DB2 プロセス・モデル
https://www.ibm.com/docs/ja/db2/11.5?topic=architecture-db2-process-model

Linux/Unix環境での　ディスクの使用状況は、**dfコマンド**で以下のように確認することができます。

```
$ df
ファイルシス          1K-ブロック     使用   使用可 使用% マウント位置
devtmpfs                  2444312        0  2444312    0% /dev
tmpfs                     2456296        4  2456292    1% /dev/shm
tmpfs                     2456296     8728  2447568    1% /run
tmpfs                     2456296        0  2456296    0% /sys/fs/cgroup
/dev/mapper/rhel-root    36678148 19415636 17262512   53% /
/dev/sda1                 1038336   153248   885088   15% /boot
tmpfs                      491260        0   491260    0% /run/user/0
```


また、**nmonコマンド**を使用すると、
CPU、ディスク、メモリなどの システム統計が取得でき、リソース監視が可能です。

・nmon for Linux
https://nmon.sourceforge.net/pmwiki.php

## 2. db2pdコマンド


**db2pdコマンド**は、Db2 v8.2から追加されたモニタリングツールであり、データベース・エンジンを経由せずDb2のメモリー領域を参照することが可能です。

情報を収集する際、データベース・エンジンを経由しないので、
Db2エンジンがハングしている状態でも実行可能です。
コマンドには様々なオプションがあり、あらゆる状況やタイミングで使用できます。


(参考)
・[Db2 v11.5] db2pd - Db2 データベースのモニターおよびトラブルシューティング・コマンド
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-db2pd-monitor-troubleshoot-db2-engine-activities

## 3. MON_GET表関数

**MON_GET表関数**は、Db2 v9.7以降 提供されている モニター・メトリックを利用したモニタリング機能で、
SQLを使用して、システムの動作やパフォーマンスを記述するさまざまなモニタリング情報を取得することができます。

SQLを使用してモニタリングデータを取り扱うことができるため、蓄積や分析が容易であり、
日常的な活動状態のモニタリングを行い、データベースの「平常」を把握することで、何らかの問題が発生したときの基準を知り、問題判別時の調査に役立てられます。

・モニター・プロシージャーおよび関数　
https://www.ibm.com/docs/ja/db2/11.5?topic=views-monitor-procedures-functions


## 4. db2mon

ある特定期間のモニター・データを収集したい場合は、
特定期間のMON_GETデータを取得するスクリプトセットである **db2mon**を使用します。
(※MON_GETデータは MON_GET表関数が返す性能統計データを指します。）


db2mon実行では、**オンライン・モード**と**オフライン・モード**の2つのモードが選択できます。
インスタンス・ディレクトリーの ~/sqllib/samples/perf 下には、db2monの実行に使用されるスクリプトがあります。

+ **オンライン・モード**
一般的にはこちらのモードで実行します。
モニター対象のシステム上で db2monが実行され、標準出力に関するレポートを生成します。
実行には、**db2mon.sh**か**db2mon.sql**のどちらかを使用します。
<使用スクリプト>
・**db2mon.sh**：データベース接続し、USER TEMPORARY 表スペースと小さな専用バッファー・プールを作成する
・**db2mon.sql**：現行接続でMON_GET データを収集する。（db2monBefore.sql、 db2monInterval.sql、 db2monAfter.sqlの連結形式）


+ **オフライン・モード**
実行には、**db2mon_export.sql**、**db2mon_export.sql**、**db2mon_report.sql**を使用します。
<使用スクリプト>
・**db2mon_import.sql**：IMPORT ユーティリティーで、分析のために MON_GET データを Db2 表に再構成する
・**db2mon_export.sql**：MON_GET データを現行作業ディレクトリー内に作成された IXF ファイルにエクスポートする
・**db2mon_repoort.sql**：分析用のレポートを生成する


(参考)
・[Db2 v11.5]　db2mon によるパフォーマンス・モニター・データの収集とレポート作成
https://www.ibm.com/docs/ja/db2/11.5?topic=tuning-collecting-reporting-performance-monitor-data

## 5. イベントモニター

ある特定のイベントが発生したときだけ、システム状態について情報を取得したい場合は、**イベントモニター**を使用します。

イベントモニターでは、以下イベントに対する情報のキャプチャーが設定できます。

+ **LOCKING**：ロック, デッドロックがいつ発生するか、および 関与しているアプリケーション
+ **ACTIVITIES**：システムで実行されているアクティビティー
+ **STATEMENTS**：SQL ステートメントの実行の結果として データベースに対して要求された内容
+ **UNIT OF WORK**：システムで実行された作業単位についての リソース使用量情報およびパフォーマンス・メトリック
+ **PACKAGE CACHE**：パッケージ・キャッシュからなくなったステートメントの履歴
+ **CONNECTIONS**：アプリケーションによるデータベースへの接続ごとのメトリックおよびその他のモニター・エレメント
+ **DATABASE, BUFFERPOOLS, TABLESPACES, TABLES**：データベース全体、バッファープール、表スペース、表に関するメトリック
+ **STATISTICS**：ワークロード管理オブジェクト (サービス・スーパークラス、ワークロードなど) についての 処理メトリック
+ **THRESHOLD VIOLATIONS**：設定した特定のしきい値が、データベース運用でいつ超過されるか
+ **CHANGE HISTORY**：データベースおよびデータベース・マネージャーの構成変更、レジストリー設定変更、DDL ステートメントの実行、ならびにユーティリティーの実行

イベント・モニターの作成には、**CREATE EVENT MONITOR**ステートメントを使用します。
また、イベントモニターを活動化するには、**SET EVENT MONITOR**ステートメントを使用します。活動化するときはSTATEを1、非活動化するにはSTATEを0に設定します。
（必要に応じて、一部タイプのイベント・モニターに関しては、データの収集ができるようにデータベース・マネージャーを構成します。）

(参考)
・[Db2 v11.5]　イベント・モニター
https://www.ibm.com/docs/ja/db2/11.5?topic=monitoring-event-monitors


## 6. 監査機能

事前に定義したデータベースのイベントに対して監査証跡を生成し、監査証跡をモニタリングするには、**監査機能**を使用します。

**CREATE POLICY**コマンドで、現行サーバーの監査ポリシーを定義し、監査するカテゴリーを指定します。

その後、**AUDIT**コマンドで　オブジェクトで使用する監査ポリシーを紐づけます。紐づけが完了したら、オブジェクト使用中は そのポリシーに従って監査が実行されます。

監査ポリシーを関連付けることができるオブジェクトには、以下があります。

+ データベース全体
+ テーブル
+ トラステッド・コンテキスト
+ ユーザー、グループ、またはロールを示す許可 ID
+ 権限 (SYSADM、SECADM、DBADM、SQLADM、WLMADM、ACCESSCTRL、DATAACCESS、SYSCTRL、SYSMAINT、SYSMON)

(参考)
・[Db2 v11.5]　Db2 監査機能の紹介
https://www.ibm.com/docs/ja/db2/11.5?topic=activities-introduction-db2-audit-facility

## 7. その他

単一のGUI画面よりDb2データベースの管理・モニターを行いたい場合、
Db2管理・モニタリングツールである、**Db2 Data Management Console（DMC）** を使用できます。

DMCは、Data Server Manager(DSM)の後継ツールとして2019年10月にリリースされました。
Db2 on Cloud/Db2WoCも同じようなインターフェースのWebコンソールが提供されています。

(参考)
・【SIL】【IM】IBM Db2 Data Management Console 利用ガイド
https://www.ibm.com/support/pages/%E3%80%90sil%E3%80%91%E3%80%90im%E3%80%91ibm-db2-data-management-console-%E5%88%A9%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89

また、Db2v11.1以降では、**dmctopツール**を使用した、テキストベースのモニタリングが可能です。

**dmctopツール**は、Db2に同梱されおり、標準でインストールされる無償のコマンドラインツールです。
このツールは軽量でオーバーヘッドが少なく、MON_GET表関数を使用して、監視対象データベースのアクティビティをリアルタイムに表示ができます。

(参考)
・[IBM Db2 Data Management Console v3.1.x]Monitoring utility (dmctop)
https://www.ibm.com/docs/en/db2-data-mgr-console/3.1.x?topic=monitoring-utility-dmctop

# Db2 on Cloud、Db2WoC の モニタリング/監視

ここでは、**Db2 on Cloud**・**Db2WoC**でのモニタリング/監視 について記述します。

Db2 on Cloud や Db2WoC では、
Db2で使用できた **OSコマンド**や **db2pdコマンド**、**db2mon**が使用できません。

その代わり、Db2 on Cloud や Db2WoC では　**Webコンソール**が使用でき、
GUIインターフェース上で モニタリングを行うことができます。

以下より、それぞれのモニタリング/監視 機能について記述します。

## 1. Webコンソール

**Db2 on Cloud**・**Db2WoC**では、
Db2の状態を管理・モニターすることができる **Webコンソール**が提供されています。

GUI画面にて 手軽に様々なモニタリングができ、緊急の問題判別などに適しています。

Webコンソールへは、Webブラウザから以下URLで接続することができます。※斜線部分はホスト名
**https://*db2w-xxxxx.ap-north.db2w.cloud.ibm.com*/console/**

Db2 on Cloud/Db2WoCサービスをデプロイすると、
コンソールのアドレスとWebコンソールにログインするための認証情報が通知されます。
通知された認証情報を使用して、Webコンソールへログインします。

Webコンソールへログインすると以下のような画面が表示されます。
(※ここではDb2 on CloudのWebコンソールを示します。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174250/d12a6096-5036-860a-4e5d-c347250018b5.png)

ダッシュボードでは、Db2 on Cloud・Db2WoC全体のモニタリング情報として、以下項目が確認できます。
+ 反応性
+ スループット
+ リソース使用量
+ 競合(ロック待ち)
+ 消費時間(SQL実行)



※Webコンソールではモニタリングだけでなく、
　SQLの実行や、データのロード、管理設定なども実施できます。
　画面左上のメニューより、各機能の画面へ遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174250/baad1fa5-0cad-397d-69e5-56ed46b8e341.png)


さらに画面上の各タブも、様々な項目があります。
ここから 各項目における詳細なモニタリングが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174250/5bbe7e9a-1375-a631-32ff-0fe4623a67a7.png)

各モニタリング項目で、
期間を選択してモニタリング情報を表示させたり、
CSV形式でエクスポートすることもできます。


## 2. MON_GET表関数

Db2と同じく、**Db2 on Cloud**・**Db2WoC**でも **MON_GET表関数**　を使用することができます。

MON_GET表関数を使用して、システムの動作やパフォーマンスに関する さまざまなモニタリング情報を取得できます。

MON_GET表関数は、
Webコンソール上のSQL実行を使用したり、**Db2 on Cloud**・**Db2WoC**へクライアント接続して 実行します。

それ以外にも、Db2 on Cloud・WoCへクライアント接続して実行することも可能であり、クライアントから、モニタリングしたデータを収集・保存して、
日常的な稼働状況の監視を行ったり、
問題判別時に収集したデータをもとに調査を行うなどの活用ができます。

(参考)
・[Db2 on Cloud]モニター・プロシージャーおよび関数
https://www.ibm.com/docs/ja/db2oc?topic=views-monitor-procedures-functions
・[Db2 Warehouse on Cloud]モニター・プロシージャーおよび関数
https://www.ibm.com/docs/ja/db2woc?topic=views-monitor-procedures-functions

## 3. イベントモニター

Db2と同じく、**Db2 on Cloud**・**Db2WoC**でも **イベントモニター**を使用することができます。

特定イベントが発生したときだけ、システムに関する情報を取得したい場合は、**イベント・モニター**を使用します。

**CREATE EVENT MONITOR**ステートメントで、イベント・モニターを作成し、
**SET EVENT MONITOR**ステートメントでイベント・モニターを活動化します。



(参考)
・[Db2 on Cloud]　イベント・モニター
https://www.ibm.com/docs/ja/db2oc?topic=monitoring-event-monitors
・[Db2 Warehouse on Cloud] イベント・モニター
https://www.ibm.com/docs/ja/db2woc?topic=monitoring-event-monitors

## 4. 監査機能

Db2と同じく、**Db2 on Cloud**・**Db2WoC**でも **監査機能**を使用することができます。

監査機能で、事前定義したデータベースのイベントに対して監査証跡を生成し、その監査証跡をモニターします。

**CREATE POLICY**コマンドで、現行サーバーの監査ポリシーを定義し、監査するカテゴリーを指定し、
**AUDIT**コマンドで　オブジェクトで使用する監査ポリシーを紐づけます。

**Db2 on Cloud**・**Db2WoC**では、あらかじめ**AUDIT_ALL**ポリシーが用意されています。
これはデータベース内すべてのアクティビティーをキャプチャーするポリシーで、多くのリソースが消費されるので、なるべくユーザー側で要件に合わせたポリシー定義が推奨されます。


(参考)
・[Db2 on Cloud]　監査ポリシーの指針
https://www.ibm.com/docs/ja/db2oc?topic=features-audit-policy-guidelines
・[Db2 Warehouse on Cloud]　監査ポリシーの指針
https://www.ibm.com/docs/ja/db2woc?topic=features-audit-policy-guidelines

## 5. その他

**Db2 on Cloud**・**Db2WoC**ではOSコマンドでの リソースの状況をモニタリングすることはできませんが、
OSコマンドの代わりとして、**ENV_GET_SYSTEM_RESOURCES表関数**を使用して、オペレーティング・システム、CPU、メモリーなどの情報を取得することもできます。
(※この関数は**Db2**でも実行可能です。）

(参考)
・[Db2 on Cloud] ENV_GET_SYSTEM_RESOURCES 表関数 - システム情報を戻す
https://www.ibm.com/docs/ja/db2oc?topic=erv-env-get-system-resources-table-function-return-system-information
・[Db2 Warehouse on Cloud] ENV_GET_SYSTEM_RESOURCES 表関数 - システム情報を戻す
https://www.ibm.com/docs/ja/db2woc?topic=erv-env-get-system-resources-table-function-return-system-information

# おわりに

今回は、Db2製品ごとのモニタリング/監視 について 解説しました。

Db2 on Cloud・Db2WoCは クラウドマネージドサービスであるため、
従来のオンプレミスのDb2とは異なり、
データベースサーバーにログインしてOSコマンドを使用することができません。

一方、Webコンソールを利用して、
GUI画面より様々なモニタリングを 手軽に行うことができるようになっています。

運用にあたっては、
各製品において使用できる機能を把握し、モニタリング・監視の方法を検討していく必要があります。


# 参考情報

・Db2 v11.5
https://www.ibm.com/docs/ja/db2/11.5

・IBM Db2 on Cloud
https://www.ibm.com/docs/ja/db2oc

・IBM Cloud資料：Db2 on Cloud
https://cloud.ibm.com/docs/Db2onCloud

・IBM Db2 Warehouse on Cloud
https://www.ibm.com/docs/ja/db2woc

・IBM Cloud資料：Db2 Warehouse on Cloud
https://cloud.ibm.com/docs/Db2whc