Oracle Database 管理者リファレンス 10g リリース2(10.2) for UNIX Systems B19278-06 |
|
この章では、Oracle Databaseのチューニング方法について説明します。次の項目について説明します。
Oracle Databaseは、高度に最適化できるソフトウェア製品です。チューニングを頻繁に行うことで、システム・パフォーマンスが最適化され、データのボトルネックの発生を防ぐことができます。
データベースのチューニングを始める前に、「オペレーティング・システムのツール」で説明するツールを使用して、通常の動作を監視する必要があります。
データベースのパフォーマンスを評価し、データベース要件を決定できるオペレーティング・システム・ツールがいくつかあります。これらのツールは、Oracleプロセスの統計に加えて、システム全体のCPU使用率、割込み、スワッピング、ページング、コンテキストのスイッチング、I/Oについての統計情報も提供します。
この項では、次に示す共通のツールについて説明します。
プロセス、仮想メモリー、ディスク、トラップおよびCPUアクティビティを表示するときは、vmstat
コマンドを使用します。表示内容はコマンドで切り替えます。CPUアクティビティのサマリーを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秒当たりのページインとページアウトの回数を示します。ページインおよびページアウトの回数は通常、増加します。使用できるメモリーが十分にあるシステムでも、常に多少のページングは行われます。
オペレーティング・システムのアクティビティ・カウンタの累計を表示するときは、sar
(system activity reporter)コマンドを使用します。表示内容はコマンドで切り替えます。
HP-UXシステムでは、次のコマンドは、I/Oアクティビティのサマリーを10秒間隔で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
出力は、ある時点におけるシステムのI/Oアクティビティのスナップショットを提供します。複数のオプションを使用して時間隔を指定すると、出力の読取りができなくなることがあります。時間隔を4以下に指定すると、sar
アクティビティ自体が出力に影響を与えることがあります。
端末およびディスクのアクティビティを表示するときは、iostat
コマンドを使用します。表示内容は、コマンドで切り替えます。iostat
コマンドの出力には、ディスク要求キューは表示されず、ビジー状態のディスクが表示されます。この情報は、I/O負荷のバランスを調整する場合に役立ちます。
次のコマンドは、端末およびディスク・アクティビティを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
コマンドを使用します。要求キューは、特定のディスク・デバイスに対するI/O要求が実行されるまでにかかる時間を示します。要求キューが発生する原因は、特定のディスクに対するI/O要求のボリュームが大きいこと、またはI/Oの平均シーク時間が長いことです。ディスク要求キューは、0(ゼロ)またはそれに近い値であることが理想的です。
スワップ領域の使用量に関する情報を表示するときは、swap
、swapinfo
、swapon
またはlsps
の各コマンドを使用します。スワップ領域が不足するとプロセスの応答が停止し、Out of Memory
エラーでプロセスが生成できなくなることがあります。次の表は、プラットフォームごとの適切なコマンドの一覧です。
プラットフォーム | コマンド |
---|---|
AIX |
|
HP-UX |
|
LinuxおよびTru64 UNIX |
|
Solaris |
|
次の例は、Solarisでswap -l
コマンドを実行した場合のサンプル出力です。
swapfile dev swaplo blocks free /dev/dsk/c0t3d0s1 32,25 8 197592 162136
次の各項では、AIXシステムで利用できるツールについて説明します。
AIXのBase Operation System(BOS)は、UNIXシステムに従来組み込まれていたパフォーマンス・ツールや、AIXの実装固有の機能を管理するパフォーマンス・ツールで構成されています。次の表は、最も重要なBOSツールの一覧です。
AIX Performance Toolbox(PTX)には、システム・アクティビティをローカルおよびリモートで監視およびチューニングするためのツールがいくつか含まれています。PTXは、PTX ManagerとPTX Agentという2つのコンポーネントで主に構成されています。PTX Managerは、xmperf
ユーティリティを使用して、構成内の様々なシステムからデータを収集し、表示します。PTX Agentは、xmserd
デーモンを使用して、データを収集しPTX Managerに転送します。PTX Agentは、Performance Aide for AIXと呼ばれる製品として個別に利用することもできます。
PTXとPerformance Aideの両方には、次の表に示す監視およびチューニング・ツールがあります。
AIX System Management Interface Tool(SMIT)は、様々なシステム管理およびパフォーマンス・ツールに対して、メニュー方式のインタフェースを提供します。SMITを使用すると、実行するジョブを中心に様々なツールにナビゲートできます。
次のパフォーマンス分析ツールは、HP-UXシステムで使用できます。
このHP-UXユーティリティは、システムのアクティビティを測定するためのオンライン診断ツールです。GlancePlusは、システム・リソースの使用状況を表示します。つまり、システムのI/O、CPUおよびメモリー使用量に関する動的な情報を一連の画面に表示します。このユーティリティを使用して、プロセスごとのリソースの使用状況を監視できます。
HP Programmer's Analysis Kit(HP PAK)は次のツールで構成されています。
このツールは、プログラムの実行時にパフォーマンス統計を収集します。収集した統計をグラフィカルに表示し、分析できるようにします。
このツールは、インスツルメント処理スレッド・ライブラリlibpthread_tr.sl
によって作成されるトレース・ファイルをグラフィカルに表示します。このツールを使用すると、スレッドの相互作用を表示したり、スレッドがブロックされてリソースを待機している箇所を調べることができます。
HP PAKは、HP Fortran 77、HP Fortran 90、HP C、HP C++、HP ANSI C++およびHP Pascalの各コンパイラに組み込まれています。
次の表は、HP-UXでパフォーマンス・チューニングの追加に使用できるパフォーマンス・チューニング・ツールの一覧です。
Linuxシステムでは、top
、free
およびcat /proc/meminfo
コマンドを使用して、スワップ領域、メモリーおよびバッファの使用量を表示します。
Solarisシステムでは、mpstat
コマンドを使用して、マルチプロセッサ・システムのプロセッサごとの統計を表示します。表の各行は、1プロセッサのアクティビティを示します。1行目は、起動してからのすべてのアクティビティをまとめて表示します。後続の各行は、時間隔でのアクティビティをまとめて表示します。特に指定しないかぎり、すべての値は1秒当たりのイベント数です。引数は、統計および反復回数の時間隔を示します。
次の例は、Solarisで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
次のパフォーマンス・チューニング・ツールを追加して使用できます。
top
コマンドを使用して、実行中のプロセスおよびメモリー使用量を表示します。
メモリー・チューニング・プロセスでは、最初にページングおよびスワッピング領域を測定して、使用可能なメモリー量を確認します。システムのメモリー使用量の確認後、Oracleバッファ・キャッシュをチューニングします。
Oracleバッファ・マネージャによって、アクセス頻度の最も高いデータをキャッシュに長く保存できます。バッファ・マネージャを監視し、バッファ・キャッシュをチューニングすると、Oracle Databaseのパフォーマンスが大幅に向上することがあります。各システムのOracle Databaseバッファ・サイズの最適値は、システム全体の負荷や他のアプリケーションと比較した場合のOracle Databaseの優先順位によって異なります。
この項では、次の項目について説明します。
スワッピングは、オペレーティング・システムのオーバーヘッドに大きく影響するため、最小限に抑える必要があります。スワッピングが行われているかどうかを調べるには、sar
コマンドまたはvmstat
コマンドを使用します。この2つのコマンドで使用するオプションについては、manページを参照してください。
システムでスワッピングが行われている場合は、メモリーを節約するために、次の処理を行います。
Mac OS Xシステムでは、スワップ領域は動的に割り当てられます。オペレーティング・システムでスワップ領域の追加が必要な場合は、
注意:
/private/var/vm
ディレクトリに追加スワップ・ファイルが作成されます。このディレクトリが含まれるファイル・システムに、追加スワップ・ファイルに対応できるだけの十分な空きディスク領域があることを確認してください。 スワップ領域の割当て方法の詳細は、「使用可能および使用済のスワップ領域の決定」を参照してください。
スワップ領域の使用量を確認するには、使用しているプラットフォームに応じて、次のいずれかのコマンドを実行します。
プラットフォーム | コマンド |
---|---|
AIX |
|
HP-UX |
|
Linux |
|
Solaris |
|
Tru64 UNIX |
|
スワップ領域をシステムに追加するには、使用しているプラットフォームに応じて、次のいずれかのコマンドを実行します。
プラットフォーム | コマンド |
---|---|
AIX |
|
HP-UX |
|
Linux |
|
Solaris |
|
Tru64 UNIX |
|
スワップ領域は、物理メモリーの2〜4倍に設定してください。スワップ領域の使用量を監視し、必要に応じて値を大きくしてください。
プログラムを実行するためにプログラム全体をメモリーに格納しておく必要はないため、ページングはスワッピングほど深刻な問題ではありません。少量のページアウトでは、システムのパフォーマンスにほとんど影響はありません。
大量のページングを検出するには、高速応答時またはアイドル時の測定値と、低速応答時の測定値を比較します。
ページングを監視するには、vmstat
(Mac OS Xではvm_stat
)またはsar
コマンドを使用します。
次の表は、これらのコマンドの出力から得られる重要な列の一覧です。
システムで大量のページアウト・アクティビティが常に発生している場合は、次の方法で解決してください。
読取り操作時には、オペレーティング・システムのブロック全体がディスクから読み取られます。データベースのブロック・サイズが、オペレーティング・システムのファイル・システムのブロック・サイズより小さい場合は、I/O帯域幅の効率が悪くなります。Oracle Databaseのブロック・サイズをファイル・システムのブロック・サイズの倍数になるように設定すると、パフォーマンスを最大5パーセント向上させることができます。
データベースのブロック・サイズは、DB_BLOCK_SIZE
初期化パラメータで設定します。ただし、このパラメータの値を変更するには、データベースを再作成する必要があります。
DB_BLOCK_SIZE
パラメータの現在の設定値を調べるには、SQL*PlusのSHOW PARAMETER
DB_BLOCK_SIZE
コマンドを実行します。
使用可能なディスク全体でI/Oを均等に分散して、ディスクへのアクセス時間が短くなるようにしてください。小規模なデータベースやRAIDを使用しないデータベースでは、それぞれのデータファイルと表領域を使用可能なディスク間に分散してください。
データベース記憶域に自動ストレージ管理を使用すると、すべてのデータベースI/Oが、自動ストレージ管理ディスク・グループ内の使用可能なすべてのディスク・デバイス間に分散されます。自動ストレージ管理では、RAWデバイスを管理する煩わしさがなく、RAWデバイスI/Oのパフォーマンスが向上します。
自動ストレージ管理を使用することで、ディスクI/Oを手動でチューニングする必要がなくなります。
使用するオペレーティング・システムに応じて、いくつかのファイル・システム・タイプから選択できます。ファイル・システム・タイプごとにそれぞれ特性が異なります。このことが、データベースのパフォーマンスに大きな影響を与えます。次の表に、一般的なファイル・システム・タイプを示します。
ファイル・システムとアプリケーションには、必ずしも互換性があるとはかぎりません。たとえば、Unifiedファイル・システムの各実装間でさえ、互換性の比較は容易ではありません。選択したファイル・システムによって、パフォーマンスに最大20パーセントの開きが出る場合があります。ファイル・システムを使用する場合は、次のことを行ってください。
次の項では、ディスク・パフォーマンスの監視方法について説明します。
ディスク・パフォーマンスを監視するには、iostat
コマンドおよびsar
コマンドを使用します。これらのコマンドの使用方法は、manページを参照してください。
ディスク・パフォーマンスを監視するには、sar -b
およびsar -u
コマンドを使用します。
次の表に、sar -b
コマンド出力の列をいくつか示します。これらの列は、ディスク・パフォーマンスの分析に重要です。
列 | 説明 |
---|---|
|
1秒ごとに読み取られるブロック数と書き込まれるブロック数(ファイル・システム・データベースに重要) |
|
1秒ごとに読み取られるパーティション数と書き込まれるパーティション数(RAWパーティション・データベース・システムに重要) |
ディスク・パフォーマンスの分析に重要なsar -u
列の1つに、%wio
があります。これによって、ブロックされたI/Oで待機するCPU時間の割合がわかります。
キー・インジケータは次のとおりです。
bread
、bwrit
、pread
およびpwrit
列の値の合計は、ディスクI/Oサブシステムのアクティビティのレベルを示します。合計値が大きいほど、I/Oサブシステムはビジーになります。物理ドライブの数が多いほど、合計のしきい値が高くなる可能性があります。デフォルトの最適値は、ドライブ2個の場合は40以下、ドライブ4〜8個の場合は60以下です。
%rcache
列の値は91以上、%wcache
列の値は61以上である必要があります。それ以外の場合は、システムがディスクI/Oバウンドになる可能性があります。
%wio
列の値が常に21以上の場合、システムはI/Oバウンドになります。
SGAとは、共有メモリーに格納されているOracle構造体のことです。この構造体には、静的データ構造体、ロックおよびデータ・バッファが含まれています。各OracleプロセスがSGA全体をアドレス指定するためには、十分な共有メモリーが必要です。
1つの共有メモリー・セグメントの最大サイズは、shmmax
(Tru64 UNIX ではshm_max
)カーネル・パラメータで指定します。
次の表に、このパラメータの推奨値をプラットフォームごとに示します。
プラットフォーム | 推奨値 |
---|---|
AIX |
該当なし |
HP-UX |
関連項目: HP-UXの |
Linux |
システムに搭載された物理メモリーの半分のサイズ。 |
Mac OS X |
システムに搭載された物理メモリーの半分のサイズ。 |
SolarisおよびTru64 UNIX |
注意: Oracle Databaseインスタンスを起動する場合は、 |
SGAのサイズが共有メモリー・セグメントの最大サイズ(shmmax
またはshm_max
)を超える場合、Oracle Databaseでは、要求されたSGAサイズになるように、連続したセグメントが連結されます。shmseg
カーネル・パラメータ(Tru64 UNIXではshm_seg
)には、任意のプロセスで連結できるセグメントの最大数を指定します。SGAのサイズを制御するには、次の初期化パラメータを設定します。
または、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ずつ増やしてください。
次のいずれかの方法で、SGAサイズを確認できます。
SQL> SHOW SGA
結果はバイト単位で表示されます。
oracle
ユーザーとしてipcs
コマンドを実行します。
共有メモリーとしてプロセス間で共通の仮想メモリー・リソースが使用されます。各プロセスは、パフォーマンスを向上させるために、表やキャッシュ・エントリなどの共通の仮想メモリー変換リソース・セットを介して仮想メモリー・セグメントを共有します。
ページングを回避し、I/Oのオーバーヘッドを減らすために共有メモリーを確保できます。これを実行するには、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_of_real_memory
maxpin%
オプションを使用しているときは、確保されたメモリーの量がOracle SGAのサイズに対して、システムの実メモリーの3パーセント以上であることが重要です。これにより、確保可能な空きメモリーをカーネルが使用できます。たとえば、物理メモリーが2GBであり、SGAを400MB(RAMの20パーセント)確保する場合は、次のコマンドを実行します。
$ /usr/sbin/vmo -r -o maxpin%=23
システムの操作時に確保されたメモリーの使用量を監視するには、svmon
コマンドを使用します。Oracle Databaseは、LOCK_SGA
パラメータがtrue
に設定されている場合にのみメモリーを確保しようとします。
POWER4またはPOWER5システム上でサイズがぞれぞれ16MBのラージ・ページを10件オンにして予約するには、次のコマンドを実行します。
$ /usr/sbin/vmo -r -o lgpg_regions=10 -o lgpg_size=16777216
このコマンドは、bosbootを提案し、変更を有効にするには再起動する必要があることを示す警告を表示します。
SGA全体を格納できるラージ・ページを指定することをお薦めします。LOCK_SGA
パラメータがtrue
に設定されている場合、Oracle Databaseインスタンスではラージ・ページを割り当てようとします。SGAのサイズが確保可能なメモリー・サイズまたはラージ・ページのサイズを超える場合は、これらのサイズを超えるSGA部分が通常の共有メモリーに割り当てられます。
RAWデバイスを最大限に活用するには、Oracle Databaseバッファ・キャッシュのサイズを調整します。メモリーに制限がある場合は、オペレーティング・システムのバッファ・キャッシュも調整します。
オペレーティング・システムのバッファ・キャッシュには、メモリーからディスクまたはディスクからメモリーへの転送中に、メモリー内のデータ・ブロックが保持されます。
Oracle Databaseバッファ・キャッシュは、Oracle Databaseバッファを格納するためのメモリー内の領域です。Oracle DatabaseではRAWデバイスを使用できるため、オペレーティング・システムのバッファ・キャッシュは使用しません。
RAWデバイスを使用する場合は、Oracle Databaseバッファ・キャッシュのサイズを大きくします。システムで使用できるメモリーに制限がある場合は、それに応じてオペレーティング・システムのバッファ・キャッシュのサイズを小さくします。
調整するバッファ・キャッシュを判断するには、sar
コマンドを使用します。