連載
» 2005年04月26日 00時00分 UPDATE

Oracleパフォーマンス障害の克服(8):表領域とディスクI/Oの要注意ポイント (1/2)

Oracleデータベースの運用管理者は、突発的に直面するパフォーマンス障害にどうやって対処したらよいか。本連載は、非常に複雑なOracleのアーキテクチャに頭を悩ます管理者に向け、短時間で問題を切り分け、対処法を見つけるノウハウを紹介する。対象とするバージョンはOracle8から9iまでを基本とし、10gの情報は随時加えていく。(編集局)

[高橋潤,@IT]

 本連載ではOracleの挙動に問題を発見したとき、どうやって原因を特定し解決策を導き出すかについて解説してきました。最終回となる今回は、領域とディスクに関する障害克服のテクニックを紹介します。

データファイルの物理構造と論理構造

 Oracleがデータファイルの内部をどのように利用しているのか、その構造を理解するのは領域の問題解決には欠かせません。


 Oracleはデータを階層構造によって管理しています。最上位にある「データベース(Database)」とは、「表領域(Tablespace)」の集まりです。表領域は1つまたは複数のデータファイルで構成されます。データベースの内容を物理的なデータファイルの視点からとらえた構造を「物理構造」と呼びます。

 これに対して、データを保存する単位に着目した構造を「論理構造」と呼びます。この場合、データは「セグメント」「エクステント」「データ・ブロック」から構成されます。つまり、「表領域」は1つ以上の「セグメント」から、「セグメント」は1つ以上の「エクステント」から、エクステントは連続した「データ・ブロック」から構成されています。さらに、セグメントはOracle内部に保存されたオブジェクトを示します。表や索引など、オブジェクトの管理とは、データ管理として考えるとセグメントの管理ということになります。

図1 Oracleのデータ管理構造 図1 Oracleのデータ管理構造

表領域の自動拡張を確認する

 表領域の自動拡張を設定していると、ハードディスクの容量に余裕がある場合はデータファイルの容量が自動的に拡張されるため、表領域がいっぱいになった場合でも問題なくデータベースを稼働させることができます。まずは自動拡張に設定されている表領域を確認し、表領域内の空き領域を調べてみましょう。

SQL> SELECT
        TABLESPACE_NAME,
        FILE_NAME,
        AUTOEXTENSIBLE
      FROM DBA_DATA_FILES
      WHERE TABLESPACE_NAME = '表領域名';
リスト1 表領域のフルパスと自動拡張の設定値の確認

r8fig02.gif 図2 リスト1の出力結果。AUTOEXTENSIBLE列が「YES」であれば、自動拡張が設定されている
SQL> SELECT
        SUM(BYTES) / 1024 || 'Kbytes' AS 空き領域サイズ
      FROM DBA_FREE_SPACE 
      WHERE TABLESPACE_NAME = '表領域名';
リスト2 表領域の空き容量の確認

図3 リスト2の出力結果 図3 リスト2の出力結果

エクステント数の確認

 次に表領域内に作成されるセグメント(表や索引などのオブジェクト)を構成するエクステントの数を確認してみましょう。ここで確認するエクステントの数が極端に多いと、各セグメントに設定されているエクステントのサイズに問題があることが考えられます。目安としては100以上のエクステント数を持つセグメントが多数あれば、パフォーマンスに悪影響を与えることがあります。特に索引のエクステントが多いと、RangeScanで検索するSQL処理でのパフォーマンスが低下します。

SQL> SELECT
        SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, EXTENTS
      FROM DBA_SEGMENTS
      WHERE TABLESPACE_NAME = '表領域名';
リスト3 各セグメント内に構成されているエクステント数の確認

図4 リスト3の出力結果(クリックすると拡大します) 図4 リスト3の出力結果(クリックすると拡大します)
SQL> SELECT
        SEGMENT_NAME, EXTENT_ID, FILE_ID, BLOCK_ID, BLOCKS
      FROM DBA_EXTENTS
      WHERE OWNER = 'オーナー名'
      AND SEGMENT_NAME = 'セグメント名';
リスト4 セグメントを構成するエクステントの確認

図5 リスト4の出力結果 図5 リスト4の出力結果

次ページへ続く)

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。