プライマリ・コンテンツに移動
Oracle® Database管理者リファレンス
11gリリース2 (11.2) for Linux and UNIX-Based Operating Systems
B56317-12
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 Oracle Databaseのチューニング

この章では、Oracle Databaseのチューニング方法について説明します。内容は次のとおりです。

8.1 チューニングの重要性

この項では、Oracle Databaseを効率的にチューニングし、パフォーマンスを最適化することを目的としています。チューニングを頻繁に行うことで、システム・パフォーマンスが強化され、データのボトルネックの発生を防ぐことができます。

データベースのチューニングを始める前に、「オペレーティング・システムのツール」で説明するツールを使用して、通常の動作を監視する必要があります。

8.2 オペレーティング・システムのツール

データベースのパフォーマンスを評価し、データベース要件を決定できるオペレーティング・システム・ツールがいくつかあります。これらのツールは、Oracleプロセスの統計に加えて、システム全体のCPU使用率、割込み、スワッピング、ページング、コンテキストのスイッチング、入出力についての統計情報も提供します。

この項では、次に示す共通のツールについて説明します。


関連項目:

これらのツールの詳細は、オペレーティング・システムのドキュメントおよびmanページを参照してください。

8.2.1 vmstat

プロセス、仮想メモリー、ディスク、トラップおよびCPUアクティビティを表示するときは、vmstatコマンドを使用します。表示内容はコマンドで切り替えます。CPUアクティビティのサマリーを5秒間隔で6回表示する場合は、次のいずれかのコマンドを実行します。

  • HP-UXおよびSolarisの場合

    $ vmstat -S 5 6
    
  • AIXおよびLinuxの場合

    $ vmstat 5 6
    

次に、このコマンドをHP-UXで実行した場合の出力例を示します。

procs     memory            page            disk          faults      cpu
 r b w   swap  free  si  so pi po fr de sr f0 s0 s1 s3   in   sy   cs us sy id
 0 0 0   1892  5864   0   0  0  0  0  0  0  0  0  0  0   90   74   24  0  0 99
 0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   46   25   21  0  0 100
 0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   47   20   18  0  0 100
 0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  2   53   22   20  0  0 100
 0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   87   23   21  0  0 100
 0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   48   41   23  0  0 100

procs列の下にあるwサブ列は、スワップ・アウトされてディスクに書き込まれたプロセスの数を示します。値が0(ゼロ)以外の場合は、スワッピングが発生してシステムがメモリー不足になっています。

page列の下にあるsi列およびso列は、それぞれ1秒当たりのスワップ・インとスワップ・アウトの回数を示します。スワップ・インとスワップ・アウトは、常に0(ゼロ)にしてください。

page列の下にあるsr列は、スキャン率を示します。利用できるメモリーが不足すると、スキャン率が高くなります。

page列の下にあるpi列およびpo列は、それぞれ1秒当たりのページインとページアウトの回数を示します。ページインおよびページアウトの回数は通常、増加します。使用できるメモリーが十分にあるシステムでも、常に多少のページングは行われます。


注意:

vmstatコマンドの出力は、プラットフォーム間で異なります。


関連項目:

出力の解釈については、manページを参照してください。

8.2.2 sar

オペレーティング・システムのアクティビティ・カウンタの累計を表示するときは、sar(system activity reporter)コマンドを使用します。表示内容はコマンドで切り替えます。

HP-UXシステムの場合、次のコマンドは、入出力アクティビティのサマリーを10秒ごとに表示します。

$ sar -b 10 10

次に、このコマンドを実行した場合の出力例を示します。

13:32:45 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s
13:32:55       0      14     100       3      10      69       0       0
13:33:05       0      12     100       4       4       5       0       0
13:33:15       0       1     100       0       0       0       0       0
13:33:25       0       1     100       0       0       0       0       0
13:33:35       0      17     100       5       6       7       0       0
13:33:45       0       1     100       0       0       0       0       0
13:33:55       0       9     100       2       8      80       0       0
13:34:05       0      10     100       4       4       5       0       0
13:34:15       0       7     100       2       2       0       0       0
13:34:25       0       0     100       0       0     100       0       0

Average        0       7     100       2       4      41       0       0

sar出力は、ある時点におけるシステムの入出力アクティビティのスナップショットを提供します。複数のオプションを使用して時間隔を指定すると、出力の読取りができなくなることがあります。時間隔を4以下に指定すると、sarアクティビティ自体が出力に影響を与えることがあります。


