Database Support Blog

データ・ディクショナリ・ビューを使用したデータベースの監視

Oracle Databaseの各種稼働統計を出力するDBA_HIST_XXXXビューの参照は、原則としてOracle Enterprise Edition + Diagnostics Packのライセンスが必要です。ただし、幾つかのビューはライセンスがなくても利用できます。

今回はSEでも利用できるディクショナリビューを元に、データベースのアクティビティを監視するためのサンプルSQLを紹介します。

オプションライセンスがなくても稼働統計を見ることができる

Oracle Databaseの各種統計を出力するDBA_HIST_XXXXビューは、基本的にDiagnostics Packのオプションライセンスが必要です。ただし、幾つかのビューはライセンスがなくても利用できます。

Oracle® Enterprise Managerライセンス情報ユーザー・マニュアル

接頭辞DBA_HIST_で始まるすべてのデータ・ディクショナリ・ビューおよびその基礎となる表は、このパックのライセンスを必要とします。例外は、DBA_HIST_SNAPSHOT, DBA_HIST_DATABASE_INSTANCE, DBA_HIST_SNAP_ERROR, DBA_HIST_SEG_STAT, DBA_HIST_SEG_STAT_OBJ,およびDBA_HIST_UNDOSTATビューです。これらは、Oracle Diagnostics Packライセンスなしで、またはStandard Editionライセンスとともに使用できます。

https://docs.oracle.com/cd/E26854_01/doc.121/b66197/ch2_db_mgmt.htm#BABGAFHD

これらのディクショナリビューを使用することで、一部のデータベース稼働統計を過去8日分まで遡って確認できます。

サンプルSQL

DBA_HIST_UNDOSTAT にはUNDOの使用状況が10分単位で記録されていますので、次のようなSQLを実行することでUNDOの生成が多い時間帯が確認できます。※SE環境ではMAXQUERYSQLID→MAXQUERYIDとし、DBA_HIST_UNDOSTATではなく V$UNDOSTAT (インスタンス起動後過去4日分)を参照

 
 select
   BEGIN_TIME
   ,END_TIME
   ,UNDOBLKS            -- BEGIN-END間で使用されたUNDOブロック数
   ,MAXQUERYSQLID       -- 実行時間が最も長いSQL文のSQL識別子
   ,MAXQUERYLEN         -- 実行時間が最も長い問合せの長さ(単位:秒)
   ,ACTIVEBLKS          -- アクティブなUNDOブロック数
   ,UNEXPIREDBLKS       -- コミット後、保存期間内のUNDOブロック数
   ,EXPIREDBLKS         -- コミット後、保存期間経過後のUNDOブロック数
   ,TUNED_UNDORETENTION -- 自動調整された保存期間(単位:秒)
 from DBA_HIST_UNDOSTAT
 order by BEGIN_TIME;
 

また、 DBA_HIST_SEG_STAT にはセグメントレベルでの統計情報が格納されています。DBA_HIST_SEG_STATで確認できるLOGICAL_READS_DELTA/PHYSICAL_READS_DELTAといったデルタ値は、 DBA_HIST_SNAPSHOT のBEGIN_INTERVAL_TIMEからEND_INTERVAL_TIMEまでの差分です。

これらのディクショナリは1時間ごとの情報が出力されているため、次のようなSQLを実行することでオブジェクトごとの物理読み込み、論理読み込み、物理書き込みを時間単位で確認できます。出力量が多い場合はWHERE句の条件に DBA_HIST_SEG_STAT_OBJ のOWNERやOBJECT_TYPEを追加することで調整します。

 
 select 
   sn.BEGIN_INTERVAL_TIME, 
   sn.END_INTERVAL_TIME, 
   sso.OBJECT_NAME,         -- オブジェクト名
   sso.OBJECT_TYPE,         -- オブジェクトタイプ
   ss.LOGICAL_READS_DELTA,  -- BEGIN-END間の論理読み込み(単位:ブロック)
   ss.PHYSICAL_READS_DELTA, -- BEGIN-END間の物理読み込み(単位:ブロック)
   ss.PHYSICAL_WRITES_DELTA -- BEGIN-END間の物理書き込み(単位:ブロック)
 from 
   DBA_HIST_SEG_STAT ss, 
   DBA_HIST_SNAPSHOT sn, 
   DBA_HIST_SEG_STAT_OBJ sso
 where 
   ss.OBJ# =sso.OBJ#
   and ss.DATAOBJ# =sso.DATAOBJ#
   and ss.SNAP_ID = sn.SNAP_ID
 order by 
   ss.SNAP_ID;
 

