データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

Oracle® 10gでは、PERMANENTREAD WRITEEXTENT MANAGEMENT LOCALSEGMENT SPACE MANAGEMENT AUTOといった必須属性を持つ新しい必須表領域「SYSAUX」が導入されました。本記事では、SYSAUX表領域が成長した際の管理方法について詳しく解説します。

はじめに

SYSAUX表領域を活用することで、以下のようなメリットが得られます。

  • オプション機能のインストール・アンインストールに起因するSYSTEM表領域の断片化を防止できる。
  • SYSTEM表領域の破損や容量不足のリスクを回避できる。
  • データベース管理者(DBA)の保守作業を軽減できる。
  • 以下のようなOracleのオプションや機能に関連する補助的なデータベースメタデータを一元化して格納できる。
SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

SYSAUXの占有者(Occupants)

SYSAUXには26種類の占有者(occupant)が存在し、次のクエリで確認できます。

SQL> select OCCUPANT_NAME,OCCUPANT_DESC
     from V$SYSAUX_OCCUPANTS
     order by SPACE_USAGE_KBYTES desc
SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

その後のOracle Databaseのバージョンでは、さらに多くのコンポーネントが追加されています。次の画像をご覧ください。

SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

次の画像は、各Oracle Databaseバージョンで追加または廃止されたコンポーネントを示しています。

SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

予防的なSYSAUX表領域の管理

SYSAUX表領域を事前に監視・管理するには、以下の操作を実施します。

  1. SYSAUX表領域をAUTOEXTEND offに設定します。

  2. STATISTICS_LEVELパラメータの値を確認します。
    ALLはリソースを大量に消費する場合があり、BASICTYPICALは比較的少ないリソースで済みます。

  3. アドバイザ、ベースライン、SQLチューニングセットの使用状況を確認します。アドバイザは、スナップショット範囲を削除する予定がある場合でも、スナップショット内の情報を保持する必要があります。

  4. どのsysaux_occupantがSYSAUX表領域内で最も多くの領域を消費しているかを特定するクエリを実行します。

SYSAUX表領域肥大化への対処

SYSAUX表領域が肥大化する主な原因は以下のとおりです。

  • 保持期間を過度に長く設定している。
  • セグメントアドバイザが大きくなりすぎている。
  • アクティブセッション履歴(ASH)が大きくなりすぎている。

以下のセクションでは、それぞれの具体的な対処方法を紹介します。

AWR保持期間の確認

まず、自動ワークロードリポジトリ(AWR)スナップショットの保持期間を確認しましょう。AWRは問題検出やパフォーマンスチューニングのためのパフォーマンス統計を収集し、その詳細をメモリおよびデータベース表に保存します。保存されたデータは保持期間に基づいてシステムにより削除されるため、保持期間が長すぎるとSYSAUX表領域を大量に消費します。適切な保持期間を設定することが重要です。以下のクエリで保持期間を確認できます。

SQL> SELECT retention FROM dba_hist_wr_control;

保持期間はDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGSプロシージャを使用して手動で変更できます。次の例では、保持期間を5760分(4日:4日 × 24時間 × 60分 = 5760分)に設定しています。

SQL> execute DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT(RETENTION=>5760);

SYSAUX表領域内の最大オブジェクトの確認

次のクエリを実行して、表領域内で最も大きな占有者を特定します。

SQL> select OCCUPANT_NAME, SCHEMA_NAME, MOVE_PROCEDURE, SPACE_USAGE_KBYTES
     from v$sysaux_occupants;
SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

MOVE_PROCEDUREがnullでない場合は、moveプロシージャコマンドを使用して占有者を別の表領域へ移動できます。

次の例では、WKSYS占有者をXYZ表領域へ移動しています。

SQL> execute WKSYS.MOVE_WK('XYZ');

アクティブセッション履歴(ASH)の確認

次のスクリプトを使用して、ASHがAWRデータ内で過剰な領域を消費していないかを確認します。

SQL> @$ORACLE_HOME/rdbms/admin/awrinfo.sql
SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

ASHの使用率は1.1%程度であれば許容範囲です。それより高い場合は、孤立したASH行を削除します。次のクエリで孤立行の有無を確認できます。

SQL> SELECT COUNT(1) Orphaned_ASH_Rows FROM wrh$_active_session_history a
     WHERE NOT EXISTS (SELECT 1 FROM wrm$_snapshot WHERE snap_id  = a.snap_id
     AND dbid= a.dbid AND instance_number = a.instance_number);
SYSAUX表領域を管理する:Oracleデータベースの監視と対処ガイド

結果がゼロより大きい場合は、次のクエリで孤立行を削除します。

SQL> DELETE FROM wrh$_active_session_history a WHERE NOT EXISTS
     (SELECT 1 FROM wrm$_snapshot WHERE snap_id = a.snap_id
     AND dbid = a.dbid AND instance_number = a.instance_number);

その後、次のクエリを実行してWRH$_ACTIVE_SESSION_HISTORY表を縮小し、解放された領域を回収します。

SQL> alter table WRH$_ACTIVE_SESSION_HISTORY shrink space;

まとめ

本記事では、SYSAUX表領域の概要を紹介するとともに、デフォルトの占有者による領域増加の監視・管理方法や、誤って格納された非デフォルトオブジェクトの特定方法について解説しました。

データベースサービスの詳細については、ぜひお気軽にお問い合わせください。

フィードバックタブからコメントやご質問をお寄せください。私たちとの対話も歓迎いたします。


  1. ObjectRocketサービスでPostgreSQL拡張機能を管理する方法

    本記事は2020年2月13日にObjectRocket.com/blogで公開された内容をもとにしています。 PostgreSQL®(Postgres®)の拡張機能エコシステムは非常に充実しており、Postgresに多彩な追加機能をもたらします。拡張機能を活用することで、標準のPostgresにはない高度なデータ型や関数、運用支援ツールなどを利用できるようになります。 ObjectRocketでは、本番環境のデータベースを運用するために必要なツールをすべて提供したいと考えており、このたび拡張機能を利用できるようにしました。拡張機能はプラグインのように動作し、追加の機能や特性をデータベースにも

  2. iOS 15でiPhoneのホーム画面を快適に管理する方法

    iPhoneのホーム画面は、気づけばアプリだらけになってしまうもの。幸い、散らかった状態を解消する方法はいくつも用意されています。アプリやウィジェットを移動したり、フォルダにまとめたり、ウィジェットを重ねて表示したりと、さまざまな整理術が使えます。 iOS 14ではホーム画面のページ全体を非表示にする機能が登場し、「Appライブラリ」の導入によって、アプリを削除せずにホーム画面から取り除くことも可能になりました。 iOS 15以降にアップデートしたばかりの方なら、さらに便利なホーム画面管理機能を活用できます。以下で詳しく解説していきます。 ホーム画面のページを削除する ほとんど使わ