関連項目:

sarの詳細は、manページを参照してください。

8.2.3 iostat

端末およびディスクのアクティビティを表示するときは、iostatコマンドを使用します。表示内容は、コマンドで切り替えます。iostatコマンドの出力には、ディスク要求キューは表示されず、ビジー状態のディスクが表示されます。この情報は、入出力負荷のバランスを調整する場合に役立ちます。

次のコマンドは、端末およびディスク・アクティビティを5秒間隔で5回表示します。

$ iostat 5 5

次に、このコマンドをSolarisで実行した場合の出力例を示します。

tty          fd0           sd0           sd1           sd3          cpu
 tin tout Kps tps serv  Kps tps serv  Kps tps serv  Kps tps serv  us sy wt id
   0    1   0   0    0    0   0   31    0   0   18    3   0   42   0  0  0 99
   0   16   0   0    0    0   0    0    0   0    0    1   0   14   0  0  0 100
   0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
   0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
   0   16   0   0    0    0   0    0    2   0   14   12   2   47   0  0  1 98

大きなディスク要求キューを調べるときは、iostatコマンドを使用します。要求キューは、特定のディスク・デバイスに対する入出力要求が実行されるまでにかかる時間を示します。要求キューが発生する原因は、特定のディスクに対する入出力要求のボリュームが大きいこと、または入出力の平均シーク時間が長いことです。ディスク要求キューは、0(ゼロ)またはそれに近い値であることが理想的です。

8.2.4 swap、swapinfo、swaponまたはlsps

スワップ領域の使用量に関する情報を表示するときは、swapswapinfoswaponまたはlspsの各コマンドを使用します。スワップ領域が不足するとプロセスの応答が停止し、Out of Memoryエラーでプロセスが生成できなくなることがあります。次の表は、プラットフォームごとの適切なコマンドの一覧です。

プラットフォーム コマンド
AIX lsps -a
HP-UX swapinfo -m
Linux swapon -s
Solaris swap -lおよびswap -s

次に、swap -lコマンドをSolarisで実行した場合の出力例を示します。

swapfile             dev        swaplo blocks        free  
/dev/dsk/c0t3d0s1    32,25      8      197592        162136

8.2.5 AIXのツール

次の項では、AIXシステム上で使用可能なツールについて説明します。


関連項目:

これらのツールの詳細は、AIXオペレーティング・システムのドキュメントおよびmanページを参照してください。

8.2.5.1 Base Operation Systemツール

AIXのBase Operation Systemには、UNIXシステムに以前から含まれていたパフォーマンス・ツールや、AIXの実装固有の機能を管理するために必要なパフォーマンス・ツールが含まれます。次の表に、最も重要なBase Operation Systemツールを示します。

ツール 機能
lsattr デバイスの属性を表示します。
lslv 論理ボリューム、つまり物理ボリュームに対する論理ボリュームの割当てに関する情報を表示します。
netstat ネットワーク関連のデータ構造の内容を表示します。
nfsstat ネットワーク・ファイル・システムおよびリモート・プロシージャ・コールのアクティビティに関する統計を表示します。
nice プロセスの初期優先順位を変更します。
no ネットワーク・オプションを表示または設定します。
ps 1つ以上のプロセスのステータスを表示します。
reorgvg ボリューム・グループ内の物理パーティション割当てを再編成します。
time 経過した実行時間、ユーザーのCPU処理時間およびシステムのCPU処理時間を表示します。
trace 選択したシステム・イベントを記録および報告します。
vmo 仮想メモリー・マネージャのチューニング可能なパラメータを管理します。

8.2.5.2 Performance Toolbox

AIXのPerformance Toolboxには、システム・アクティビティをローカルおよびリモートで監視しチューニングするためのツールが含まれます。Performance Tool Boxは、Performance Tool Box ManagerおよびPerformance Tool Box Agentの2つのコンポーネントで主に構成されています。Performance Tool Box Managerは、xmperfユーティリティを使用して、構成内の様々なシステムからデータを収集および表示します。Performance Tool Box Agentは、xmserdデーモンを使用して、Performance Tool Box Managerからデータを収集しデータを転送します。Performance Tool Box Agentは、Performance Aide for AIXと呼ばれる個別の製品としても使用できます。

Performance Tool BoxおよびPerformance Aideの両方に、次の表に示す監視およびチューニング・ツールが含まれます。

