📊

RDS Oracleの使用状況(使用率/断片化情報)をダッシュボードで整理する方法

2023/07/13に公開
目次
  1. RDS Oracleの概要
  2. RDS Oracleとオンプレミスデータベースの違い
  3. データベース容量と断片化
  4. RDS Oracleでのデータベース容量と断片化の確認
  5. ダッシュボードの利用
  6. まとめ

1.RDS Oracleの概要

RDS (Relational Database Service) は、Amazon Web Services (AWS) が提供するマネージド型リレーショナルデータベースサービスです。RDSは、データベース設定、パッチ適用、バックアップ、フェイルオーバー、スケーリングなどの日常的な運用を自動化することで、ユーザーがデータベース管理にかける手間を軽減します。

RDS Oracleは、RDSサービスの一部としてOracleデータベースを提供します。このサービスを利用することで、ユーザーはOracleデータベースの運用とメンテナンスに関する負担を減らし、よりアプリケーション開発やビジネスの核心的な部分に注力することが可能になります。

2.RDS Oracleとオンプレミスデータベースの違い

RDS Oracleでは、データベースの物理的な管理(ハードウェア、ストレージ、OS等)や、バックアップ、パッチ適用といった運用作業はAWSが行います。したがって、RDSのDBAはこれらのタスクから解放され、より高度なタスクやビジネス価値のある活動に注力できます。これは、データベース管理のコストと複雑さを大幅に削減することを可能にします。

ただし、RDSではDBAが制御できる範囲には制限があります。例えば、RDSではOSレベルでのアクセスや、一部のDBAビューへのアクセスが制限されています。また、特定のDBパラメータはAWSが管理するため、変更が許可されていません。このような制限は、DBAが完全な制御を必要とする特定の状況では制約となる可能性があります。

RDS Oracleを利用する場合、AWSからのアップデート情報を日頃から収集する必要がありそうです。
(実際の頻度や内容については未確認)

2.データベース容量と断片化

データベースの「断片化」は、データが物理的に離散的に保存されている状況を指します。データベースが長期間使用されていると、データの追加、更新、削除が繰り返されることで、データの配置が最適でなくなり、断片化が発生します。

具体的には、以下の2種類の断片化があります:

  1. 内部断片化: データベースの単一のブロック(データの保存単位)内で空きスペースが非効率的に散在している状態を指します。つまり、一つのブロックに収まるはずのデータが、空きスペースが適切に利用できないために複数のブロックに分散されてしまうことがあります。

  2. 外部断片化: データベース全体にわたるデータの配置が最適でない状態を指します。特定のテーブルやインデックスのデータがディスク上で連続して配置されていないため、データの読み書きが非効率的になります。

断片化はデータベースのパフォーマンスに影響を与えます。断片化が進行すると、データの読み書きに必要なI/O操作が増え、クエリのパフォーマンスが低下します。また、データベースのストレージ使用量が無駄に増える可能性もあります。

断片化を解消するためには「再編成」または「デフラグメンテーション」を行います。この操作により、データが連続的に配置され、パフォーマンスが改善します。しかし、大きなデータベースに対する再編成は時間とリソースを大量に消費しますので、適切なタイミングで行うことが重要です。

4. RDS Oracleでのデータベース容量と断片化の確認

AWS RDS Oracleでは、一部のメトリクスをAmazon CloudWatchを通じて提供しており、容量やパフォーマンスに関する情報を取得することが可能です。しかし、断片化状況についての直接的なメトリクスは提供されていません。ただし、断片化状況はOracle自体の機能を使って調査することが可能です。

以下の手順でRDS Oracleの容量と断片化状況を整理することができます:

  1. DB容量: Amazon RDS DashboardやAmazon CloudWatchで容量に関するメトリクスを確認できます。特に、FreeStorageSpaceというメトリクスは利用可能なストレージ領域を表しています。

  2. 断片化状況: RDS Oracleにおける断片化の状況を調べるには、直接SQLコマンドを実行してデータベースの状況を確認する必要があります。たとえば、以下のようなコマンドでテーブルの断片化を確認することができます:

    SELECT TABLE_NAME, ROUND((BLOCKS*8),2) "Size (KB)", 
           ROUND((EMPTY_BLOCKS*8),2) "Empty (KB)",
           ROUND(((EMPTY_BLOCKS/BLOCKS)*100),2) "Empty (%)"
    FROM   USER_TABLES;
    

このSQLクエリは、OracleのUSER_TABLESディクショナリビューを使って、各テーブルの容量と、その中の空き領域の状況を確認するためのものです。USER_TABLESビューは、現在のユーザーが所有する(またはアクセスできる)テーブルに関する情報を含んでいます。

クエリの各部分について詳しく説明します:

  • TABLE_NAME: テーブルの名前を取得します。

  • ROUND((BLOCKS*8),2) "Size (KB)": BLOCKS列は、各テーブルがデータベース内で使用しているブロック数を表示します。通常、Oracleのデータブロックのサイズは8KB(ただし、DBAが設定したブロックサイズに依存)なので、BLOCKS*8によって各テーブルの大体のサイズ(KB)を算出しています。

  • ROUND((EMPTY_BLOCKS*8),2) "Empty (KB)": EMPTY_BLOCKS列は、各テーブルの空きブロック数を表示します。これも8倍することで、その空き容量(KB)を算出しています。

  • ROUND(((EMPTY_BLOCKS/BLOCKS)*100),2) "Empty (%)": 空きブロック数を全ブロック数で割ることで、各テーブルの空き領域の割合(パーセント)を算出しています。つまり、テーブル内の断片化の度合いを見ることができます。

ROUND関数は、指定した精度(ここでは小数点以下2桁)で数値を丸めるために使っています。

このクエリにより、各テーブルの使用容量と空き容量(断片化状況)を確認することができます。ただし、これはあくまで一例であり、より詳細な断片化状況を調査するには、Oracleの他のビュー(DBA_TABLES, DBA_INDEXES, DBA_SEGMENTSなど)を使用したり、Oracleの組み込みパッケージ(DBMS_SPACE, DBMS_STATSなど)を利用することもあります。

5. ダッシュボードの利用

これらの情報をダッシュボードに整理したい場合、以下のようなオプションがあります:

  1. AWS Management Console: AWSの標準ツールを使う場合、Amazon RDS DashboardとAmazon CloudWatch Dashboardを組み合わせて使用することができます。ただし、断片化情報は直接表示することはできません。

  2. Custom Dashboard Tools: カスタムダッシュボードツール(例:Grafana)を使えば、CloudWatchのメトリクスと、RDSインスタンスに対するカスタムクエリの結果を組み合わせて表示することが可能です。この方法を採用する場合、Oracleから断片化情報を定期的に取得し、それを適切な形でダッシュボードに反映させる必要があります。

  3. AWS QuickSight: AWSのビジュアル分析ツールであるQuickSightを使用することで、RDSとCloudWatchからのデータを視覚的に分析することが可能です。QuickSightはSQLクエリをサポートしているので、断片化情報を含めたカスタムメトリクスを作成することも可能です。
    前の項目で確認したような断片化情報を可視化するには、QuickSightから定期的にSQLクエリを叩くような運用になります。

6. まとめ

以上が、データベースの断片化とその影響についての基本的な説明です。各データベースシステムは異なる方式でデータを管理しているため、断片化の影響や対処方法はシステムによります。また、最新のデータベースシステムでは自動的に断片化を管理する機能を提供している場合もあります。

Discussion