Oracle Database管理者リファレンス 11gリリース1(11.1) for Linux and UNIX-Based Operating Systems E05786-05 |
|
![]() 戻る |
![]() 次へ |
この付録では、HP-UXシステムでOracle Databaseを管理する方法について説明します。次の項目について説明します。
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
カーネル・パラメータの値を大きくします。
関連項目: 推奨されるカーネル・パラメータの最小値については、『Oracle Databaseインストレーション・ガイド』を参照してください。 |
HP-UXシステムでは、ほとんどのプロセスは、タイム・シェアリング・スケジューリング・ポリシーを使用します。タイム・シェアリングが適用されると、ラッチの保持などの重要な処理が実行される際にOracleプロセスがスケジュールから除外されるため、パフォーマンスが低下する場合があります。HP-UXでは、特にこの問題に対処した修正済のスケジューリング・ポリシーであるSCHED_NOAGE
が使用されます。通常のタイム・シェアリング・ポリシーとは異なり、SCHED_NOAGE
によりスケジュールが設定されたプロセスは、優先順位が上下する、または優先使用されることがありません。
オンライン・トランザクション処理環境では、重要なリソースを対象に競合が発生する場合があるため、この機能は、オンライン・トランザクション処理環境に適しています。オンライン・トランザクション処理環境で、Oracle Databaseで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
ユーザーでログインします。
OSDBAグループの名前で始まる次の行を追加または編集し、システムが再起動するたびにこのグループに付与するRTPRIO
権限とRTSCHED
権限を指定します。
dba RTPRIO RTSCHED
ファイルを保存してテキスト・エディタを終了します。
次のコマンドを入力し、OSDBAグループに権限を付与します。
# /usr/sbin/setprivgrp -f /etc/privgroup
次のコマンドを入力し、権限が正しく設定されていることを確認します。
# /usr/sbin/getprivgrp dba
HPUX_SCHED_NOAGE
初期化パラメータを各インスタンスのパラメータ・ファイルに追加し、このパラメータに対してプロセスの優先順位レベルを整数値で設定します。サポートされる値の範囲は178〜255です。値が小さくなるほど優先順位が高くなります。すべてのOracle DatabaseプロセスについてHPUX_SCHED_NOAGE
初期化パラメータのデフォルト値は178です。LMSプロセスでは、_os_sched_high_priority
初期化パラメータを設定すると、これを変更できます。_os_sched_high_priority
パラメータが31〜2の間の場合、LMSプロセスはSCHED_RR
で設定された優先順位で実行されます。パラメータの値が178〜255の間の場合、プロセスはSCHED_NOAGE
で設定された値で実行されます。ただし、LMSは、HPUX_SCHED_NOAGE
の値より低い優先順位では実行されません。
HPUX_SCHED_NOAGE
パラメータの設定が範囲外にある場合、Oracle Databaseは自動的にそのパラメータを許容値に設定し、新しい値が設定されたSCHED_NOAGE
ポリシーを使用して処理を続行します。また、新しい設定に関するメッセージをalert_
sid
.log
ファイルに生成します。ユーザーまたは自動再調整によって、Oracleプロセスに対して最高レベルの優先順位が割り当てられた場合、Oracle Databaseは、システムのCPUリソースが使い果される可能性があることを警告するメッセージをalert_
sid
.log
ファイルに生成します。このパラメータには、Oracleプロセスに必要な優先順位レベルを割り当てておくことをお薦めします。
関連項目: 優先順位ポリシーと優先順位の範囲の詳細は、HP-UXのドキュメント、およびrtsched(1)とrtsched(2)のmanページを参照してください。 |
Oracle Database 11gでは、動的初期化パラメータSTATISTICS_LEVEL
がTYPICAL
(デフォルト)またはALL
に設定されている場合、いつでもランタイム統計を収集できます。このパラメータ設定は、TIMED_STATISTICS
初期化パラメータを暗黙的にtrue
に設定します。HP-UXシステム上のOracle Databaseでは、gethrtime()
システム・ライブラリ・コールを使用して、統計の収集中に経過時間を計算します。この軽量システム・ライブラリ・コールの使用により、パフォーマンスに影響を与えることなく、Oracleインスタンスを実行しながら、いつでもランタイム統計を収集できます。
TIMED_STATISTICS
初期化パラメータが明示的にtrue
に設定されているときに、gethrtime()
システム・ライブラリ・コールを使用すると、使用しない場合に比べてOracleのパフォーマンスを最大10%向上できます。また、ランタイム統計の収集にgethrtime()
システム・ライブラリ・コールを使用しても、Oracle Databaseのオンライン・トランザクション処理環境のパフォーマンスが低下することはありません。
非同期入出力擬似ドライバをHP-UXシステム上で使用すると、Oracle DatabaseがRAWディスク・パーティションへの入出力を非同期方式で実行できるようになり、入出力のオーバーヘッドが減少してスループットが向上します。非同期入出力擬似ドライバは、HP-UXのサーバーとワークステーションの両方で使用できます。
この項では、次の項目について説明します。
Oracle Databaseで非同期入出力操作の処理を許可するには、OSDBA
グループ(dba
)にMLOCK
権限を付与する必要があります。dba
グループにMLOCK
権限を付与するには、次の手順を実行します。
root
ユーザーでログインします。
OSDBAグループの名前で始まる次の行を追加または編集し、MLOCK
権限を指定します。
注意: このファイルでは、特定のグループに対する権限指定に1行のみを使用する必要があります。このファイルにdba グループに関する行がすでに含まれている場合は、その行にMLOCK 権限を追加してください。 |
dba RTPRIO RTSCHED MLOCK
ファイルを保存してテキスト・エディタを終了します。
次のコマンドを入力し、OSDBAグループに権限を付与します。
# /usr/sbin/setprivgrp -f /etc/privgroup
次のコマンドを入力し、権限が正しく設定されていることを確認します。
# /usr/sbin/getprivgrp dba
HP-UXシステムで非同期入出力を使用する場合、データベース・ファイルの記憶域オプションとしてRAWパーティションを使用する自動ストレージ管理ディスク・グループを使用する必要があります。
関連項目: HP-UXシステムで自動ストレージ管理およびRAW論理ボリュームを構成する方法の詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。 |
いずれかの記憶域オプションを使用して非同期入出力を実装する前に、System Administrator Managementユーティリティを使用して、非同期ディスク・ドライバをHP-UXカーネルに設定する必要があります。
SAMユーティリティを使用して非同期ディスク・ドライバを追加し、カーネルを設定するには、次の手順を実行します。
root
ユーザーで次のコマンドを実行します。
# sam
「Kernel Configuration」領域を選択します。
「Drivers」領域を選択します。
非同期ディスク・ドライバ(asyncdsk
)を選択します。
「Action」→「Add Driver to Kernel」を選択します。
「List」→「Configurable Parameters」を選択します。
MAX_ASYNC_PORTS
パラメータを選択します。
「Action」→「Modify Configurable Parameter」を選択します。
次のガイドラインを使用して、パラメータに新しい値を指定し、「OK」をクリックします。
MAX_ASYNC_PORTS
パラメータは、設定可能なHP-UXカーネル・パラメータで、/dev/async
ファイルを同時に開ける最大プロセス数を制御します。
最大数のプロセスが/dev/async
ファイルを開いた後で別のプロセスがそのファイルを開こうとすると、エラー・メッセージが表示されます。多数のシャドウ・プロセスやパラレル問合せスレーブが非同期入出力を実行しているシステムで、このエラーが発生すると、システムのパフォーマンスが低下する場合があります。このエラーは記録されません。このエラーを回避するには、/dev/async
ファイルにアクセスする可能性がある最大プロセス数を推定し、MAX_ASYNC_PORTS
パラメータにその値を設定します。
「Action」→「Process a New Kernel」を選択します。
次のオプションのいずれかを選択し、「OK」をクリックします。
「Move Kernel Into Place and Shutdown System/Reboot Now」
「Do Not Move Kernel Into Place: Do Not Shutdown/Reboot Now」
2番目のオプションを選択した場合は、新しいカーネルvmunix_test
とその作成に使用されるsystem.SAM
構成ファイルが、/stand/build
ディレクトリに作成されます。
HP-UX非同期デバイス・ドライバを使用して非同期入出力操作を有効にするには、次の手順を実行します。
root
ユーザーでログインします。
次のコマンドを入力し、デバイス・ファイルを作成します。
# /sbin/mknod /dev/async c 101 0x100
デフォルトでは、マイナー番号は0(ゼロ)に設定されます。次の表に、デバイス・ファイルの作成に使用できる8ビットのマイナー番号を示します。
次のコマンドを入力し、メジャー番号が101の/dev/async
デバイス・ファイルが存在することを確認します。
# ls -l /dev/async
このコマンドの出力は、次のようになります。
crw------- 1 oracle dba 101 0x000000 Oct 28 10:32 /dev/async
必要に応じて、このデバイス・ファイルに対し、Oracleソフトウェア所有者およびOSDBAグループとの整合性があるオペレーティング・システム所有者とアクセス権を設定します。
Oracleソフトウェア所有者がoracle
で、OSDBAグループがdba
の場合は、次のコマンドを実行します。
# /usr/bin/chown oracle:dba /dev/async # /usr/bin/chmod 660 /dev/async
非同期入出力を検証するには、最初に、HP-UX非同期ドライバがOracle Databaseに対して構成されていることを検証し、次に、Oracle DatabaseがHP-UXデバイス・ドライバを介して非同期入出力を実行していることを検証します。
HP-UX非同期ドライバがOracle Databaseに対して構成されていることを検証するには、次の手順を実行します。
パラレル問合せスレーブ・プロセスの数が少ないOracle Databaseを起動します。
次のコマンドを入力して、GlancePlus/UXユーティリティを起動します。
$ gpm
メイン・ウィンドウで、「Reports」→「Process List」をクリックします。
「Process List」ウィンドウで、パラレル問合せスレーブ・プロセスを1つ選択し、「Reports」→「Process Open Files」を選択します。
パラレル問合せスレーブ・プロセスにより現在開かれているファイルのリストが表示されます。
オープン・ファイルのリストで、/dev/async
ファイルまたは101 0x104000モードを検索します。
いずれかがリストに含まれている場合、/dev/async
ファイルはパラレル問合せスレーブ・プロセスにより開かれ、HP-UX非同期デバイス・ドライバは、Oracleプロセスが非同期入出力を実行できるように正しく構成されています。/dev/async
ファイルのファイル記述子番号を書きとめてください。
Oracle DatabaseがHP-UX非同期デバイス・ドライバを介して非同期入出力を使用しているかどうかを検証するには、次の手順を実行します。
HP-UXシステムのtusc
ユーティリティを、前の手順のGlancePlusで選択したものと同一のOracleパラレル問合せスレーブに連結します。
使用している環境で入出力バウンド問合せを実行します。
tusc
出力で読取り/書込みコールのパターンをチェックします。
そのためには、たとえば、次のコマンドを入力します。pid
は、非同期入出力を処理する予定のパラレル問合せスレーブのプロセスIDです。
$ tusc -p pid > tusc.output
問合せの実行後、[Ctrl]キーを押しながら[C]キーを押してプロセスから切断し、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非同期デバイス・ドライバを介した入出力が非同期であることが検証されます。同期入出力の場合またはDISK_ASYNC_IO
初期化パラメータが明示的にfalse
に設定されている場合、前述の非同期read/writeパターンは表示されません。かわりに、lseek
またはpread/pwrite
のコールが表示されます。また、1つのファイル記述子のみでなく、多数の異なるファイル記述子(read/writeの最初の引数)が表示されます。
HP-UXシステム上のOracle Databaseでは、HP-UX非同期ドライバが提供する非ブロック・ポーリング機能を使用して、入出力操作の状態がチェックされます。このポーリングは、送信された入出力操作の状態に基づいて非同期ドライバが更新するフラグのチェックにより実行されます。HP-UXでは、このフラグが共有メモリーに読み込まれている必要があります。
Oracle Databaseでは、非同期フラグを各OracleプロセスのSGA内に構成します。HP-UXシステム上のOracle Databaseは、真の非同期入出力メカニズムを備え、以前に発行された入出力操作の一部が完了していなくても、入出力要求を発行できます。これにより、パフォーマンスが向上し、パラレル入出力プロセスのスケーラビリティが保証されます。
リリース8.1.7以前のOracle Databaseのリリースでは、入出力操作は、HP-UX非同期ドライバを使用して共有メモリーからのみ実行できました。Oracle Database 11gは、新しいHP-UX非同期ドライバを使用して共有メモリーおよびプロセス・プライベート領域の両方から入出力操作を実行します。ただし、非同期ドライバを介した入出力操作は、本質的には非同期ではありません。Oracle Databaseでは、ブロック待機を実行して、非同期ドライバに送信された入出力操作の状態をチェックする必要があるためです。これにより、データベース・ライター・プロセスなど一部のOracleプロセスでは、本質的に同期入出力が処理されています。
Oracle Database 11g上で実行するアプリケーションは、以前のリリースで実行するアプリケーションと比べて非常に大きいメモリーを使用できます。これは、HP-UXシステム上のOracle Database 11gで、仮想メモリー・データ・ページのデフォルト設定値がD(4KB)からL(4GB)に変更されたためです。
この項では、次の項目について説明します。
デフォルトでは、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ミスの可能性も減ります。
ただし、アプリケーションにメモリーの制約があり、非常に多くのプロセスを実行する傾向がある場合は、この大幅なページ・サイズの増加によりプロセスに大規模なメモリーの割当てが指示され、メモリー不足エラー・メッセージが発生する可能性があります。メモリー不足エラーが発生する場合は、ページ・サイズの値を小さくして、D(デフォルト)サイズの4KBとL(最大)サイズの4GBの間に設定する必要があります。
最小ページ・サイズ設定値(4KB)を使用すると、最大ページ・サイズ設定値を使用した場合よりもCPU使用率が20%以上高くなります。最大設定値L
を使用すると、4MBの設定値を使用した場合よりもメモリー使用率が50%高くなります。システムにメモリー制約がある場合は、使用できるメモリー・リソースの制約内で、ページ・サイズを特定のアプリケーションの要件と一致するように設定することをお薦めします。
たとえば、設定値Lでは問題が発生するアプリケーションで、設定値4MBの仮想メモリー・ページを使用すると、適切なパフォーマンスが得られる場合があります。
永続的なプライベートSQL領域および大規模仮想メモリー・ページ・サイズへのメモリー割当ての増加に対応してチューニングを行うには、必要に応じて、Oracle Databaseの仮想メモリー・データ・ページ・サイズを減らすことをお薦めします。次のコマンドを使用して、ページ・サイズ設定を変更します。
# /usr/bin/chatr +pd newsize $ORACLE_HOME/bin/oracle
この例のnewsize
は仮想メモリー・ページ・サイズの新しい値です。
chatr
コマンドを次のように使用して、新しい設定を表示します。
# /usr/bin/chatr $ORACLE_HOME/bin/oracle
HP-UX 11iでは、プロセッサ・セットの動的ランタイム再構成、および有効なユーザーによるプロセッサ・セット間の作業負荷の動的再割当てをサポートしています。
HP-UX Virtual Partitionsを使用すると、ユーザーは、各自のシステムを複数の論理パーティションで構成し、各パーティションに独自のプロセッサ、メモリーおよび入出力リソースのセットを割り当てて、HP-UXオペレーティング・システムの個別のインスタンスを実行できます。vParsに組み込まれているHP-UX Processor Setsを使用すると、仮想パーティションを再起動せずに、仮想パーティション間で動的プロセッサを移行できます。これにより、アプリケーション間でリソースのパーティション化を効率的に行い、HP-UXサーバー上で実行する各アプリケーションで必要なリソースの割当てに対する干渉および保証を最小限にできます。
Oracle DatabaseのCPU_COUNT
初期化パラメータは、Oracle Databaseで使用可能なCPU数を指定します。HP-UX 11iシステムのOracle Database 11gでは、オペレーティング・システムを定期的に問い合せることにより、CPUホスト構成の変更を動的に検出できます。システムのCPU数が変更された場合、OracleはCPU_COUNT
パラメータを適切な値に調整して、その内部リソースを再割当てします。これにより、新しい作業負荷は新しく追加されたプロセッサを利用できるため、高いCPU使用率が原因でボトルネックが発生している場合は、DBAによる変更を必要とせずに、データベースのパフォーマンスを改善できます。
初期化パラメータの一部の値は、システムの起動時にCPU_COUNT
値に基づいて計算されます。システムの起動後にCPU数が変更された場合、Oracleではこれらの初期化パラメータは動的に更新されず、新しいCPU数は考慮されません。新しいCPU数が元のCPU数と大きく異なると、データベース構成が最適でなくなる場合もあります。システムでCPU数が大幅に増加すると、データベースは追加された処理能力を利用できない可能性があります。
たとえば、2から4のように、システムで増加したCPU数が小さい場合、処理は必要ありません。
たとえば、2から32のように、システムで増加したCPU数が大きい場合、次の手順に従ってください。
次のいずれかの方法を使用して、CPU_COUNT
初期化パラメータを新しい値に設定します。
データベースでサーバー・パラメータ・ファイル(spfile
dbname
.ora
)を使用している場合は、次のSQL*PlusコマンドをSYSユーザーで実行し、新しいパラメータ値を指定します。
SQL> ALTER SYSTEM SET CPU_COUNT=32 SCOPE=SPFILE
データベースで初期化パラメータ・ファイル(init
sid
.ora
)を使用している場合は、このファイルを編集して新しいパラメータ値を指定します。
データベースを再起動します。
HP-UXシステムでは、ネットワーク情報サービス外部ネーミング・アダプタがサポートされています。ネットワーク情報サービス外部ネーミングの構成方法と使用方法の詳細は、『Oracle Database Net Services管理者ガイド』の「外部ネーミング・メソッドの構成」を参照してください。