ツール 説明
fdpr 特定のワークロードに対する実行可能プログラムを最適化します。
filemon トレース機能を使用して、ファイル・システムのアクティビティを監視および報告します。
fileplace 論理または物理ボリューム内のファイルのブロックの配置を表示します。
lockstat カーネル・ロックの競合に関する統計を表示します。
lvedit ボリューム・グループ内の論理ボリュームを対話方式で配置します。
netpmon トレース機能を使用して、ネットワークの入出力およびネットワーク関連のCPU使用率を報告します。
rmss システムを様々なメモリー・サイズでシミュレートし、パフォーマンスをテストします。
svmon 仮想メモリーの使用量に関する情報を取得および分析します。
syscalls システム・コールを記録し、件数をカウントします。
tprof trace機能を使用して、モジュールおよびソース・コード文レベルのCPU使用率を報告します。
BigFoot プロセスのメモリー・アクセスのパターンを報告します。
stem サブルーチン・レベルのエントリを許可し、既存の実行可能ファイルのインスツルメント処理を終了します。


関連項目:

  • これらのツールの詳細は、『Performance Toolbox for AIX Guide and Reference』を参照してください

  • これらのツールの構文については、『AIX 5L Performance Management Guide』を参照してください。


8.2.5.3 System Management Interface Tool

AIXのSystem Management Interface Tool(SMIT)は、様々なシステム管理およびパフォーマンス・ツールに、メニュー方式のインタフェースを提供します。SMITを使用すると、様々なツールにナビゲートし、実行するジョブに集中できます。

8.2.6 HP-UXのツール

次のパフォーマンス分析ツールが、HP-UXシステムで使用できます。

  • GlancePlus/UX

    このHP-UXユーティリティは、システムのアクティビティを測定するオンライン診断ツールです。GlancePlusでは、システム・リソースの使用状況に関する情報が表示されます。システムの入出力、CPUおよびメモリー使用量に関する動的な情報が、一連の画面に表示されます。このユーティリティを使用して、プロセスごとのリソースの使用状況を監視できます。

  • HP Programmer's Analysis Kit

    HP Programmer's Analysis Kitには、次のツールが含まれます。

    • Puma

      このツールは、プログラムの実行中にパフォーマンス統計を収集します。グラフ表示により、収集した統計を表示および分析できます。

    • Thread Trace Visualizer

      このツールは、インスツルメント処理スレッド・ライブラリ、libpthread_tr.slにより作成されるトレース・ファイルを、グラフ表示します。これにより、スレッドの相互作用を表示し、スレッドがブロックされてリソースを待機している箇所を確認できます。

    HP Programmer's Analysis Kitは、HP Fortran 77、HP Fortran 90、HP C、HP C++、HP ANSI C++およびHP Pascalのコンパイラに同梱されています。

次の表に、HP-UXでパフォーマンス・チューニングの追加に使用できるパフォーマンス・チューニング・ツールを示します。

ツール 機能
caliper
(Itaniumのみ)
高速の動的インスツルメント処理とともに、キャッシュ・ミス、Translation Look-aside Bufferまたは命令サイクルなどの分析タスクのためにランタイム・アプリケーション・データを収集します。これは、C、C++、Fortranおよびアセンブリ・アプリケーション用の動的パフォーマンス測定ツールです。
gprof プログラムの実行プロファイルを作成します。
monitor プログラム・カウンタを監視し、特定の関数をコールします。
netfmt ネットワークを監視します。
netstat ネットワーク・パフォーマンスに関する統計を報告します。
nfsstat ネットワーク・ファイル・システムおよびリモート・プロシージャ・コールのアクティビティに関する統計を表示します。
nettl ロギングおよびトレースにより、ネットワーク・イベントまたはパケットを取得します。
prof Cプログラムの実行プロファイルを作成してプログラムのパフォーマンス統計を表示し、プログラムの実行時間の大半が消費されている箇所を示します。
profil プログラム・カウンタ情報をバッファにコピーします。
top システム上の上位プロセスを表示し、情報を定期的に更新します。

8.2.7 Linuxのツール

Linuxシステムでは、topfreeおよびcat /proc/meminfoコマンドを使用して、スワップ領域、メモリーおよびバッファの使用量を表示します。

8.2.8 Solarisのツール

Solarisシステムでは、mpstatコマンドを使用して、マルチプロセッサ・システムの各プロセッサの統計を表示します。表の各行は、1プロセッサのアクティビティを示します。1行目は、システムが再起動してからのすべてのアクティビティをまとめて表示します。後続の各行は、前の時間隔のアクティビティをまとめて表示します。すべての値は、特に明記されていない場合は、1秒当たりのイベント数です。引数は、統計および反復回数の間の時間隔です。

