日本語PDF

8 Oracle Databaseのチューニング

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

8.1 チューニングの重要性

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

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

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

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

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

関連項目:

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

8.2.1 vmstat

vmstatはプロセス、メモリー、ページング、ブロックI/O、トラップ、およびCPUアクティビティに関する情報を報告します。

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

  • Oracle SolarisおよびHP-UXの場合:

    $ vmstat -S 5 6
    

    ノート:

    -Sオプションでは、スワッピング統計が表示されます。
  • LinuxおよびIBM AIX on POWER Systems (64-bit)の場合:

    $ vmstat 5 6
    

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

procs          memory                  swap      io      system       cpu
r b     swpd   free   buff  cache      si so    bi bo   in  cs us   sy id wa st
0 0    130668 103604 198144 5029000     0 0     1 68     8   6  0   0 100 0  0
0 0    130668 103604 198144 5029000     0 0     0 86    226 352 0   0 100 0  0
0 0    130668 103604 198148 5029000     0 0     0 58    223 357 0   0 100 0  0
0 0    130668 103604 198152 5029004     0 0     0 68    223 358 0   0 100 0  0
0 0    130668 103604 198152 5029004     0 0     0 56    223 357 0   0 100 0  0
0 0    130668 103604 198152 5029004     0 0     0 57    228 362 0   0 100 0  0

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

procs     memory             page             faults       cpu
r b w   avm    free    si so pi po fr de sr  in    sy    cs us sy id
1 0 0  112085 2189167  0  0  3  0  0  0  1  1033  32186 108  1  0  98
1 0 0  112085 2189074  0  0  4  0  0  0  0  1022   508   60  0  0 100

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

HP-UXおよびOracle Solarisの場合、page列の下にあるsi列とso列は、それぞれ1秒当たりのスワップインおよびスワップアウトのプロセスの数を示します。これらの値はゼロであることが理想的です。

Linuxの場合は、si列とso列がスワップインまたはスワップアウトされたメモリーの量を表します。

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

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

関連項目:

出力の解釈については、プラットフォームのvmstat manページを参照してください

8.2.2 sar

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

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

$ sar -b 10 10

次に、このコマンドのLinuxシステムでの出力例を示します。

10:28:01       tps      rtps      wtps   bread/s   bwrtn/s
10:28:11     17.20      0.00     17.20      0.00    300.80
10:28:21     46.40      0.00     46.40      0.00    467.20
10:28:31     16.40      0.00     16.40      0.00    283.20
10:28:41     15.60      0.00     15.60      0.00    275.20
10:28:51     17.02      0.00     17.02      0.00    254.65
10:29:01     35.80      0.00     35.80      0.00    414.40
10:29:11     15.80      0.00     15.80      0.00    273.60
10:29:21     17.40      0.00     17.40      0.00    262.40
10:29:31     32.20      0.00     32.20      0.00    406.40
10:29:41     20.98      0.00     20.98      0.00    354.85

Average:        23.48      0.00     23.48      0.00    329.28

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

関連項目:

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

8.2.3 iostat

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

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

$ iostat 5 5

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

tty          blkdev0           sd1           sd2           sd3          cpu
 tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv  us sy st 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エラーでプロセスが生成できなくなることがあります。次の表は、プラットフォームごとの適切なコマンドの一覧です。

プラットフォーム コマンド

Oracle Solaris

swap -lhswap -shおよびzfs list rpool/swap

Linux

swapon -s

POWER Systems (64ビット)上のIBM AIX

lsps -a

HP-UX

swapinfo -m

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

swapfile                     dev     swaplo    blocks     free  
/dev/zvol/dsk/rpool/swap    274,1      8       20971447    20971447

8.2.5 Oracle Solarisのツール

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

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

CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  st idl
  0   3   0    2    319  103  109    0  19   11    0   73     0   1   0  99
  1   4   0    1    71   1     95    0  14   12    0   96     0   0   0  99

8.2.6 Linuxのツール

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

8.2.7 IBM AIX on POWER Systems (64-Bit)のツール

次の項では、IBM AIX on POWER Systems (64-bit)上で使用可能なツールについて説明します。

関連項目:

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

8.2.7.1 Base Operation Systemツール

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

ツール 機能

lsattr

デバイスの属性を表示します。

lslv

論理ボリューム、つまり物理ボリュームに対する論理ボリュームの割当てに関する情報を表示します。

netstat

ネットワーク関連のデータ構造の内容を表示します。

nfsstat

ネットワーク・ファイル・システムおよびリモート・プロシージャ・コールのアクティビティに関する統計を表示します。

nice

