• 検索結果がありません。

使用の確認方法

ここではソート処理のディスク使用頻度とサイズを確認する以下の方法を説明します。

• V$SYSSTAT による使用頻度の確認手順 • V$SORT̲SEGMENT による使用サイズの確認手順

良いパフォーマンスを得るため、CREATE INDEX など全件ソートするような大量のデータを処理する場 合を除いて、できるだけメモリー上で処理が終わるように、SORT̲AREA̲SIZE を設定します。

ソート処理がディスクへの書き出しを行っているかどうかは、BSTAT/ESTAT(「第 5.4 節 REDO ログ・フ ァイルのサイズ見積もり」参照)を利用するか、V$SYSSTAT ビューを参照して確認します。

また専用一時表領域の場合、V$SORT̲SEGMENT ビューを参照すれば、ソート処理がディスク上に必要と したテンポラリー・セグメントのサイズを知ることができます。

V$SYSSTAT による使用頻度の確認手順

1. まず、インスタンス起動時からのディスクでのソート回数の統計値を確認します。

SQL> SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME='sorts (disk)';

NAME       VALUE

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ ‑‑‑‑‑‑‑‑‑

sorts (disk)      44 2. 確認したい処理を実行します。

3. 再度、インスタンス起動時からのディスクでのソート回数の統計値を確認します。

SQL> SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME='sorts (disk)';

NAME       VALUE

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ ‑‑‑‑‑‑‑‑‑

sorts (disk)      49

4. ステップ 3 で得た値(VALUE)からステップ 1 で得た値(VALUE)を引いた数が、ディスクに対 して発生した書き込み回数になります。この値が 0 になれば、実行した処理のソートはメモリー上 だけで行われたことになります。

ディスクへの書き込み回数 = ステップ 3 の VALUE − ステップ 1 の VALUE

今回は 5(= 49 ‑ 44)回のディスクへの書き込みが起きていることがわかります。

V$SORT̲SEGMENT による使用サイズの確認手順

(注意)この方法が行えるのは専用一時表領域だけです。

1. Oracle を起動します。

2. 確認したい処理を実行します。ここでは、sort̲test 表にインデックスを作成し、select order by を実行します。

SQL> CREATE INDEX PK̲SORT̲TEST ON SORT̲TEST(COL1);

索引が作成されました。

SQL> SELECT * FROM SORT̲TEST ORDER BY COL1;

(実行結果)

3. 次のコマンドを実行して、専用一時表領域にテスト運用時に必要とされたテンポラリー領域の サイズを求めます。次の列を参照します。

TABLESPACE̲NAME: 専用一時表領域の名前

MAX̲SORT̲SIZE: 個々のソートで使用されたエクステントの最大数 MAX̲SORT̲BLOCKS: 個々のソートで使用されたブロックの最大数

ここでは、TEMPORARY̲DATA が専用一時表領域です。

SQL> SELECT TABLESPACE̲NAME, MAX̲SORT̲SIZE, MAX̲SORT̲BLOCKS   2  FROM V$SORT̲SEGMENT WHERE TABLESPACE̲NAME = 'TEMPORARY̲DATA';

TABLESPACE̲NAME       MAX̲SORT̲SIZE MAX̲SORT̲BLOCKS

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ ‑‑‑‑‑‑‑‑‑‑‑‑‑ ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

TEMPORARY̲DATA      9      4635

この結果より、ステップ2で発生したソート処理が使用した専用一時領域の最大エクステント 数は9、最大ブロック数は 4635、すなわち 4635 * 2048 = 9492480 (Byte)だとわかります。

この結果と、本稼動における次の項目を考慮して本番で必要なソート領域を見積もってくださ い。

• データの増加量(データが増えれば、必要なソート領域も増加します)

• ソート処理の同時実行ユーザー数(各ユーザー毎にエクステントが確保されます)

テンポラリー・セグメントの管理のまとめ

テンポラリー・セグメントが使用されるとき

• データがメモリー(SORT_AREA_SIZE)に収まりきらないとき

− ソートが発生するような処理を行ったとき

− SQL文の実行計画がHASH JOINを選択したとき 使用する一時表領域の指定

• 必ず、ユーザー毎に、明示的に使用する一時表領域を指定 • テンポラリー・セグメントはそれ専用の一時表領域に格納 専用一時表領域

• Oracle7 R7.3から表領域を一時表領域専用に指定可能

• 一時領域(テンポラリー・セグメント)は削除されないのでパフォーマンス向上 • エクステントは自動的にすべて同じ大きさになる

• エクステントの管理はSGAで行われる テンポラリファイルを使用した専用一時表領域 • Oracle8i R8.1.5から指定可能

• 内部的にはローカル管理の表領域を使用 一時表領域のデフォルト記憶領域パラメータ

• INITIAL = NEXT = DB_BLOCK_SIZE + n * SORT_AREA_SIZE(n:整数)

1〜10MB程度が目安

− 専用一時表領域では、NEXTの値だけが利用される

− 専用一時表領域では、一つのエクステントは一人のユーザーが占有 • PCTINCREASE = 0

− 専用一時表領域では、自動的にPCTINCREASE = 0となる • 必要サイズは最大表サイズの2倍程度

一時表領域使用の確認方法

• BSTAT/ESTATまたはV$SYSSTATビューで使用頻度を確認

• V$SORT_SEGMENTビューで使用サイズを確認(専用一時表領域のとき)

5. REDO ログ・ファイルの管理

REDO ログ・ファイルは、データベースへの変更を記録したファイルで、障害からの回復に使用されます。

Oracle は最低 2 つの REDO ログ・ファイルを必要とし、複数の REDO ログ・ファイルを循環的に使用しま す。

REDO ログ・ファイルの設定次第では、良いパフォーマンスが得られなかったり、また障害回復に時間が かかる、といった問題が発生します。この章では、これらの問題を回避する REDO ログ・ファイル管理の ポイントを説明します。

関連したドキュメント