次に、mpstatコマンドを実行した場合の出力例を示します。

CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    0   0    1    71   21   23    0    0    0    0    55    0   0   0  99
  2    0   0    1    71   21   22    0    0    0    0    54    0   0   0  99
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    0   0    0    61   16   25    0    0    0    0    57    0   0   0 100
  2    1   0    0    72   16   24    0    0    0    0    59    0   0   0 100

8.3 メモリー管理のチューニング

メモリー・チューニング・プロセスでは、最初にページングおよびスワッピング領域を測定して、使用可能なメモリー量を確認します。 システムのメモリー使用量の確認後、Oracleバッファ・キャッシュをチューニングします。

Oracleバッファ・マネージャによって、アクセス頻度の最も高いデータをキャッシュに長く保存できます。バッファ・マネージャを監視し、バッファ・キャッシュをチューニングすると、Oracle Databaseのパフォーマンスが大幅に向上することがあります。各システムのOracle Databaseバッファ・サイズの最適値は、システム全体の負荷や他のアプリケーションと比較した場合のOracle Databaseの優先順位によって異なります。

この項では、次の項目について説明します。

8.3.1 十分なスワップ領域の割当て

スワッピングは、オペレーティング・システムのオーバーヘッドに大きく影響するため、最小限に抑える必要があります。スワッピングが行われているかどうかを調べるには、sarコマンドまたはvmstatコマンドを使用します。これらのコマンドで使用するオプションについては、manページを参照してください。

システムでスワッピングが行われている場合は、メモリーを節約するために、次の処理を行います。

  • 必要以上にシステム・デーモン・プロセスまたはアプリケーション・プロセスを実行しないようにします。

  • データベース・バッファの数を減らし、一部のメモリーを解放します。

  • オペレーティング・システム・ファイル・バッファの数を減らします。

スワップ領域の使用量を確認するには、プラットフォームに応じて、次のいずれかのコマンドを実行します。

プラットフォーム コマンド
AIX lsps -a
HP-UX swapinfo -m
Linux swapon -s
Solaris swap -lおよびswap -s

スワップ領域をシステムに追加するには、プラットフォームに応じて、次のいずれかのコマンドを実行します。

プラットフォーム コマンド
AIX chpsまたはmkps
HP-UX swapon
Linux swapon -a
Solaris swap -a

スワップ領域は、使用している物理RAMとメモリー機能に基づいて、プラットフォーム固有のインストレーション・ガイドに示されているレベルに設定します。


関連項目:

  • スワップ領域の確認の詳細は、使用しているプラットフォームの『Oracle Databaseインストレーション・ガイド』を参照

  • これらのコマンドの詳細は、オペレーティング・システムのドキュメントを参照してください。


8.3.2 ページングの制御

プログラムを実行するためにプログラム全体をメモリーに格納しておく必要はないため、ページングはスワッピングほど深刻な問題ではありません。少量のページアウトでは、システムのパフォーマンスにほとんど影響はありません。

大量のページングを検出するには、高速応答時またはアイドル時の測定値と、低速応答時の測定値を比較します。

ページングを監視するには、vmstatコマンドおよびsarコマンドを使用します。


関連項目:

プラットフォームの監視結果の解釈については、manページまたはオペレーティング・システムのドキュメントを参照してください。

次の表に、これらのコマンドの重要な出力列を示します。

プラットフォーム 機能
Solaris vflt/s アドレス変換ページ・フォルトの数を示します。アドレス変換フォルトは、メモリー内にない有効なページをプロセスが参照した場合に発生します。
HP-UX at アドレス変換ページ・フォルトの数を示します。アドレス変換フォルトは、メモリー内にない有効なページをプロセスが参照した場合に発生します。
HP-UX re ページアウト・アクティビティにより解放され、空きリストに追加された有効ページ数を示します。この値は、0(ゼロ)である必要があります。

システムで大量のページアウト・アクティビティが常に発生している場合は、次の方法で解決してください。

  • メモリーを増設します。

  • 一部の作業を別のシステムに移します。

  • システム・グローバル領域(SGA)で使用するメモリーを少なく設定します。

8.3.3 Oracleブロック・サイズの調整