プロセスの初期優先順位を変更します。

no

ネットワーク・オプションを表示または設定します。

ps

1つ以上のプロセスのステータスを表示します。

reorgvg

ボリューム・グループ内の物理パーティション割当てを再編成します。

time

経過した実行時間、ユーザーのCPU処理時間およびシステムのCPU処理時間を表示します。

trace

選択したシステム・イベントを記録および報告します。

vmo

仮想メモリー・マネージャのチューニング可能なパラメータを管理します。

8.2.7.2 Performance Toolbox

IBM AIX on POWER Systems (64-bit)の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 IBM AIX on POWER Systems (64-bit)と呼ばれる個別の製品としても使用できます。

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

ツール 説明

fdpr

特定のワークロードに対する実行可能プログラムを最適化します。

filemon

トレース機能を使用して、ファイル・システムのアクティビティを監視および報告します。

fileplace

論理または物理ボリューム内のファイルのブロックの配置を表示します。

lockstat

カーネル・ロックの競合に関する統計を表示します。

lvedit

ボリューム・グループ内の論理ボリュームを対話方式で配置します。

netpmon

トレース機能を使用して、ネットワークの入出力およびネットワーク関連のCPU使用率を報告します。

rmss

システムを様々なメモリー・サイズでシミュレートし、パフォーマンスをテストします。

svmon

仮想メモリーの使用量に関する情報を取得および分析します。

syscalls

システム・コールを記録し、件数をカウントします。

tprof

trace機能を使用して、モジュールおよびソース・コード文レベルのCPU使用率を報告します。

BigFoot

プロセスのメモリー・アクセスのパターンを報告します。

stem

サブルーチン・レベルのエントリを許可し、既存の実行可能ファイルのインスツルメント処理を終了します。

関連項目:

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

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

8.2.7.3 System Management Interface Tool

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

8.2.8 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.3 メモリー管理のチューニング

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

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

この項には次のトピックが含まれます:

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

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

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

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

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

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

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

プラットフォーム コマンド

Oracle Solaris

swap -lswap -sおよびzfs get volsize rpool/swap

Linux

swapon -s

POWER Systems (64ビット)上のIBM AIX

lsps -a

HP-UX

swapinfo -m

スワップ領域の使用量を監視し、必要に応じて値を大きくしてください。次の表では、インストールされているRAMと構成済スワップ領域要件の、初期に推奨される関係について説明します。

RAM スワップ領域

1から2GB

RAMのサイズの1.5倍

2GBから16GB

RAMのサイズと同じ

16GB超

16GB

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

プラットフォーム コマンド

Oracle Solaris

次のオプションのいずれかを使用します。

  • ZFSファイル・システムの場合は、次のコマンドを使用してスワップ・ボリュームを増やします。

    zfs set volsize=newsize rpool/swap

    newsizeは、増やすスワップ・ボリュームのサイズです。

  • ZFS以外のファイル・システムの場合は、次のコマンドを使用します。

    swap -a

Linux

swapon -a

POWER Systems (64ビット)上のIBM AIX

chpsまたはmkps

HP-UX

swapon

関連項目:

ノート:

12c以降のOracle Databaseでは、Oracle SolarisのOptimized Shared Memory (OSM)モデルを使用して、自動メモリー管理を実装します。DISMとは異なり、OSMではディスクのスワップ領域を二重に割り当てる必要はありません。スワップ領域の要件については、次のノートを参照してください:

My Oracle Supportノート1010818.1

8.3.2 監視ページング

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

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

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

関連項目:

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

Oracle Solarisでは、vmstat —pはアドレス変換ページ・フォルトの数を示します。アドレス変換フォルトは、メモリー内にない有効なページをプロセスが参照した場合に発生します。

メモリーに関連する問題を分析するには、vmstat出力の空きメモリーの量を調べることから始める必要があります。空きメモリーが少ない場合は、sr (scan rate)列がゼロ以外の値になっていないか確認する必要があります。これは、ページ・スキャナがメモリー・ページをスキャンして、空きリストに戻して再利用することを示しています。

