第11回:SYSAUX表領域の肥大化

技術者向け・データベースの技術情報発信

はじめに

皆様、こんにちは。マルチDBソリューション部の望月です。

本日はOracleのSYSAUX表領域についてお話ししたいと思います。 Oracle Database 10g から登場したこのSYSAUX表領域ですが、オプション機能で使用するメタデータ(ディクショナリ情報)を格納する領域として使われています。

こちらのSYSAUX表領域については、運用してゆく中でSYSAUX表領域が肥大化してしまったというお話を何度も聞いたことがあります。業務データを格納する領域と異なり、事前に正確な使用量を出すことが難しく皆さん事前見積もりに苦労されているのではないでしょうか。お客様で実際にあった事例を紹介しましょう。

そのお客様では、常に最新の統計情報を取得したいという意向もあり一部のアプリケーションがデータの検索を行う際には必ず統計情報の再取得を行っていたそうです。

⇒結果としてSYSAUX表領域が90GB近くまで肥大化してしまった。

統計情報履歴の保持期間が設定されているにも関わらず・・・・。

統計情報をDBMS_STATSで取得している場合、デフォルトで31日まで履歴を保持しています。逆に言えば32日以上経過した統計情報履歴は削除されるはず。

⇒肥大化のためジョブがタイムアウトし、削除されるはずのデータが削除されないと判明。

設定されたジョブ以外でも、プロシージャを利用した削除方法を使い、削除対象期間を指定し過去の統計情報履歴を削除できる。(dbms_stats.purge_stats)

SQL>exec dbms_stats.purge_stats (to_timestamp('2019/05/30 23:59:59','YYYY/MM/DD HH24:MI:SS'));

統計情報履歴の削除期間を指定し削除を試みたが、対象レコードが膨大なため通常の削除では時間が掛かりすぎ削除ができない。

⇒データ肥大化のため削除に時間が掛かりすぎるため削除出来ない。

統計情報履歴を一括でPURGEする。

OracleのプロシージャにはPURGE_ALLも用意されており統計情報履歴を一括で削除する場合にはこれを利用することが出来る。(Oracle 11.2.0.3 以降で利用可能)

SQL> exec dbms_stats.purge_stats (DBMS_STATS.PURGE_ALL);

90GBだったSYSAUX表領域の使用率は40GB程まで減少!

SYSAUX表領域を日頃から管理する。

前述したように、SYSAUX表領域は業務データが格納される領域ではありません。
その代わり、Oracleの稼働統計やAWR(Automatic Workload Repository)の スナップショットなどが自動で格納される領域です。Oracleは履歴データのような情報も日々収集しているため、自動メンテナンスに 不備がある場合は今回のようなSYSAUX表領域の肥大化が発生することがあります。
他の領域のように、SYSAUX表領域の増加傾向を事前に把握しておくことをお勧めします。