読取り操作時には、オペレーティング・システムのブロック全体がディスクから読み取られます。データベースのブロック・サイズが、オペレーティング・システムのファイル・システムのブロック・サイズより小さい場合は、入出力バンド幅の効率が悪くなります。Oracle Databaseのブロック・サイズをファイル・システムのブロック・サイズの倍数になるように設定すると、パフォーマンスを最大5%向上させることができます。

データベースのブロック・サイズは、DB_BLOCK_SIZE初期化パラメータで設定します。ただし、このパラメータの値を変更するには、データベースを再作成する必要があります。

DB_BLOCK_SIZEパラメータの現在の設定値を調べるには、SQL*PlusのSHOW PARAMETER DB_BLOCK_SIZEコマンドを実行します。

8.3.4 メモリー・リソースの割当て

パラメータを設定して、ワークロードの要件、および同じシステムで稼働している様々なデータベース・インスタンスの要件に基づいて、自動的にメモリーを割り当てることができます。MEMORY_TARGETパラメータは、そのインスタンスに対してOracleシステム全体の使用可能メモリーを指定し、SGAおよびProcess Global Area(PGA)コンポーネントを自動的にチューニングします。MEMORY_MAX_TARGETパラメータは、MEMORY_TARGETパラメータが動的に増加できる上限値を示します。

デフォルトでは、これらのパラメータの値は両方とも0であり、自動チューニングは行われません。自動チューニングをアクティブにするには、MEMORY_TARGETパラメータを0以外の値に設定します。MEMORY_TARGETパラメータを動的に有効にするには、起動時にMEMORY_MAX_TARGETパラメータを設定する必要があります。


注意:

MEMORY_TARGETパラメータを0以外の値に設定すれば、MEMORY_MAX_TARGETパラメータは自動的にこの値を取得します。

MEMORY_TARGETおよびMEMORY_MAX_TARGETパラメータは、Linux、Solaris、AIXおよびHP-UXのプラットフォームでのみサポートされています。

Solarisでは、MEMORY_TARGETまたはMEMORY_MAX_TARGETで動的緊密共有メモリーを使用できます。詳細は、付録Dを参照してください。

Linuxでは、MEMORY_TARGETまたはMEMORY_MAX_TARGETが有効になっている場合、一部の共有リソース要件が増加します。詳細は、「共有リソースの割当て」の項を参照してください。



ヒント:

MEMORY_TARGETおよびMEMORY_MAX_TARGETパラメータは、元の設定、コンピュータ上のOracleに使用可能なメモリー、およびワークロードのメモリー要件に基づいて設定できます。

8.4 ディスク入出力のチューニング

使用可能なディスク全体で入出力を均等に分散して、ディスクへのアクセス時間が短くなるようにしてください。小規模なデータベースやRAIDを使用しないデータベースでは、それぞれのデータファイルと表領域を使用可能なディスク間に分散してください。

この項では、次の項目について説明します。

8.4.1 自動ストレージ管理の使用

データベース記憶域に自動ストレージ管理を使用すると、すべてのデータベース入出力が、自動ストレージ管理ディスク・グループ内の使用可能なすべてのディスク・デバイス間に分散されます。

自動ストレージ管理を使用することで、ディスク入出力を手動でチューニングする必要がなくなります。

8.4.2 適切なファイル・システム・タイプの選択

オペレーティング・システムに応じて、いくつかのファイル・システム・タイプから選択できます。ファイル・システム・タイプごとにそれぞれ特性が異なります。このことが、データベースのパフォーマンスに大きな影響を与えます。次の表に、一般的なファイル・システム・タイプを示します。

ファイル・システム プラットフォーム 説明
S5 HP-UXおよびSolaris UNIX System Vファイル・システム
UFS AIX、HP-UXおよびSolaris Unifiedファイル・システム(BSD UNIXから派生)
VxFs AIX、HP-UXおよびSolaris VERITASファイル・システム
ext2/ext3 Linux Linux用拡張ファイル・システム
OCFS2 Linux Oracle Clusterファイル・システム
JFS/JFS2 AIX ジャーナル・ファイル・システム
GPFS AIX 一般的なパラレル・ファイル・システム

ファイル・システムとアプリケーションには、必ずしも互換性があるとはかぎりません。たとえば、Unifiedファイル・システムの各実装間でさえ、互換性の比較は容易ではありません。選択したファイル・システムによって、パフォーマンスに最大20%の開きが出る場合があります。ファイル・システムを使用する場合は、次のことを行ってください。

  • ハードディスクがクリーンで断片化されないように、ファイル・システムのパーティションを新しく作成します。

  • データベース・ファイルに対してファイル・システムを使用する前に、パーティションでファイル・システム・チェックを行います。

  • ディスク入出力をできるだけ均等に分散します。

  • 論理ボリューム・マネージャまたはRAIDデバイスを使用していない場合、データファイルとは異なるファイル・システムにログ・ファイルを格納することを検討してください。

