自己管理機能によって変わる領域管理

図9●自動メモリー管理機能の使用例
図9●自動メモリー管理機能の使用例
データベースの利用状況に応じてメモリー配分の変更を自動的に行うことができる。インスタンスで利用可能なメモリーの合計量を指定するだけで,オンライン・トランザクション処理中とバッチ処理中でメモリーのサイズ指定を自動的に変更してくれる
 Oracle Database 10gでは,DBサーバーの領域使用率を監視するため,既存アプリケーションの変更なしにチェックを行う機能を実装している。Oracle Database 10gは,通常の領域使用率を自動的に監視し,利用可能な空き領域が事前に定義したしきい値を下回ると管理者に警告する*8。データベースで領域関連の特定のイベントが発生すると,Server Generated Alertsを使用して通知され,ユーザーは必要なときにすぐ領域使用率に関する情報を利用できる。

アドバイザ機能で断片化を防止

 オブジェクト領域アドバイザは,内部断片化を極力抑えるような表領域の作成を支援する。これにより,領域の過剰な割り当てやセグメントの内部断片化や行連鎖を防止できる。オブジェクト領域アドバイザは,索引を持つ表だけでなく,索引構成表にも使用可能である。多くのデータベースは,時間と共に変化する。変化の度合いを調べるために,Oracle Database 10gでは,過去の領域使用率をAWRで追跡し,その情報をもとに将来のリソース要件を予測することもできる。

 さらにOracle Database 10gは,データ縮小の候補となるセグメントを簡単に見つけるために,セグメント・アドバイザを搭載する。セグメントを縮小すると,セグメント内の使用済み領域を圧縮し,未使用の領域が表領域内の他のセグメントで利用できるようになる。この結果,クエリーのパフォーマンス向上が見込まれる。セグメント・アドバイザは,個々のオブジェクトの成長傾向分析を実行し,そのオブジェクトには7日後に追加領域が残されているかを判断し,再生領域ターゲットを使用して縮小の候補となるオブジェクトを選択する。割り当て解除された領域は表領域に戻り,表領域内の他のオブジェクトで使用できる。

 セグメント縮小では,自動セグメント領域管理を行っている表領域で行移動が有効化されているときに,ヒープ,IOT,LOB,マテリアライズド・ビューおよび索引が処理される。索引を持つ表でセグメント縮小を実行すると,圧縮のために行が移動されても索引は自動的に保持される。しかし,圧縮は純粋に物理操作であり,アプリケーションに影響を与えないため,ユーザー定義のトリガーは起動されることはない*9


自己管理機能によって変わるメモリー管理

 DBAはメモリー使用の最適化に多くの時間を割いている。Oracle Database 10gの自己管理に関する主要な新機能の1つが,自動共有(SGA)メモリー管理である(図9[拡大表示])。この機能を使用すると,Oracleデータベース・インスタンスが使用する共有メモリーの管理をデータベース自身の経験則に基づいてワークロードの需要に応じたメモリー配分の監視および変更を自動的に行う。DBAは共有メモリーに関する設定を手作業で行う必要はない。Oracle Database 10gでは,新しいパラメータSGA_TARGETを使用して,インスタンスで利用可能なSGAメモリーの合計量を指定するだけで,利用可能なメモリーが必要に応じて各コンポーネントに自動的に配分される機能を提供する。自動共有メモリー管理を有効化すると,共有プール,Javaプール,ラージ・プール,バッファ・キャッシュのサイズが自動的に指定される。

 これらのコンポーネントのパラメータはデフォルトでゼロに設定され,各コンポーネントでメモリーが必要になると,内部の自動チューニング・メカニズムを介して,配分される。各コンポーネントのパフォーマンスもOracleインスタンスが監視する。インスタンスは内部ビューと統計を使用して,自動的にサイズ指定された各コンポーネントにメモリーを最適に配分する方法を決定する。ワークロードの変化に応じてメモリーが再配分され,新しいワークロードのパフォーマンスは常に最適化された状態にする*10

 自動チューニングされたコンポーネントのサイズを停止後も保持するには,サーバー・パラメータ・ファイル(SPFILE)を使用する。システムは特性ワークロードを毎回初めから調べる必要がなくなり,最後に停止した場所から再開することになる。

 自動共有メモリー管理を使用するメリットは,ユーザーの介在なしに,SGAコンポーネントのサイズをワークロードの必要性に応じて柔軟に調整できることである。リソースの追加や手作業によるチューニング作業を必要とせず,1つのパラメータを設定すればよいだけなので,管理者の作業も大幅に簡素化する。DBAはインスタンスが利用できるSGAメモリーの量を指定すればよいだけであり,個々のコンポーネントのサイズを計算する必要はない。手作業による構成では,共有メモリーのサイズ不足が原因で,コンパイル済みのSQL文が共有プール外に置かれたまま古くなったり,人的ミスが生じたりすることもあるが,こうした問題を防止する効果もある。

(山本哲也 = 日本オラクル マーケティング本部
システム製品マーケティンググループ担当マネジャー)