Oracle Database 管理者リファレンス 10g リリース2(10.2) for UNIX Systems B19278-06 |
|
この付録では、HP-UXシステムでOracle Databaseを管理する方法について説明します。次の項目について説明します。
Oracle Databaseは、インスタンスの起動時に、Oracle共有グローバル領域(SGA)の作成用に割り当てられた共有メモリーをHP-UX shmmax
カーネル・パラメータの値で除算して、メモリー・セグメントを作成します。たとえば、1つのOracleインスタンスに割り当てられた共有メモリーが64GBで、shmmax
パラメータの値が1GBの場合、Oracle Databaseはそのインスタンスに対して64個の共有メモリー・セグメントを作成します。
1つのOracleインスタンスに対して複数の共有メモリー・セグメントが作成されると、パフォーマンスが低下する可能性があります。これは、Oracle Databaseでインスタンスが作成されるときに、各共有メモリー・セグメントが一意のプロテクション・キーを受け取るためです。使用できるプロテクション・キーの数は、次の表に示すように、システム・アーキテクチャによって異なります。
アーキテクチャ | プロテクション・キーの数 |
---|---|
PA-RISC |
6 |
Itanium |
14 |
Oracleインスタンスが作成する共有メモリー・セグメントがプロテクション・キーの数より多い場合、HP-UXオペレーティング・システムは、プロテクション・キー・フォルトを表示します。
shmmax
パラメータの値は、システムで使用できる物理メモリーの量に設定することをお薦めします。この設定によって、1つのOracleインスタンスの共有メモリー全体が1つの共有メモリー・セグメントに割り当てられ、インスタンスに必要なプロテクション・キーが1つで済みます。
システムのアクティブな共有メモリー・セグメントのリストを表示するには、次のコマンドを実行します。
$ ipcs -m
Oracle Databaseがそのインスタンスに対してプロテクション・キーの数よりも多いセグメントを作成する場合は、shmmax
カーネル・パラメータの値を大きくします。
HP-UXシステムのほとんどのプロセスは、タイム・シェアリング・スケジューリング・ポリシーを使用します。タイム・シェアリングが適用されると、重要な処理(ラッチの保持など)が実行されるときにOracleプロセスがスケジュールから除外されるため、パフォーマンスが低下することがあります。HP-UXのSCHED_NOAGE
は、特にこの問題に対処した修正済のスケジューリング・ポリシーです。通常のタイム・シェアリング・ポリシーとは異なり、SCHED_NOAGE
によってスケジュールが設定されたプロセスは、優先順位が上下したり、優先使用されることがありません。
この機能は、オンライン・トランザクション処理(OLTP)環境に適しています。これは、OLTP環境では、重要なリソースを対象に競合が発生することがあるためです。Oracle DatabaseのOLTP環境でSCHED_NOAGE
ポリシーを使用した場合、パフォーマンスが10パーセント以上も向上する可能性があります。
SCHED_NOAGE
ポリシーを意思決定支援環境で使用しても、同じレベルのパフォーマンス上の効果は得られません。これは、リソースの競合がほとんど発生しないためです。アプリケーションとサーバーの環境はそれぞれ異なるため、使用している環境にSCHED_NOAGE
ポリシーが適切であることをテストおよび検証する必要があります。SCHED_NOAGE
を使用する場合、Oracleプロセスに最も高い優先順位を割り当てることには注意が必要です。SCHED_NOAGE
の最も高い優先順位をOracleプロセスに割り当てると、システムのCPUリソースを使い果たし、他のユーザー・プロセスの応答が停止する可能性があります。
Oracle DatabaseでSCHED_NOAGE
スケジューリング・ポリシーを使用するには、OSDBAグループ(通常はdba
グループ)がRTSCHED
およびRTPRIO
権限を取得し、スケジューリング・ポリシーを変更したり、Oracleプロセスの優先順位レベルを設定する必要があります。dba
グループにこれらの権限を付与するには、次の手順を実行します。
root
ユーザーでログインします。
/etc/privgroup
ファイルを開くか、必要な場合は作成します。
RTPRIO
権限とRTSCHED
権限を指定します。
dba RTPRIO RTSCHED
# /usr/sbin/setprivgrp -f /etc/privgroup
# /usr/sbin/getprivgrp dba
HPUX_SCHED_NOAGE
初期化パラメータを各インスタンスのパラメータ・ファイルに追加し、このパラメータに対してプロセスの優先順位レベル(整数値)を設定します。サポートされる値の範囲は178〜255です。値が小さくなるほど優先順位が高くなります。パラメータの設定が範囲外にある場合、Oracle Databaseは自動的にそのパラメータを許容値に設定し、新しい値が設定されたSCHED_NOAGE
ポリシーを使用して処理を続行します。また、新しい設定に関するメッセージをalert_
sid
.log
ファイルに生成します。ユーザーまたは自動再調整によって、Oracleプロセスに対して最高レベルの優先順位が割り当てられた場合、Oracle Databaseは、システムのCPUリソースが使い果たされる可能性があることを警告するメッセージをalert_
sid
.log
ファイルに生成します。このパラメータには、Oracleプロセスに必要な優先順位レベルを割り当てておくことをお薦めします。
Oracle Database 10gでは、動的初期化パラメータSTATISTICS_LEVEL
がTYPICAL
(デフォルト)またはALL
に設定されている場合、いつでもランタイム統計を収集できます。このパラメータ設定は、TIMED_STATISTICS
初期化パラメータを暗黙的にtrue
に設定します。HP-UXシステム上のOracle Databaseでは、gethrtime()
システム・ライブラリ・コールを使用して、統計の収集中に経過時間を計算します。この軽量システム・ライブラリ・コールを使用することによって、パフォーマンスに影響を与えることなく、Oracleインスタンスを実行しながら、いつでもランタイム統計を収集できます。
TIMED_STATISTICS
初期化パラメータが明示的にtrue
に設定されているときに、gethrtime()
システム・ライブラリ・コールを使用すると、使用しない場合に比べてOracleのパフォーマンスを最大10パーセント改善できます。また、ランタイム統計の収集にgethrtime()
システム・ライブラリ・コールを使用しても、Oracle DatabaseのOLTP環境のパフォーマンスが低下することはありません。
非同期I/O擬似ドライバをHP-UXシステム上で使用すると、Oracle DatabaseがRAWディスク・パーティションへのI/Oを非同期方式で実行できるようになり、I/Oのオーバーヘッドが減少してスループットが向上します。非同期I/O擬似ドライバは、HP-UXのサーバーとワークステーションの両方で使用できます。
Oracle Databaseで非同期I/O操作を処理するには、OSDBAグループ(dba
)にMLOCK
権限を付与する必要があります。dba
グループにMLOCK
権限を付与するには、次の手順を実行します。
root
ユーザーでログインします。
/etc/privgroup
ファイルを開くか、必要な場合は作成します。
MLOCK
権限を指定します。 dba RTPRIO RTSCHED MLOCK
# /usr/sbin/setprivgrp -f /etc/privgroup
# /usr/sbin/getprivgrp dba
HP-UXシステムで非同期I/Oを使用する場合は、データベース・ファイルに対して次の記憶域オプションを使用する必要があります。
いずれかの記憶域オプションを使用して非同期I/Oを実装する前に、System Administrator Management(SAM)ユーティリティを使用して、非同期ディスク・ドライバをHP-UXカーネルに設定する必要があります。
SAMユーティリティを使用して非同期ディスク・ドライバを追加し、カーネルを設定するには、次の手順を実行します。
root
ユーザーで次のコマンドを実行します。
# sam
asyncdsk
)を選択します。
MAX_ASYNC_PORTS
パラメータを選択します。
MAX_ASYNC_PORTS
パラメータは、設定可能なHP-UXカーネル・パラメータの1つで、/dev/async
ファイルを同時にオープンできる最大プロセス数を制御します。
最大数のプロセスが/dev/async
ファイルをオープンした後で別のプロセスがそのファイルをオープンしようとすると、エラー・メッセージが表示されます。多数のシャドウ・プロセスやパラレル問合せスレーブが非同期I/Oを実行しているシステムで、このエラーが発生すると、システムのパフォーマンスが低下することがあります。このエラーは記録されません。このエラーを回避するには、/dev/async
ファイルにアクセスする最大プロセス数を予測し、MAX_ASYNC_PORTS
パラメータにその値を設定します。
2番目のオプションを選択した場合は、新しいカーネルvmunix_test
とその作成に使用されるsystem.SAM
構成ファイルが、/stand/build
ディレクトリに作成されます。
新しいカーネルを使用するには、次の手順を実行します。
# /usr/sbin/kmupdate
# /sbin/shutdown -r now
HP-UX非同期デバイス・ドライバを使用して非同期I/O操作を可能にするには、次の手順を実行します。
root
ユーザーでログインします。
# /sbin/mknod /dev/async c 101 0x0
/dev/async
デバイス・ファイルが存在することを確認します。
# ls -l /dev/async
このコマンドの出力は、次のようになります。
crw------- 1 oracle dba 101 0x000000 Oct 28 10:32 /dev/async
Oracleソフトウェア所有者がoracle
で、OSDBAグループがdba
の場合は、次のコマンドを実行します。
# /usr/bin/chown oracle:dba /dev/async # /usr/bin/chmod 660 /dev/async
非同期I/Oを検証するには、最初に、HP-UX非同期ドライバがOracle Databaseに対して設定されていることを検証します。次に、Oracle DatabaseがHP-UXデバイス・ドライバを介して非同期I/Oを実行していることを検証します。
HP-UX非同期ドライバがOracle Databaseに対して適切に設定されていることを検証するには、次の手順を実行します。
$ gpm
パラレル問合せスレーブ・プロセスによって現在オープンされているファイルのリストが表示されます。
/dev/async
ファイルまたはモード101 0x000000を検索します。/dev/async
ファイルまたはモード101 0x000000のいずれかがリストに含まれている場合は、パラレル問合せスレーブ・プロセスによって/dev/async
ファイルがオープンされています。つまり、HP-UX非同期デバイス・ドライバは、Oracleプロセスが非同期I/Oを実行できるように正しく設定されています。/dev/async
ファイルのファイル記述子番号をメモしておいてください。
Oracle DatabaseがHP-UX非同期デバイス・ドライバを介して非同期I/Oを使用しているかどうかを検証するには、次の手順を実行します。
tusc
ユーティリティを、前述の手順でGlancePlusユーティリティを使用して選択したOracleパラレル問合せスレーブに連結します。
tusc
出力でread/writeコールのパターンをチェックします。このためには、たとえば、次のコマンドを入力します。pid
は、非同期I/Oを処理する予定のパラレル問合せスレーブのプロセスIDです。
$ tusc -p pid > tusc.output
tusc.output
ファイルを開きます。次に、tusc.output
ファイルのサンプルを示します。
( Attached to process 2052: "ora_p000_tpch" [ 64-bit ]) ................... ........................ [2052] read(9, "80\0\001\013 \b\0\0\0\0\0\0\0\0".., 388) .. = 28 [2052] write(9, "\0\0\00e\0\0\0\080\0\001\013Ð \0".., 48) .. = 48 [2052] read(9, "80\0\001\013¢ 18\0\0\0\0\0\0\0\0".., 388) .. = 28 [2052] write(9, "\0\0\00e\0\0\0\080\0\001\01bd4\0".., 48) .. = 48
DISK_ASYNCH_IO
初期化パラメータが明示的にfalse
に設定されていない場合(デフォルトのtrue
になっている場合)、tusc.output
ファイルには、同じファイル記述子(前述の例では9)の非同期read/writeコールのパターンが連続して表示されます。
tusc.output
ファイルのファイル記述子番号をGlancePlusの/dev/async
ファイルで使用されている番号にマップします。この番号は、特定のパラレル問合せスレーブ・プロセスについて一致しています。これによって、HP-UX非同期デバイス・ドライバを介したI/Oが非同期であることが検証されます。同期I/Oの場合またはDISK_ASYNC_IO
初期化パラメータが明示的にfalse
に設定されている場合、前述の非同期read/writeパターンは表示されません。かわりに、lseek
またはpread
/pwrite
のコールが表示されます。また、1つのファイル記述子のみでなく、多数の異なるファイル記述子(read/writeの最初の引数)が表示されます。
HP-UXシステム上のOracle Databaseでは、HP-UX非同期ドライバが提供する非ブロック・ポーリング機能を使用して、I/O操作の状態がチェックされます。非同期ドライバは、送信されたI/O操作の状態に基づいてフラグを更新します。このポーリングではこのフラグがチェックされます。HP-UXでは、このフラグが共有メモリーに読み込まれている必要があります。
Oracle Databaseでは、非同期フラグを各OracleプロセスのSGA内に設定します。HP-UXシステム上のOracle Databaseは、真の非同期I/Oメカニズムを備えています。つまり、以前に発行されたI/O操作の一部が完了していなくても、I/O要求を発行できます。このメカニズムにより、パフォーマンスが向上し、パラレルI/Oプロセスのスケーラビリティが保証されます。
リリース8.1.7より前のOracle Databaseのリリースでは、I/O操作は、HP-UX非同期ドライバを使用して共有メモリーからのみ実行できました。新しいHP-UX非同期ドライバでは、Oracle Database 10gは共有メモリーとプロセス専用領域の両方からI/O操作を実行できます。ただし、非同期ドライバを介したI/O操作は、本質的には非同期ではありません。Oracle Databaseでは、非同期ドライバに送信されたI/O操作の状態をチェックするために、ブロック待機が必要です。このため、データベース・ライター・プロセスなど一部のOracleプロセスでは、本質的には同期I/Oが処理されています。
Oracle Database 10g上で実行するアプリケーションは、以前のリリースで実行するアプリケーションと比べて非常に大きいメモリーを使用する場合があります。これには、次の2つの理由があります。
CURSOR_SPACE_FOR_TIME
初期化パラメータのデフォルト値が、false
からtrue
に変更されたこと。
ユーザーがSQL文を発行すると、Oracle Databaseは、次のメモリー割当てステップを自動的に実行します。
専用SQL領域には、処理対象SQL文のバインド情報やランタイム・メモリー構造などのデータが格納されます。また、解析対象文および情報を処理するその他の文も格納されます。
同じSQL文を実行するすべてのユーザーには、単一の共有SQL領域を使用するカーソルが割り当てられます。このようにして、多数の専用SQL領域を同じ共有SQL領域に関連付けることができます。ユーザー・セッションが専用サーバーを介して接続された場合、専用SQL領域はサーバー・プロセスのPGA内に設定されます。ただし、ユーザー・セッションが共有サーバーを介して接続された場合は、専用SQL領域の一部がSGA内に保持されます。
CURSOR_SPACE_FOR_TIME
初期化パラメータは、SQLカーソルの割当てをライブラリ・キャッシュから解除して、新規SQL文のために領域を確保できるかどうかを指定します。このパラメータをtrue
に設定すると、共有SQL領域の割当てがOracleライブラリ・キャッシュから解除されるのは、SQL文に関連付けられたすべてのアプリケーション・カーソルがクローズしている場合のみになります。また、このパラメータがtrue
の場合、オープンしているカーソルに関連付けられた専用SQL領域の割当て解除も防止されるため、ユーザーの専用SQL領域を永続的にすることができます。
Oracle DatabaseでCURSOR_SPACE_FOR_TIME
初期化パラメータをtrue
に設定した場合、以前のリリースのOracleと比べて次のメリットがあります。
Oracle DatabaseでCURSOR_SPACE_FOR_TIME
初期化パラメータをtrue
に設定した場合、以前のリリースのOracle Databaseと比べて次のデメリットがあります。
CURSOR_SPACE_FOR_TIME
パラメータをfalse
に設定すると、SQL全体の実行速度が遅くなり、パフォーマンスが低下することがあります。このパラメータをfalse
に設定すると、共有SQL領域の割当てがライブラリ・キャッシュから早期に解除される可能性があります。
デフォルトでは、Oracle Databaseは、プロセス専用メモリーの割当てに、HP-UXシステムの使用可能な最大の仮想メモリー・ページ・サイズ設定を使用します。このサイズは、値L
(最大)で定義され、現在HP-UX v2 (11i.23)です。この値は、Oracle実行可能ファイルのリンク時に、LARGE_PAGE_FLAGS
オプションの1つとして設定されます。
仮想メモリー・ページ・サイズがLに設定されていると、HP-UXは、使用可能なプロセス専用メモリーを、1GB制限まで、または割り当てられたメモリー量の合計に達するまで、1MB、4MB、16MBなどのサイズのページに割り当てます。Oracle PGAに十分なメモリーが割り当てられていて、大きなデータ・ページ・サイズ単位でのメモリー割当てが可能な場合は、オペレーティング・システムは、一度に最大のページ・サイズを割り当てます。たとえば、Oracle PGAに48MBを割り当てている場合、システムでは、16MBを3ページ設定するか、またはより小さい倍数の単位サイズのページを組み合せることができます。たとえば、1MBを4ページ、4MBを3ページおよび16MBを2ページとするなどです。PGAに64MBを割り当てた場合、データ・ページ単位サイズと使用可能なメモリー量とが一致するため、1ページ(64MB)がオペレーティング・システムによって割り当てられます。
一般的には、大規模メモリー・ページによってアプリケーションのパフォーマンスは向上します。これは、オペレーティング・システムが処理する必要のある仮想メモリー変換時のエラー数が減り、より多くのCPUリソースをアプリケーションに解放できるためです。また、プロセス専用メモリーの割当てに必要なデータ・ページ数の合計も減ります。これによって、プロセッサ・レベルでのTranslation Lookaside Buffer(TLB)ミスの可能性が減ります。
ただし、アプリケーションにメモリーの制約があり、非常に多くのプロセスを実行する傾向がある場合は、この大幅なページ・サイズの増加によってプロセスに大規模なメモリーの割当てが指示されるため、メモリー不足エラー・メッセージが発生する可能性があります。メモリー不足エラーが発生する場合は、ページ・サイズの値を小さくして、D(デフォルト)サイズの4KBとL(最大)サイズの4GBの間に設定する必要があります。
最小ページ・サイズ設定値(4KB)を使用すると、最大ページ・サイズ設定値を使用した場合よりもCPU使用率が20パーセント以上高くなります。最大設定値L
を使用すると、4MBの設定値を使用した場合よりもメモリー使用率が50パーセント高くなります。システムにメモリー制約がある場合は、使用できるメモリー・リソースの制約内で、ページ・サイズを特定のアプリケーションの要件と一致するように設定することをお薦めします。
たとえば、設定値Lでは問題が発生するアプリケーションで、設定値4MBの仮想メモリー・ページを使用すると、適切なパフォーマンスが得られる場合があります。
永続的な専用SQL領域および大規模仮想メモリー・ページ・サイズへのメモリー割当ての増加に対応してチューニングを行うには、次の推奨事項があります。
CURSOR_SPACE_FOR_TIME
パラメータの値は、true
にしておきます。ただし、この設定で、アプリケーションの実行時にライブラリ・キャッシュ・ミスが発生する場合があります。この場合、共有プールが、同時にオープンしているすべてのカーソル用のSQL領域を保持できる最小限のサイズになっている可能性があります。
# /usr/bin/chatr +pd newsize $ORACLE_HOME/bin/oracle
この例のnewsize
は仮想メモリー・ページ・サイズの新しい値を表します。
chatr
コマンドを次のように使用して、新しい設定を表示します。
# /usr/bin/chatr $ORACLE_HOME/bin/oracle
HP-UX 11iでは、プロセッサ・セット(Psets)の動的ランタイム再構成、および有効なユーザーによるプロセッサ・セット間の作業負荷の動的再割当てをサポートしています。
HP-UX Virtual Partitions(VPAR)を使用すると、ユーザーは、各自のシステムを複数の論理パーティションで構成し、各パーティションに独自のプロセッサ、メモリーおよびI/Oリソースのセットを割り当てて、HP-UXオペレーティング・システムの個別のインスタンスを実行できます。vParsに組み込まれているHP-UX Processor Setsを使用すると、仮想パーティションを再起動せずに、仮想パーティション間で動的プロセッサを移行できます。これによって、アプリケーション間でリソースのパーティション化を効率的に行うことができるため、HP-UXサーバー上で実行する各アプリケーションへのインタフェースおよび保証を必要とするリソースの割当てが最小限で済みます。
Oracle DatabaseのCPU_COUNT
初期化パラメータは、Oracle Databaseで使用可能なCPU数を指定します。HP-UX 11iシステムのOracle Database 10gでは、オペレーティング・システムを定期的に問い合せることによって、CPUホスト構成の変更を動的に検出できます。システムのCPU数が変更された場合、OracleはCPU_COUNT
パラメータを適切な値に調整して、その内部リソースを再割当てします。これによって、新しい作業負荷は新しく追加されたプロセッサを利用できるため、高いCPU使用率が原因でボトルネックが発生している場合は、DBAによる変更を必要とせずに、データベースのパフォーマンスを改善できます。
初期化パラメータの一部の値は、システムの起動時にCPU_COUNT
値に基づいて計算されます。システムの起動後にCPU数が変更された場合、これらの初期化パラメータは動的に更新されず、新しいCPU数は考慮されません。このため、新しいCPU数が元のCPU数と大きく異なる場合は、最適でないデータベース構成となる場合があります。システムでCPU数が大幅に増加すると、データベースは追加された処理能力を利用できない可能性があります。
システムで増加したCPU数が小さい場合(たとえば、2から4に変更した場合)に必要な処理はありません。
システムで増加したCPU数が大きい場合(たとえば、2から32に変更した場合)は、次の手順に従ってください。
HP-UXシステムでは、NIS外部ネーミング・アダプタがサポートされています。 NIS外部ネーミングの構成方法と使用方法の詳細は、『Oracle Database Net Services管理者ガイド』の外部ネーミング・メソッドの構成に関する項を参照してください。