8.5 ディスク・パフォーマンスの監視

次の項では、ディスク・パフォーマンスの監視方法について説明します。

8.5.1 その他のオペレーティング・システムでのディスク・パフォーマンスの監視

ディスク・パフォーマンスを監視するには、sar -bおよびsar -uコマンドを使用します。

次の表に、sar -bコマンド出力の列をいくつか示します。これらの列は、ディスク・パフォーマンスの分析に重要です。

説明
bread/sbwrit/s 1秒ごとに読み取られるブロック数と書き込まれるブロック数(ファイル・システム・データベースに重要)
pread/spwrit/s RAW特性デバイスに対する1秒当たりの読取り数または書込み数

ディスク・パフォーマンスの分析に重要なsar -u列の1つに、%wioがあります。これによって、ブロックされた入出力で待機するCPU時間の割合がわかります。


注意:

一部のLinuxでは、sar -uコマンドの出力結果に%wio列が表示されません。詳細な入出力統計を表示するには、iostat -xコマンドを使用できます。

キー・インジケータは次のとおりです。

  • breadbwritpreadおよびpwrit列の値の合計は、ディスク入出力サブシステムのアクティビティのレベルを示します。合計値が大きいほど、入出力サブシステムはビジーになります。物理ドライブの数が多いほど、合計のしきい値が高くなる可能性があります。デフォルトの最適値は、ドライブ2個の場合は40以下、ドライブ4から8個の場合は60以下です。

  • %rcache列の値は91以上、%wcache列の値は61以上である必要がありますそれ以外の場合は、システムがディスク入出力バウンドになる可能性があります。

  • %wio列の値が常に21以上の場合、システムは入出力バウンドになります。

8.5.2 ディスク再同期化の使用による自動ストレージ管理ディスク・グループの監視

alter diskgroup disk onlineおよびalter diskgroup disk offlineコマンドを使用して、ディスク・セットへの入出力を一時的に停止します。これらのコマンドを使用すると、定期的なメンテナンス・タスクを実行したり、ディスク・ファームウェアのアップグレードなどのアップグレードを実行することができます。ディスク・グループ内の一部のディスクで一時的な障害が発生した場合は、alter diskgroup disk onlineを使用して、ディスク・グループを迅速にリカバリします。

8.6 システム・グローバル領域

SGAとは、共有メモリーに格納されているOracle構造体のことです。これには、静的データ構造体、ロックおよびデータ・バッファが含まれています。

1つの共有メモリー・セグメントの最大サイズは、shmmaxカーネル・パラメータで指定します。

次の表に、このパラメータの推奨値をプラットフォームごとに示します。

プラットフォーム 推奨値
AIX 該当なし
HP-UX システムに搭載された物理メモリーのサイズ。
Linux 次の値のうち小さいほう。
  • システムに搭載された物理メモリーの半分のサイズ。

  • 4GB - 1バイト

Solaris 4294967295または4GB - 16MB。

注意: システムで、Oracle9i DatabaseおよびOracle Database 11gの両方のインスタンスが実行されている場合、shm_maxの値を2GB - 16MBに設定する必要があります。Solarisの場合、より大きいSGAサイズに対応するように、この値を4GBより大きくできます。


SGAのサイズが共有メモリー・セグメントの最大サイズ(shmmaxまたはshm_max)を超える場合、Oracle Databaseでは、要求されたSGAサイズになるように、連続したセグメントが連結されます。shmsegカーネル・パラメータには、任意のプロセスで連結できるセグメントの最大数を指定します。SGAのサイズを制御するには、次の初期化パラメータを設定します。

  • DB_CACHE_SIZE

  • DB_BLOCK_SIZE

  • JAVA_POOL_SIZE

  • LARGE_POOL_SIZE

  • LOG_BUFFERS

  • SHARED_POOL_SIZE

または、SGAサイズを自動的にチューニングできるように、SGA_TARGET初期化パラメータを設定します。


注意:

これらのパラメータの値が適切に設定されていることを確認します。値を大きく設定しすぎると、物理メモリーに対する共有メモリーの割合が非常に高くなります。そのため、パフォーマンスが低下します。