匿名(不良)ページングは、api (anonymous page-in)列とapo (anonymous page-out)列の下のvmstat -p列の出力で監視できます。この種類のページングは、メモリー不足の間にシステムが匿名ページをスワップ・デバイスに移動すると発生します。

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

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

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

  • システム・グローバル領域(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、Oracle Solaris、HP-UXおよびIBM AIX on POWER Systems (64-bit)のプラットフォームでのみサポートされています。

Oracle Solarisでは、MEMORY_TARGETまたはMEMORY_MAX_TARGETで動的緊密共有メモリーを使用できます。詳細は、「Oracle SolarisでのOracle Databaseの管理」を参照してください。

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

ヒント:

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

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

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

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

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

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

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

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

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

ファイル・システム プラットフォーム 説明

ZFS

Oracle Solaris

Oracle Solaris ZFSファイル・システム

S5

HP-UX

UNIX System Vファイル・システム

UFS

Oracle Solaris、IBM AIX on POWER Systems (64-Bit)およびHP-UX

Unixファイル・システム(BSD UNIXから派生)

VxFS

Oracle Solaris、IBM AIX on POWER Systems (64-Bit)およびHP-UX

VERITASファイル・システム

ext2/ext3

Linux

Linux用拡張ファイル・システム

OCFS2

Linux

Oracle Clusterファイル・システム

JFS/JFS2

POWER Systems (64ビット)上のIBM AIX

ジャーナル・ファイル・システム

GPFS

POWER Systems (64ビット)上のIBM AIX

一般的なパラレル・ファイル・システム

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

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

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

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

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

関連項目:

ZFSのOracle Database向けチューニングの詳細は、Oracle Solaris 11.3チューニング可能パラメータのリファレンス・マニュアルの「データベース製品に向けたZFSのチューニング」を参照してください。
.

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

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

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

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

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

説明

bread/sbwrit/s

1秒ごとに読み取られるブロック数と書き込まれるブロック数(ファイル・システム・データベースに重要)

pread/spwrit/s

RAWデバイス上の1秒ごとのI/O操作の数(RAWパーティション・データベース・システムに重要)

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

  • breadbwritpreadおよびpwrit列の値の合計は、ディスク入出力サブシステムのアクティビティのレベルを示します。合計値が大きいほど、入出力サブシステムはビジーになります。物理ドライブの数が多いほど、合計のしきい値が高くなる可能性があります。

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

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

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

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

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

単一の共有メモリー・セグメントの最大サイズはshmmaxカーネル・パラメータで指定されます。

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

プラットフォーム 推奨値

Oracle Solaris

4294967295または4GB - 16MB。

Linux

次の値のうち小さいほう。

  • システムに搭載された物理メモリーの半分のサイズ。

  • 4GB - 1バイト

POWER Systems (64ビット)上のIBM AIX

NA

HP-UX

システムに搭載された物理メモリーのサイズ。

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)は、Oracle8i以上のリリースで使用できます。これを使用すると、指定した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 セマフォ・パラメータの設定に関するガイドライン

デフォルトのセマフォ・パラメータ値が小さすぎてすべてのOracleプロセスに対応できない場合にのみ、次のガイドラインを使用してください。

ノート:

セマフォ・パラメータの設定方法の詳細は、オペレーティング・システムのドキュメントを参照することをお薦めします。
  1. 次の計算式を使用して、全体的な最小セマフォ要件を計算します。
    sum (process parameters of all database instances on the system) + overhead for oracle background processes + system and other application requirements
    
  2. semmns (サーバーで許容できる最大セマフォ数)をこの合計に設定します。
  3. semmsl (1つのセマフォ・セットの最大セマフォ数)を250に設定します。
  4. semmni (最大セマフォ・セット数)を、semmns/semmslを切り上げて最も近い1024の倍数にした値に設定します。

    ノート:

    Oracle Solarisはこれらのセマフォ・パラメータを使用せず、リソース・コントロールを使用します。My Oracle Support ノート1006158.1を参照してください。

    https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1006158.1

    関連項目:

    次のURLにあるMy Oracle Supportノート226209.1「Linux: How to Check Current Shared Memory, Semaphore Values」を参照してください。

    https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=226209.1

8.6.4 IBM AIX on POWER Systems (64-Bit)での共有メモリー

ノート:

この項の内容は、IBM AIX on POWER Systems (64-bit)にのみ適用されます。

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

共有メモリーを固定して、ページングを防ぎ、入出力のオーバーヘッドを減らすことができます。そのためには、LOCK_SGAパラメータをtrueに設定します。IBM AIX on POWER Systems (64-bit) 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の部分が、通常の共有メモリーに割り当てられます。

IBM AIX on POWER Systems (64-Bit) POWER4およびPOWER5ベース・システムでのラージ・ページ機能

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

IBM AIX on POWER Systems (64-bit)オペレーティング・システムで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ユーザーにも設定する必要があります。

関連項目:

固定されたメモリーおよびラージ・ページの有効化とチューニングの詳細は、IBM AIX on POWER Systems (64-bit)のドキュメントを参照してください。

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

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

    $ 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コマンドを使用します。