DBA_HIST_SEG_STATとDBA_HIST_SEG_STAT_OBJは表領域の情報を保持していますので、表領域単位でも物理読み込み、論理読み込み、物理書き込みを確認できます。

 
 select 
   sn.END_INTERVAL_TIME,
   sgso.TABLESPACE_NAME,                          -- 表領域名
   sum(sgs.LOGICAL_READS_DELTA) LOGICAL_READS,    -- BEGIN-END間の論理読み込み(単位:ブロック)
   sum(sgs.PHYSICAL_READS_DELTA) PHYSICAL_READS,  -- BEGIN-END間の物理読み込み(単位:ブロック)
   sum(sgs.PHYSICAL_WRITES_DELTA) PHYSICAL_WRITES -- BEGIN-END間の物理書き込み(単位:ブロック)
 from 
   DBA_HIST_SEG_STAT sgs, 
   DBA_HIST_SNAPSHOT sn, 
   DBA_HIST_SEG_STAT_OBJ sgso 
 where 
   sgs.SNAP_ID = sn.SNAP_ID 
   and sgs.DBID = sn.DBID 
   and sgs.TS# = sgso.TS#
   and sgs.OBJ# = sgso.OBJ#
 group by 
   sn.END_INTERVAL_TIME, 
   sgso.TABLESPACE_NAME 
 order by 
   sn.END_INTERVAL_TIME;
 

これらのSQLを利用し、ある時間帯で特定表領域やオブジェクトに対するアクセスが非常に多くなるなどのデータベースの稼働傾向を知ることができます。情報の保持期限は8日ですので、週に1回、定期取得しておくことでパフォーマンスダウン発生の予兆検知や原因調査に利用できます。

Oracle Database 12.2であれば"SET MARKUP CSV ON"、Oracle Database 12.1以下であれば次の例のようにパイプを使用してCSV出力させるとツールを使用した確認が容易になります。

 
 set pages 0
 set lines 32767
 set trims on
 set feedback off
 set echo off
 spool undostats.csv 
 select
   '"'||to_char(begin_time,'YYYY/MM/DD HH24:MI:SS')||'","'||to_char(end_time,'YYYY/MM/DD HH24:MI:SS')||'","'||UNDOBLKS||'","'||MAXQUERYSQLID||'","'||MAXQUERYLEN||'","'||ACTIVEBLKS||'","'||UNEXPIREDBLKS||'","'||EXPIREDBLKS||'","'||TUNED_UNDORETENTION||'"'
 from dba_hist_undostat
 order by begin_time;
 spool off
 

まとめ

パフォーマンスダウンはデータ量や実行計画の変化によるアクセスブロックの増加に依存することも少なくありません。AWRやSTATSPACKでの調査も可能ですが、特にSTATSPACKの場合はAWRのようにEnterprise Managerでの操作ができず、時間帯ごとに出力したテキストファイルを目視で比較する必要があるため調査に苦労します。

今回ご紹介したDBA_HIST_XXXXなどの結果(CSVファイル)を弊社で取り扱っているBIツールの QlikSense で表示させると、次のように直感的にデータを見ることが可能です。時間帯ごと、表領域ごとなど条件指定も画面をクリックするだけで可能です。

AWRが利用できない環境ではSTATSPACKの補助として今回の情報を取得しておくと、どのオブジェクトが問題になっているといったパフォーマンスダウン発生時の一次調査に役立ちます。

Qlik製品の 入門コース のセミナーを受けた直後の筆者が大体30分程度で作成することができましたので操作は非常に容易です。次回は今回ご紹介したDBA_HIST_XXXXの情報を、無料で利用できるQlikSense Desktopを利用してデータベース稼働レポートを作成するサンプルを紹介します。


<<ここにQlick製品の資料請求はコチラ的なバナー>>

筆者情報

大野 高志

サービス事業部 付加価値創造部

2007年アシスト入社。Oracle Databaseのサポート業務を経て、サポートセンターに蓄積されたナレッジを使用したサービス開発の立ち上げに従事。現在は「アシストの超サポ」を広め、カスタマーエンゲージメントの構築を実現するための活動を行っている。


■本記事の内容について
 本記事に記載されている製品およびサービス、定義及び条件は、特段の記載のない限り本記事執筆時点のものであり、予告なく変更になる可能性があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • Oracle Database
  • Oracle Cloud
2025.12.25

Oracle Databaseユーザー必見!ZRCVで始めるランサムウェア対策

ランサムウェアの脅威からデータベースを守る!OCIのフルマネージドバックアップサービスZRCVは、3-2-1-1-0ルールに対応し、データ損失ゼロに近い復旧を実現します。本記事では堅牢な保護機能と、GUIで完結するわずか5ステップのシンプルな設定方法を解説します。

  • Oracle Database
2025.12.22

【Oracle Database】FAQを活用したDBエンジニア育成

本記事では、お客様の自己解決率向上のために注力したFAQ作成、および、そのFAQ作成をエンジニア育成に活用した当社ならではの取り組みをご紹介します。

  • Oracle Cloud
  • Oracle Database
2025.12.12

Oracle AI World2025視察記

今年もオラクル社の年次イベント「Oracle AI World 2025」が開催され、アシストからも11名の社員がラスベガス現地で参加しました。 本記事では「Oracle AI World 2025 視察記」として「Oracle AI World 2025のハイライト」と「アシストの注目ポイント」を、Oracle AI World 2025全体の雰囲気とともにお伝えします。

ページの先頭へ戻る