共有サーバーで構成されているOracle Databaseでは、SHARED_POOL_SIZE初期化パラメータの値を大きく設定するか、LARGE_POOL_SIZE初期化パラメータを使用したカスタム構成が必要です。Oracle Universal Installerを使用してデータベースをインストールした場合、SHARED_POOL_SIZEパラメータの値は、Oracle Database Configuration Assistantによって自動的に設定されます。ただし、データベースを手動で作成した場合は、パラメータ・ファイルでSHARED_POOL_SIZEパラメータの値を同時ユーザーごとに1KBずつ増やしてください。

各OracleプロセスがSGA全体をアドレス指定するためには、十分な共有メモリーが必要です。

8.6.1 SGAサイズの確認

次のいずれかの方法で、SGAサイズを確認できます。

  • 次のSQL*Plusコマンドを実行して、実行中のデータベースのSGAサイズを表示します。

    SQL> SHOW SGA
    

    結果はバイト単位で表示されます。

  • データベース・インスタンスを起動すると、SGAがシステム・グローバル領域の合計ヘッダーの横に表示されます。

  • oracleユーザーでipcsコマンドを実行します。

8.6.2 システム・リソース検証ユーティリティ

システム・リソース検証ユーティリティ(sysresv)は、Oracle Database 8i以上のリリースで使用できます。これを使用すると、指定したOracleシステム識別子(ORACLE_SID)に対してOracleインスタンスおよびオペレーティング・システム・リソースの情報が提供されます。このユーティリティは$ORACLE_HOME/binにありますが、他の場所から使用できます。

8.6.2.1 sysresvユーティリティの目的

sysresvユーティリティを使用して、Oracleインスタンスのステータスを表示したり、そのインスタンスが使用するオペレーティング・システム・リソース(メモリーやセマフォ・パラメータなど)を特定します。このユーティリティは、複数のインスタンスが実行されている場合に特に役立ちます。たとえば、インスタンスが応答しない場合は、このユーティリティを使用してオペレーティング・システム・リソースを削除できます。

Oracleインスタンスがクラッシュしたか、強制終了された場合にこのインスタンスに関連するメモリーおよびセマフォが自動的にクリーンアップされなかったときに、このユーティリティを使用できます。このユーティリティは、実行されているOracleインスタンスを判断する際にも役立ちます。

8.6.2.2 sysresvを使用するための条件

sysresvユーティリティを使用するには、システム・グローバル領域(SGA)へのアクセス権が必要です。SGAにアクセスするには、Oracle所有者またはOracleバイナリを所有するグループのメンバーである必要があります。

8.6.2.3 sysresvの構文

sysresvユーティリティの構文は次のとおりです。

sysresv [-i] [-f] [-d on|off] [-l sid1[ sid2 ...]]

説明は次のとおりです。

  • -i: 各sidのIPCリソースを削除する前に確認を求めます。

  • -f: 確認を求めずにIPCリソースを削除します。このフラグは-iオプションよりも優先されます

  • -d on|off: onの場合は各sidのIPCリソースを一覧表示します。指定しない場合、-dのデフォルトはonです

  • -l sid1 [sid2 sid3]: 空白区切りの1つ以上のシステム識別子に対してsysresvチェックを実行します

sysresvをフラグなしで使用した場合、環境変数のOracleインストール所有者ユーザー・プロファイル・リストの$ORACLE_SID環境変数によって識別されるOracleインスタンスのIPCリソースがレポートされます。

8.6.2.4 sysresvの使用例

次の例では、sysresvユーティリティを使用する方法を示します。

$ sysresv
IPV Resources for ORACLE_SID "sales" :
Shared Memory:
ID                            KEY
10345                    0x51c051ad
Semaphores
ID
10345                    0x51c051ad
Oracle Instance alive for sid "sales"

8.6.3 AIXの共有メモリー


注意:

この項の内容は、AIXのみに適用されます。

共有メモリーでは、プロセス間で共通の仮想メモリー・リソースが使用されます。プロセスは、パフォーマンスを向上させるために、表やキャッシュ済エントリなどの仮想メモリー変換リソース・セットを介して仮想メモリー・セグメントを共有します。

共有メモリーを固定して、ページングを防ぎ、入出力のオーバーヘッドを減らすことができます。そのためには、LOCK_SGAパラメータをtrueに設定します。AIX 5Lの場合、基礎となるハードウェアでラージ・ページ機能がサポートされていれば、同じパラメータによりこの機能がアクティブになります。

