OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

【WebFOCUS、Vertica】キラークエリが発行された場合の対策(自動操作)

公開日:
更新日:
その他
#WebFOCUS TurboV

はじめに

本記事はWebFOCUS TurboVを利用しているユーザ様内で、エンドユーザー様が誤った操作を行いキラークエリを発行してしまった際にWebFOCUSとVerticaでそれぞれ各レイヤで行える操作や対策についてまとめています。

各レイヤでリクエストに対して、実施できる自動実行処理について

下記表はリクエストの状態確認や、リクエストへの停止処理・通知など、リクエストの状態に応じたアクションなどの自動実行についてまとめています。

処理レイヤ

処理単位

概要

可能操作

Webブラウザ

WebFOCUS Client

WebFOCUS Reporting Server

リクエスト

データサービス単位で処理時間のタイムアウトを設定

タイムアウトでの中断処理のみ 通知機能は保持していない コマンドの標準出力へエージェントの状態を出力できるため、出力内容の加工やチェックロジックを別途作成することで自動化することは実現できる可能性がある

リクエスト単位で検索件数を制御

リクエスト

 リクエスト単位で検索結果件数によるフィルタを設定する(検索は実施されてしまう)

 –

Vertica

SQL セッション

SQLセッション単位で閾値を設定

閾値を超えたクエリについて通知 中断機能は保持していない SQLでシステムテーブル(query_requests)を参照してアクション

ここから、各レイヤで実施可能な自動操作処理について、解説していきます。

WebFOCUS Reporting Server

コマンドプロンプトでWebFOCUSエージェント状態を確認することができます。エージェントの状態をロギングしたり、特定の値に対してアクションを検討することができます。

実行方法

Windows環境の場合

ドライブ:\WebFOCUSインストール先\ibi\srv82\wfs\bin\edastart -showagents

DOS> C:\ibi\srv82\wfs\bin\edastart -showagents

Linux環境の場合

WebFOCUS導入先/ibi/srv82/wfs/bin/edastart -showagents

$ /home/webfocus/ibi/srv82/wfs/bin/edastart -showagents

※本コマンドの詳細については、以下をご参照ください。

レポーティングサーバのエージェント状態をコマンド出力する

https://fobi.ashisuto.co.jp/tech/sample/edashowagents/

出力される情報例

エージェントID、サービス名、状態、ユーザ名、グループ名、クライアントIPアドレス、プロシジャ名、シノニム名、DBMS件数、DBMS時間、応答時間、アダプタ名、テーブル名、メモリ使用量、ディスク使用量、プロセスID など

※出力される情報例はReporting Serverのワークスペースで得られる情報と同様です。

 

出力された情報の利用例

定期実行してCSV等のフラットファイルへロギングする

 WebFOCUSからデータとして検索も可能。
 過去データから推移等の傾向を確認することも可能。

 

定期実行して出力結果から任意の値を抽出して確認

 任意の値を確認して、しきい値に従ってアクション
  アクション例
  ・メールを配信(OS側コマンドにて実装)
  ・該当エージェントを強制的に終了する(WebFOCUSコマンドにて実装)
  ・状態をCSV等のフラットファイルへロギングする(OS側コマンドにて実装)

 

※ 複数のアクションも実装は可能
  エージェントを中断した場合は、ユーザ画面へ中断されたメッセージが表示される。通常、エージェントが終了した場合は、DBへのリクエストも終了する。

シノニム単位での検索件数制御

シノニム単位で検索件数を制御し、件数を絞ることでWebFOCUSにかかる負荷軽減や大量の画面描画の防止に寄与します。

リクエストの共通設定として定義

-SET &RLIMIT = 10000;
FILTER FILE シノニム名
NAME=フィルター名
WHERE READLIMIT EQ &RLIMIT
END
SET FILTER=フィルター名 IN シノニム名 ON

指定した行数で打ち切る設定をSQL文へ強制的にLIMIT句を付与することが可能。

実行されるSQL例

SELECT T1."品コード", SUM(T10."標準原価")
FROM "CHCー取引明細" T1, CHC品" T10 WHERE (T10."品コード" = T1."品コード")
GROUP BY T1."品コード"
ORDERBY T1."品コード"LIMIT 10000;

懸念事項

LIMIT句を付与することは、SQL文としては正しい処理内容であり、データベースへの接続処理としては正常に終了し、WebFOCUSの処理としても正常に終了するため、利用者に返されるレポート結果が、打ち切られた結果なのかの判断が困難となることが想定される。
10,000件に制限した場合、検索結果が10,000件以上なのかの判断がつかない。

Vertica

実行されているSQLクエリの実行時間を定期的にチェックして、しきい値を超えたクエリに関しては、メールで通知することができます。

メール通知の詳細については、以下の記事をご参照ください。

Management ConsoleのEmailアラート機能を利用する方法(10~12)
https://www.ashisuto.co.jp/cm/analytics-database/mc_email_alert_11-0_later.html

Management ConsoleのEmailアラート機能を利用する方法(23.3)
https://www.ashisuto.co.jp/cm/analytics-database/mc_email_alert_23-3.html

Management ConsoleのEmailアラート機能を利用する方法(23.4以降)
https://www.ashisuto.co.jp/cm/analytics-database/mc_email_alert_23-4_later.html

検証バージョンについて

この記事の内容はWebFOCUS 8.2.06、Vertica 9.3 で確認しています。

更新履歴

2021/2/25 本記事を公開