次のコマンドを実行し、固定されたメモリーをOracle Databaseで使用できるようにします。

$ /usr/sbin/vmo -r -o v_pinshm=1

設定する実メモリーの最大の割合がpercent_of_real_memoryの場合、次のようなコマンドを実行し、固定されたメモリーで使用可能な実メモリーの最大量を設定します。

$ /usr/sbin/vmo -r -o maxpin percent=percent_of_real_memory

maxpin percentオプションを使用する場合、固定できる空きメモリーをカーネルで使用可能にするためには、固定されたメモリーの量がOracle SGAのサイズを、システム上の実メモリーの3%以上は超えている必要があります。たとえば、2GBの物理メモリーで、400MB(RAMの20%)のSGAを固定する場合、次のコマンドを実行します。

$ /usr/sbin/vmo -r -o maxpin percent=23

注意:

デフォルトのmaxpin percent値は80 percentに設定され、ほとんどのインストールで機能します。

svmonコマンドを実行し、システムの操作時に固定されたメモリーの使用量を監視します。LOCK_SGAパラメータがtrueに設定されている場合にのみ、Oracle Databaseはメモリーの固定を実行します。SGAサイズが、固定に使用できるメモリーのサイズを超える場合、これらのサイズを超えるSGAの部分が、通常の共有メモリーに割り当てられます。

AIX POWER4-およびPOWER5-Based Systemsでのラージ・ページ機能

POWER4またはPOWER5システム上で10件の16MBのラージ・ページをオンにし、予約するには、次のコマンドを実行します。

$ /usr/sbin/vmo -r -o lgpg_regions=10 -o lgpg_size=16777216

このコマンドは、bosbootを促し、変更を有効にするには再起動が必要であることを警告します。

SGA全体を格納できる十分な大きさのラージ・ページを指定することをお薦めします。LOCK_SGAパラメータがtrueに設定されている場合、Oracle Databaseインスタンスはラージ・ページの割当てを実行します。

16MBのページが常に固定され、これは標準メモリーには使用できません。16MBサイズのページのプールが構成されている場合、このメモリーは、他のアプリケーションがラージ・ページを現在使用していなくても標準メモリーの割当てに使用できません。

POWER5ベース・システムでは64Kページがサポートされます。Oracleでは、使用可能な場合は、これらのページをSGAに使用します。これらの64Kページには、追加構成が必要ありません。また、LOCK_SGAパラメータ設定に依存しません。

ラージ・ページの使用を監視するには、次のコマンドを使用します。

$ vmstat -P all

AIXオペレーティング・システムで16MBページまたは固定されたメモリー(共有メモリーの割り当て時)を使用する場合、OracleユーザーIDには、CAP_BYPASS_RAC_VMMおよびCAP_PROPAGATE機能が必要です。データベース・インスタンスの起動に使用するユーザーIDにも、同じ機能が必要です。特に、Oracle Real Application Cluster(Oracle RAC)データベースでラージ・ページを使用する場合は、Oracle RACデータベース・インスタンスの起動および停止にsrvctlコマンドを使用するため、CAP_BYPASS_RAC_VMMおよびCAP_PROPAGATE機能をrootユーザーにも設定する必要があります。


関連項目:

固定されたメモリーおよびラージ・ページの詳細は、AIXのドキュメントを参照してください。

これらの機能は、次のコマンドを使用して設定および確認できます。

  • 次のコマンドを実行して、現在の機能を確認します。

    $ lsuser –a capabilities oracle
    
  • CAP_BYPASS_RAC_VMMおよびCAP_PROPAGATE機能をこのユーザーIDに追加します。

    $ chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle
    

注意:

機能の属性を表示および設定できるのは、rootユーザーのみです。

8.7 オペレーティング・システムのバッファ・キャッシュのチューニング

Oracle Databaseバッファ・キャッシュのサイズを調整します。メモリーに制限がある場合は、オペレーティング・システムのバッファ・キャッシュも調整します。

オペレーティング・システムのバッファ・キャッシュには、メモリーからディスクまたはディスクからメモリーへの転送中に、メモリー内のデータ・ブロックが保持されます。

Oracle Databaseバッファ・キャッシュは、Oracle Databaseバッファを格納するためのメモリー内の領域です。

システムで使用できるメモリーに制限がある場合は、それに応じてオペレーティング・システムのバッファ・キャッシュのサイズを小さくします。

調整するバッファ・キャッシュを判断するには、sarコマンドを使用します。