この章では Oracle 8.1.7.x/9i データベースの性能を改善する方法を説明します。 さらに,いくつかのモニタリング・ツールと推奨するチューニング方法 (以下のものを含む) も説明します。
注意
本書では,Oracle バージョン 8.1.7,あるいはそれ以降をご使用であることを想定しています。 このバージョン要件は重要です。 Oracle バージョン 8.1.7,あるいはそれ以降では,ファイル・システム層の UBC (Unified Buffer Cache) を迂回するために,AdvFS の直接入出力機能を使用しているからです。
ここではシステム性能情報を収集するために使用するコマンドとユーティリティがいくつかあります。 統計情報はさまざまな条件のもとで収集することが重要です。 データ・セットを比較すれば,性能問題の診断に役に立ちます。
表 4-1では,Oracle アプリケーションを実行しているシステムをモニタリングするためのツールが示されています。
表 4-1: 性能の低い Oracle アプリケーションを検出するツール
ツール | 説明 | 参照先 |
collect |
特定のオペレーティング・システム・データを記録し,表示する。 特定のサブシステムについての重要なシステム性能情報も収集する。 | 2.3.2 項 |
lockinfo |
カーネル SMP ロックのロック統計情報を収集し,表示する。
データの収集には,/dev/lockdev
擬似ドライバを使用する。 |
2.4.1 項 |
sched_stat |
システム負荷がどのように各 CPU に分散されているか,どのジョブが各 CPU で十分に実行時間を与えられているか,あるいはいないか,そしてこれらのジョブにはキャッシュが有効に働いているのかといった項目を調べるのに有効。 | 2.4.2 項 |
詳細は,
collect
(8)lockinfo
(8)sched_stat
(8)4.2 gettimeofday() 関数の性能改善
Oracle Server は実行時に多くの関数の時間を計測します。
これは
INIT.ORA
パラメータ
timed_statistics
が
TRUE
に設定されていると,特に多くなります。
時間計測関数は オペレーティング・システム・カーネルのシステム・コールになるので,呼び出したプロセスは CPU を放棄することになり,Oracle の性能が低下します。 Tru64 UNIX には,プロセスにオペレーティング・システムのリアルタイム・クロックへ直接アクセスを許す機能があります。
この機能を使用すると,負荷の高いシステムでの性能が改善します。 負荷の低いシステムでも性能が改善しますが,目立つほどではありません。
注意
この機能は,Oracle バージョン 7.3,またはそれ以降でサポートされています。
この機能を有効にするには,以下のコマンドを実行します。
# mknod /dev/timedev c 150 # chmod 644 /dev/timedev
クラスタで実行中の場合は,各クラスタ・メンバでこれらのコマンドを実行します。
/dev/timedev
特殊ファイルはシステムのリブートを行っても存続します。
この機能を Oracle で使用するためには,インスタンスを再起動する必要があります。
/dev/timedev
ファイルの存在は,インスタンスが起動されるときだけチェックされるからです。
クラスタ内のすべてのインスタンス (つまり,すべてのノード) でこの機能を有効にすることをお勧めします。
詳細は,
gettimeofday
(2)4.3 IPC 通信プロトコルの選択と有効化
Oeacle では,DLM/IPQ インスタンス間通信で UDP あるいは RDG (Reliable Datagram) のいずれも使用できますが,UDP ではなく,RDG を使用することをお勧めします。
注意
Oracle 8.1.7 は,通信での RDG の使用をサポートしていますが,それを有効にしないで,UDP を継続使用してください。 Oracle 9i でも通信プロトコルとして UDP を使用する必要がある場合があります。
IPC 用に異なるプロトコルを有効または無効にするには,以下のコマンドを使用します。
Oracle 8i または 9i で NUMA サポートを無効にするには,次のコマンドを実行します。
#
cd $ORACLE_HOME/rdbms/lib
#
make -f ins_rdbms.mk numa_off
#
make -f ins_rdbms.mkioracle
Oracle で NUMA サポートを有効にすることは,現在は,Oracle 8.1.7/OPS と 9.0.1/RAC インストレーションではサポートされていません。 RAC または OPS を使用する場合は,NUMA を無効にする必要があります。
Oracle 9i RAC または 8.1.7 Oracle Parallel Server を使用可能にするには,以下のコマンドを実行します。
すべての場合
#
cd $ORACLE_HOME/rdbms/lib
Oracle 8i の場合
#
make -f ins_rdbms.mk ops_on
#
make -f ins_rdbms.mk ioracle
Oracle 9i の場合
#
make -f ins_rdbms.mk rac_on
#
make -f ins_rdbms.mk ioracle
IPC で UDP プロトコルを使用させる場合 (Oracle 8i OPS の省略時の設定)
#
make -f ins_rdbms.mk ipc_udp
#
make -f ins_rdbms.mk ioracle
IPC で RDG (reliable datagram) プロトコルを使用させる場合 (Oracle 9i の省略時の設定)
#
make -f ins_rdbms.mk rac_on
#
make -f ins_rdbms.mk ioracle
Oracle 8.1.7.x/9i データベースの性能に影響を与える多くのサブシステム属性があります。 この節では,以下のサブシステムについて,いくつかの属性に対する主要な推奨チューニング方法を説明します。
仮想メモリ (4.4.1 項)
Advanced File System (4.4.2 項)
仮想ファイル・システム (4.4.3 項)
プロセス間通信 (4.4.4 項)
インターネット (4.4.5 項)
プロセス (4.4.6 項)
リアルタイム (4.4.7 項)
Reliable Datagram (4.4.8 項)
メモリ・チャネル (4.4.9 項)
注意
カーネル・サブシステム属性によっては,値を変更して,稼働中のシステムに適用できるものがあります。 それ以外の属性は,新しい値を有効にするためには,システムをリブートする必要があります。 属性が稼働中にチューニングできるかどうかについては,3.3.1 項を参照してください。
詳細は,
を参照してください。 sys_attrs
(5)
以下の
vm
サブシステム属性をチューニングすることで,Oracle 8.1.7.x/9i
データベースの性能を改善できます。
new_wire_method
(4.4.1.1 項)
rad_gh_regions
(4.4.1.2 項)
gh_chunks
(4.4.1.2.2 項)
ubc_maxpercent
(4.4.1.3 項)
ubc_borrowpercent
(4.4.1.4 項)
vm_ubcseqstartpercent
(4.4.1.6 項)
vm_ubcdirtypercent
(4.4.1.7 項)
vm_swap_eager
(4.4.1.8 項)
詳細は
sys_attrs_vm
(5)4.4.1.1 共用メモリを無効にする
Oracle 8.1.7.x/9i
の共用メモリを設定するときには,粒度ヒント共用メモリ (しばしばラージ・ページと呼ばれます) を使用することをお勧めします。
ただし,ipc
サブシステムの
ssm_threshold
属性で制御される SSM (セグメント化共用メモリ) もサポートされており,それが省略時の設定で有効になっています。
SSM を使用するには,new_wire_method
を 0 に設定します。
たとえば,ssm_threshold
が省略時の値である 8 MB になっていたら,new_wire_method
に 0 を設定します。
AIO (非同期入出力) とページ固定メカニズムの間には相互作用があるため,システム時間が長くなることがあります。
この問題を解決するには,new_wire_method
属性を 0 にすることをお勧めします。
new_wire_method
属性の省略時の値は 1 です。
このチューニング属性を無効にしても,性能への悪影響はありません。
ただし,
sys_attrs_vm
(5)
new_wire_method
と
ssm_threshold
の相互作用を避ける手段の 1 つは,データベースで使用する固定メモリとして粒度ヒント・メモリ (gh_regions
または
rad_gh_regions
) を使用することです。
gh_chunks
と
rad_gh_regions
の詳細は,4.4.1.2.2 項と4.4.1.2.1 項を参照してください。
4.4.1.2 共用メモリの割り当て
Oracle 8.1.7.x/9i
に共用メモリを割り当てる方法には,2 つのオプションがあります。
従来のオプションは,SSM (セグメント化共用メモリ) を使用する方法です。
これは,ipc
サブシステムのチューニング属性
ssm_threshold
によって制御されます。
ssm_threshold
属性は省略時の設定で有効になっています。
gh_chunks
のような粒度ヒント (しばしば,ラージ・ページと呼ばれます) を使用することが,Oracle 8.1.7.x/9i
を実行する GS80/160/320 システムで共用メモリの割り当てを行う場合の望ましい方法です
(粒度ヒント属性については,
sys_attrs_vm
(5)shmget()
または
nshmget()
を使用しているアプリケーションだけが,使用できます。
vmstat -P
コマンドを使用すると,システムに構成されている粒度ヒント・メモリの容量がわかります。
予約されているメモリ容量を調べるための 2 つの属性は,rad_gh_regions
と
gh_chunks
です。
rad_gh_regions
と
gh_chunks
のいずれを使用するのかは,使用しているシステムによって変わります。
NUMA 対応のシステム (GS80,GS160,GS320) では,rad_gh_regions
属性を設定する必要があります。
gh_chunks
属性は,NUMA 非対応のシステムでも NUMA 対応のシステムでも適用できますが,gh_chunks
属性はシステムでサポートされる最初の RAD (Resource Affinity Domain) にしか効果がありません (詳細は,4.4.1.2.1 項を参照)。
ES,DS,および GS140 プラットフォームのような NUMA 非対応のシステムで,粒度ヒント・メモリ割り当てを使用する場合には,gh_chunks
属性を設定することをお勧めします (詳細は,4.4.1.2.2 項を参照)。
4.4.1.2.1 rad_gh_regions 属性を変更する
GS80/GS160/GS320 プラットフォームで
rad_gh_regions
属性を設定するには,対応する
rad_gh_regions
属性によって RAD/QBB ごとのメモリ容量を MB 単位で指定します。
たとえば,QBB0 に 2 GB を割り当てるには,rad_gh_regions
属性を 2048 MB に変更します。
rad_gh_regions
の設定を決めるには,予定している Oracle の SGA のサイズを,GS システムに構成されている QBBs/RAD の数で割ります。
各
rad_gh_regions[x]
(x
は 0〜7 のQBB ID) には,必要な値を MB 単位で指定します。
たとえば,8 QBB に 64 GB のメイン・メモリを持つ GS320 プラットフォームの場合,Oracle SGA が 16 GB のサイズであれば,rad_gh_regions[0]
〜rad_gh_regions[7]
の値を,少なくとも 2048 MB に変更します。
rad_gh_regions[*]
の合計は,少なくとも Oracle SGA のサイズになるように設定することをお勧めします。
rad_gh_regions
に大きな値を割り当てて,Oracle SGA のサイズをシステムをリブートせずに変更したいと考えるかもしれません。
rad_gh_regions
を変更するには,システムのリブートが必要で,rad_gh_regions
は動的なシステム・チューニング属性ではありません。
共用メモリは,すべての使用可能な RAD のメモリに分散させるため,一般的にはストライプ・モードで割り当てます。 シーケンシャル割り当て方式に変更すると,個々の RAD にホットスポットが生じるため,性能に悪影響を与える可能性があります。
rad_gh_regions
に 0 以外の値を設定する場合は,ssm_threshold
には 0 を設定して,セグメント化共用メモリ (ssm
) を無効にする必要があります。
rad_gh_regions
の省略時の設定は,0 すなわち無効です。
粒度ヒントのメモリ割り当てについての詳細は,4.4.1.2.2 項を参照してください。
4.4.1.2.2 gh_chuncks 属性を変更する
gh_chunks
属性には,共用メモリとして使用するために,ブート時に予約された 4MB 単位のメモリの数を指定します。
このメモリは他の目的には使用できません。
そして,使用しなくなっても,システムに戻せませんし,再利用もできません。
gh_chunks
を使用しても最大で 7% の性能改善が得られるだけです。
したがって,実装の複雑さを考えると,多くのシステムでの最善のオプションではありません。
ただし,gh_chunks
を使用することで効果があるシステムはあります。
特に,多くのクライアントがデータベースへ接続したり,切断する Oracle 8.1.7.x/9i
環境には効果があります。
この種の環境では,gh_chunks
を使用すると大きな性能改善が得られます。
gh_chunks
には,最小で Oracle SGA サイズを 4 MB で割った値を設定することをお勧めします。
gh_chunks
の値は,Oracle SGA サイズを 4 MB で割って計算し,この値を 4 MB 単位で表現します。
たとえば,Oracle SGA サイズが 16 GB の場合,16 GB を 4 MB で割ると,結果は 4000 MB になります。
したがって,gh_chunks
に 1000 を設定することになります。
gh_chunks
に 0 以外の値を設定する場合は,ssm_threshold
には 0 を設定して,ssm
を無効にする必要があります。
gh_chunks
の省略時の値は,0 すなわち無効です。
4.4.1.3 UBC で使用する物理メモリの割合を変更する
ubc_maxpercent
属性には,UBC が一時期に使用する物理メモリの最大の割合を指定します。
Oracle 8.1.7.x/9i
は AdvFS の直接入出力を使用します。
したがって,人為的に UBC (Unified Buffer Cache) を制限する必要はありません。
ファイル・システムでの (二重の) キャッシングを避けるため,UBC が一時期に使用する物理メモリを少なくすることをお勧めします。
ただし,ubc_maxpercent
に小さな値を設定すると,カーネルでの競合が発生し性能に悪影響を与える可能性があります。
UBC が一時期に使用できる物理メモリの割合は,少なくとも 70% に増やすことをお勧めします。
35% より小さい値は設定してはいけません。
4.4.1.4 UBC が借りるメモリの割合を変更する
ubc_borrowpercent
属性には,メモリの割合を指定します。
この割合を超えたメモリは,UBC が仮想メモリ・サブシステムから借りていることになります。
UBC が借りているメモリをすべて返すまで,ページングは発生しません。
ubc_borrowpercent
の省略時の値は 20% です。
これは大部分のシステムに対して,適正な値です。
しかし,対話型ユーザのいないデータベース・サーバを運用している場合には,バックアップ性能を向上させるために,10% 程度に落とすことができます。
4.4.1.5 UBC が 1 つのファイルに対して使用できるメモリの割合を変更する
vm_ubcseqpercent
属性には,1 つのファイルのキャッシュ用に使用できる UBC メモリの最大の割合を指定します。
UBC がこの制限をチェックする時期を制御する方法は,4.4.1.6 項を参照してください。
vm_ubcseqpercent
の省略時の値は 10% です。
これは大部分のシステムに対して,適正な値です。
しかし,運用しているシステムがデータベース・サーバだけの環境では,バックアップ性能を向上させるために,5% 程度に落とすことができます。
4.4.1.6 UBC しきい値を変更する
vm_ubcseqstartpercent
属性には,UBC が 各ファイル・オブジェクトをキャッシュしている UBC ページの割合のチェックを開始する時期を決定するしきい値 (UBC の現在のサイズに対する割合) を指定します。
ファイルのキャッシュされているページの割合が
vm_ubcseqpercent
の値を超えていると,UBC はファイルの UBC LRU ページを仮想メモリに返却します。
vm_ubcseqpercent
属性の詳細は,4.4.1.5 項を参照してください。
注意
vm_ubcseqstartpercent
属性は,ubc_maxpercent
属性に対する割合と定義されています。ubc_maxpercent
は使用可能なメモリに対する割合です。 この定義の変更は,ubc_maxpercent
が省略時の値 (100%) に設定されたままだと問題はありません。 しかし,ubc_maxpercent
の値が下げられている場合には,影響があります。 たとえば,vm_ubcseqstartpercent
の値には 25 を設定する必要があります。
vm_ubcdirtypercent
属性は,UBC がディスクへの書き込みを開始するためにダーティ (変更済み) になっていなければならないページの割合です。
大部分のシステムに対して,省略時の値の 10% は効果があります。
しかし,ファイル・システム/UBC が頻繁にアクセスされ,ファイル・システムのページを UBC に保持しておくことが効果的なシステムでは,値を 90% に増加させます。
4.4.1.8 スワップ割り当てモードを変更する
vm_swap_eager
属性には,システムのスワップ割り当てモードを指定して使用可能なスワップ領域の使用方法を制御します。
スワップ割り当てモードには,即時モード (1) と延期モード (0) があります。
どちらのモードにしても,性能への影響はありません。
スワップ領域割り当てモードを以下に示します。
即時モード -- このモードでは,プロセスが最初に可変メモリを割り当てたときにスワップ領域が予約されます。 即時モードは省略時のスワップ領域割り当てモードで,eager モードとも呼ばれます。
即時モードでは,システムが不必要に多くのスワップ領域をプロセス用に予約することがあります。 ただし,即時モードでは,プロセスがスワップ領域を必要としたときに必ずスワップ領域を利用できます。 即時モードは,物理メモリの量を超えてメモリを使用するシステム (ページングが発生するシステム) での使用をお勧めします。
延期モード -- このモードでは,仮想メモリ・サブシステムが,変更された仮想ページをスワップ領域に書き込む必要が発生した場合だけ,スワップ領域が予約されます。 このモードでは,可変メモリ用のスワップ領域の予約が,実際に必要となるまで延期されます。 延期モードは,lazy モードとも呼ばれます。
延期モードでは,必要となるスワップ領域が即時モードよりも少なく,またシステムの動作が速くなります。 これは,延期モードでは,スワップ領域の予約作業が少なくてすむためです。 ただし,延期モードではスワップ領域が事前に予約されないため,プロセスでスワップ領域が必要になったときにスワップ領域が利用できないことがあります。 この場合,プロセスは非同期に強制終了させられます。 延期モードは,大規模メモリ・システムや,物理メモリの量を超えてメモリを使用しない (ページングが発生しない) システムでお勧めします。
vm_swap_eager
属性を省略時の値の 1 に設定すると,システムは eager スワップ割り当てモードになります。
このモードの場合,すべてのプロセス用の可変仮想メモリを合計し,少なくとも 10% をスワップ領域のサイズに追加します。
eager スワップ割り当てモードは,物理メモリの量を超えてメモリを使用する信頼性の高いシステムで使用します。
vm_swap_eager
属性を 0 に設定すると,システムは lazy スワップ割り当てモードになります。
このモードの場合,すべてのプロセス用の可変仮想メモリを合計し,物理メモリの半分を減算した値をスワップ領域サイズとします。
lazy モードは,物理メモリの量を超えてメモリを使用しないシステムで使用します。
vm_swap_eager
が 0 に設定されており,システムでスワップ領域を使い果たした場合は,スワップ領域を割り当てようとするプロセスは強制終了させられます。
この状況でプロセスの削除を防ぐ手段はありません。
Oracle 8.1.7.x/9i
データベース・サーバ環境では,十分なメモリがあっても
vm_swap_eager
を 1 に設定することをお勧めします。
ただし,作業負荷がよく把握されており,スワッピングが行われないだけの十分なメモリがシステムに構成されている場合には,vm_swap_eager
を 0 に設定できます。
eager スワップ割り当てモードの省略時の値は 1 です。
4.4.2 Advanced File System 属性の変更
advfs
サブシステムの
AdvfsSyncMmapPages
属性をチューニングすると,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
AdvfsSyncMmapPages
属性には,変更された (ダーティな) メモリ・マップされたページを
sync()
システム・コールの実行時にディスクにフラッシュするかどうかを制御する値を指定します。
値が 1 の場合,ダーティなメモリ・マップされたページはディスクに非同期に書き込まれます。
値が 1 の場合,ダーティなメモリ・マップされたページは,sync システム・コールの際にディスクに書き込まれません。
パラメータを 0 に設定すると,AdvFS は,メモリ・マップされたファイルのページをフラッシュしなくなります。
省略時の値である 1 を設定すると,メモリ・マップされたページは
sync()
システム・コールの実行時にディスクに非同期にフラッシュされます。
mmap()
を使用してページとファイルをメモリへマップする大部分のアプリケーションでは,fsync()
コールで独自の同期化を行っているので,AdvFS が同じ動作をもう一度行う必要はありません。
この設定は,メモリに留まる必要があるページを AdvFS がフラッシュするのも禁止します。
詳細は,
sys_attrs_advfs
(5)4.4.3 仮想ファイル・システムの属性の変更
vfs
サブシステムの
fifo_do_adaptive
属性をチューニングすると,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
fifo_do_adaptive
属性には,パイプへ一括書き込みをし,単一呼び出しでデータを受け取り側に渡すパイプ処理を,有効にする (1) か,無効にする (0) 値を指定します。
fifo_do_adaptive
属性は,システムがデータベース・サーバの場合,省略時の値をそのまま使用するのが適切でない可能性があるチューニング・パラメータの 1 つです。
省略時の設定の 1 は,FIFO ルーチンの代替アルゴリズムを有効にします。 これにより最適なワーキング・セット・サイズが作成され,より少ないデータ転送操作が行われることになりますが,サイズは大きくなります。 省略時の設定は,一定のサイズ,またはほぼ一定のサイズのデータを転送するアプリケーションでは,効果的です。 省略時の設定は,ランダムなサイズのデータを転送するような類のアプリケーションでは効果がありません。 特に,FIFO ルーチンによって最適な転送サイズが決定されるような転送を行うアプリケーションでは,効果がありません。
省略時の設定は,対になるプロセスが同期を取って動作するようなアプリケーションでは効果がありません。
たとえば,procA
が
procB
に転送し,procB
からの応答を待つような場合です。
fifo_do_adaptive
パラメータを無効にすると,アプリケーションによっては性能が低下し,またアプリケーションによっては性能が改善されます。
性能の変化はパイプの使われ方に依存します。
Oracle 環境では,このパラメータの値を 0 に設定することをお勧めします。
詳細については,
sys_attrs_vfs
(5)4.4.4 プロセス間通信属性の変更
以下の
ipc
サブシステム属性をチューニングすると,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
ssm_threshold
(4.4.4.1 項)
shm_max
(4.4.4.2 項)
shm_min
(4.4.4.3 項)
shm_mni
(4.4.4.4 項)
shm_seg
(4.4.4.5 項)
詳細は,
sys_attrs_ipc
(5)4.4.4.1 System V の共用領域を変更する
ssm_threshold
属性には,共用ページ・テーブルとして使用する System V の共用領域の最小のサイズを,バイト単位で指定します。
ssm_thresold
属性は,使用する SSM (セグメント化共用メモリ) の実装タイプを制御します。
省略時の値は 8 MB です。
ラージ・ページを使用しているときは,ssm_threshold
を無効にします。
すなわち,rad_gh_regions
または
gh_chunks
を設定している場合です (4.4.1.2 項を参照)。
rad_gh_regions
または
gh_chunks
を使用していない限り,GS シリーズ以外のプラットフォームでは,ssm_threshold
は省略時の値のままにしておくことをお勧めします。
rad_gh_regions
または
gh_chunks
を使用している場合は,ssm_threshold
は 0 (無効) に設定します。
4.4.4.2 System V 共用メモリ領域の最大サイズを変更する
shm_max
属性には,単一の System V 共用メモリ領域の最大サイズをバイト単位で指定します。
Oracle は,SGA が
shm_max
に設定されている値より大きい場合,複数の共用メモリ領域を連結します。
単一の共用メモリ領域 (SSM) のサイズは 2 GB より大きくできますが,同一システム上で共用領域を使用するアプリケーションが複数ある場合,2GB より大きな共用メモリ・セグメントでは,問題を起こす可能性があります。
互換性の問題を起こさないために,個々の共用メモリ・セグメントの最大サイズを 2 GB にすることをお勧めします。
推奨値は,2 GB - 8 MB = 2,139,095,040 バイトです。
システムで実行するアプリケーションが Oracle だけの場合,shm_max
のサイズは,4 GB - 16 MB = 4,278,190,080 バイトまで大きくできます。
省略時の値は 4,194,304 バイト (512 ページ) です。
4.4.4.3 System V 共用メモリ領域の最小サイズを変更する
shm_min
属性には,単一の System V 共用メモリ領域の最小サイズをバイト単位で指定します。
推奨値は 1 つの領域で,省略時の値は 1 つの領域です。
4.4.4.4 一時期に使用できる共用メモリ領域の数を変更する
shm_mni
属性には,システムで一時期に使用できる共用メモリ領域の最大数を指定します。
推奨値は 256 領域 (省略時の値は 100 領域) です。
システムは,数をそれに最も近い 2 の累乗に切り上げた値にしますので,省略時の値は実際には 128 領域になります。
4.4.4.5 一時期に接続できる共用メモリ領域の数を変更する
shm_seg
属性には,一時期に 1 つのプロセスに接続することができる System V 共用メモリ領域の最大数を指定します。
推奨値は,128 領域です。
4.4.5 インターネット属性の変更
以下の
inet
サブシステム属性をチューニングすることで,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
詳細は,
sys_attrs_inet
(5)
さらに,インターネット・サーバのチューニング方法の詳細は,第 6 章を参照してください。 ギガビット・イーサネットの性能に特有の推奨チューニングについては,次の URL を参照してください。
http://www.tru64unix.compaq.com/docs/best_practices/BP_GIGABIT/TITLE.HTM
4.4.5.1 UDP ソケット用送信バッファ・サイズを変更する
udp_sendspace
属性には,UDP ソケット用の省略時の設定の送信バッファ・サイズをバイト単位で指定します。
アプリケーションでギガビット・イーサネットを使用している場合,またはネットワークの負荷が大きい場合には,udp_sendspace
属性には省略時の値よりも大きな値を設定します。
推奨値は 65536 バイト以上です。
ユーザ・セッションや照会の大きさと数に応じて増やします。
4.4.5.2 UDP ソケット用受信バッファ・サイズを変更する
udp_recvspace
属性には,UDP ソケット用の省略時の設定の受信バッファ・サイズをバイト単位で指定します。
アプリケーションでギガビット・イーサネットを使用している場合,またはネットワークの負荷が大きい場合には,udp_recvspace
属性には省略時の値よりも大きな値を設定します。
推奨値は 65536 バイト以上です。
ユーザ・セッションや照会の大きさと数に応じて増やします。
4.4.5.3 システムが同時に送信接続を確立できる回数を変更する
ipport_userreserved
属性には,システムが他システムへ同時に送信接続を確立できる回数を指定します。
送信ポートの数は,ipport_userreserved
属性の値から,ipport_userreserved_min
属性の値を引いた数です。
省略時の値は 5000 バイトです。
したがって,送信ポートの数の省略時の値は 3976 です。
大規模 Oracle インストレーションでの推奨値は,最大値の 65535 (バイト) です。
4.4.6 プロセス属性の変更
以下の
proc
サブシステム属性をチューニングすることで,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
per_proc_stack_size
(4.4.6.1 項)
max_per_proc_stack_size
(4.4.6.2 項)
per_proc_data_size
(4.4.6.3 項)
max_per_proc_data_size
(4.4.6.4 項)
per_proc_address_space
(4.4.6.5 項)
max_per_proc_address_space
(4.4.6.6 項)
max_proc_per_user
(4.4.6.7 項)
max_threads_per_user
(4.4.6.8 項)
maxusers
(4.4.6.9 項)
詳細は,
sys_attrs_proc
(5)4.4.6.1 プロセスごとのスタック・サイズを変更する
per_proc_stack_size
属性には,プロセスごとのスタック・サイズをバイト単位で指定します。
省略時の値の 8 MB は,大部分の Oracle 環境には十分な大きさです。
しかし,非常に大規模なインストレーションおよびデータ・ウェアハウスのような環境では,値を増やす必要があります。
推奨値は,33,554,432 (32 MB) です。
4.4.6.2 ユーザ・プロセスのスタック・サイズの最大サイズを変更する
max_per_proc_stack_size
属性には,ユーザ・プロセス・スタックの最大サイズをバイト単位で指定します。
省略時の値の 32 MB は,大部分の Oracle 環境には十分な大きさです。
しかし,非常に大規模なインストレーションおよびデータ・ウェアハウスのような環境では,値は増やす必要があります。
推奨値は,536,870,912 (512 MB) です。
Oracle 環境に応じて,最大スタック・サイズは,最大値の 896 MB,あるいはそれ以下にします。
この制限は,Oracle が性能上の理由で,PGA と SGA を 0x38000000 と 0x58000000 に固定しているためです。
このパラメータで 896 MB より大きな値を使用すると,Oracle は固定 PGA と固定 SGA を破壊します。
4.4.6.3 プロセスごとのデータ・サイズを変更する
per_proc_data_size
属性には,プロセスごとのデータ・サイズをバイト単位で指定します。
この値にはシステムにインストールされている物理メモリ量を設定します。
この値には,実際に使用可能なメモリより大きな値が指定できます。
しかし,そうすると,単一プロセスがシステムのメイン・メモリを越える大きさになる可能性があり,過度のスワッピングやページングが発生します
(12.5 節を参照)。
per_proc_data_size
属性は使用可能なメモリの範囲にすることをお勧めします。
per_proc_data_size
を,使用可能な物理メモリに,構成されているスワップ領域を加えた値より大きくすることは,決してしないでください。
推奨値は,インストールされている物理メモリと同じ大きさです。
ただし,最大値は 4,398,046,511,104 バイトです。
4.4.6.4 プロセスごとのデータ・サイズの最大サイズを変更する
max_per_proc_data_size
属性には,プロセスごとのデータ・セグメントの最大サイズをバイト単位で指定します。
この値にはシステムにインストールされている物理メモリ量を設定します。
この値には,実際に使用可能なメモリより大きな値が指定できます。
しかし,そうすると,単一プロセスがシステムのメイン・メモリを越える大きさになる可能性があり,過度のスワッピングやページングが発生します (12.5 節を参照)。
max_per_proc_data_size
属性は使用可能なメモリの範囲にすることをお勧めします。
max_per_proc_data_size
を,使用可能な物理メモリに,構成されているスワップ領域を加えた値より大きくすることは,決してしないでください。
推奨値は,インストールされている物理メモリと同じ大きさです。
ただし,最大値は 4,398,046,511,104 バイトです。
4.4.6.5 プロセスごとのアドレス・サイズを変更する
per_proc_address_space
属性には,プロセスごとのアドレス・サイズをバイト単位で指定します。
この値にはシステムにインストールされている物理メモリ量の値を設定します。
この値には,実際に使用可能なメモリより大きな値が指定できます。
しかし,そうすると,単一プロセスがシステムのメイン・メモリを越える大きさになる可能性があり,過度のスワッピングやページングが発生します (12.5 節を参照)。
per_proc_address_space
属性は使用可能なメモリの範囲にすることをお勧めします。
per_proc_address_space
を,使用可能な物理メモリに,構成されているスワップ領域を加えた値より大きくすることは,決してしないでください。
推奨値は,インストールされている物理メモリ量と同じ大きさです。
ただし,最大値は 4,398,046,511,104 バイトです。
4.4.6.6 プロセスごとのアドレス・サイズの最大サイズを変更する
max_per_proc_address_space
属性には,ユーザ・プロセスのアドレス・スペースの最大値をバイト単位で指定します。
この値にはシステムにインストールされている物理メモリ量を設定します。
この値には,実際に使用可能なメモリより大きな値が指定できます。
しかし,そうすると,単一プロセスがシステムのメイン・メモリを越える大きさになる可能性があり,過度のスワッピングやページングが発生します
(12.5 節を参照)。
max_per_proc_address_space
属性は使用可能なメモリの範囲にすることをお勧めします。
max_per_proc_address_space
を,使用可能な物理メモリに,構成されているスワップ領域を加えた値より大きくすることは,決してしないでください。
推奨値は,インストールされている物理メモリ量です。
ただし,最大値は 4,398,046,511,104 バイトです。
4.4.6.7 プロセスの最大数を変更する
max_proc_per_user
属性には,ユーザが作成できるプロセス (タスク) の最大数を指定します (スーパユーザには適用されません)。
max_proc_per_user
属性による制限を解除するには,この属性値として 0 を設定します。
推奨値は 1024 (プロセス) です。
アプリケーションがユーザごとに 1024 タスク以上を必要としているなら,それに応じて増やしてください。
4.4.6.8 スレッドの最大数を変更する
max_threads_per_user
属性には,ユーザが作成できるスレッドの上限を指定します (スーパユーザには適用されません)。
max_threads_per_user
属性による制限を解除するには,この属性値として 0 を設定します。
推奨値は 4096 スレッドです。
アプリケーションがユーザごとに 1024 タスク以上を必要としているなら,それに応じて増やしてください。
4.4.6.9 システム・テーブルに割り当てる領域を変更する
maxusers
属性には,システム・リソースに負担を与えることなく,システムがサポートできる同時ユーザ数を指定します。
システムのアルゴリズムは,最大ユーザ数を使って各種のシステム・データ構造体のサイズを決定したり,システム・プロセス・テーブルのようなシステム・テーブルに割り当てる値を決定します。
ES40 クラス以上のシステムに対しては,この属性値に 8192 (ユーザ),または最大値の 16,384 (ユーザ) までの値を設定することをお勧めします。
省略時の値はシステム依存です。
4.4.7 リアルタイム属性の変更
rt
サブシステムの
aio_task_max_num
属性をチューニングすることで,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
aio_task_max_num
属性には,指定した数のタスクで使用できる固定物理メモリの量を制限することで,物理メモリに固定化される AIO 要求の数を間接的に制御する制限を指定します。
固定物理メモリの 1 ページが
aio_task_max_num
で指定される数のタスクで使用できます。
推奨値は,DBWR I/O 操作と
DB_FILE_MULTIBLOCK_READ_COUNT
パラメータの値のいずれよりも大きい必要があります。
DBWR I/O 操作の最大数は,_DB_WRITER_MAX_WRITES
初期化パラメータに指定しない限り,省略時の値の 8192 です。
省略時の値は,102 (102 タスクに対して,1 ページの固定メモリ) です。
このチューニング属性値の簡単な計算方法は,次のとおりです。
(DB_WRITER_MAX_WRITES (省略時の値は 8192) × DB_WRITER_PROCESSES) + (PARALLEL_MAX_SERVERS × DB_FILE_MULTIBLOCK_READ_COUNT) + 10
詳細は,
sys_attrs_rt
(5)4.4.8 Reliable Datagram 属性の変更
以下の
rdg
サブシステム属性をチューニングすることで,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
max_objs
(4.4.8.1 項)
msg_size
(4.4.8.2 項)
max_async_req
(4.4.8.3 項)
max_sessions
(4.4.8.4 項)
rdg_max_auto_msg_wires
(4.4.8.5 項)
詳細は,
sys_attrs_rdg
(5)4.4.8.1 RDG 内のオブジェクトの最大数を変更する
max_objs
属性には,RDG の終点とバッファ・リストにあるオブジェクトの最大数を指定します。
推奨値は,最小でノード当たりの Oracle プロセスの数の 5 倍で,最大では 10240,または Oracle プロセスの数に 70 を掛けた値です。
4.4.8.2 RDG メッセージの最大サイズを変更する
msg_size
属性には,RDG メッセージの最大サイズをバイト単位で指定します。
推奨値は,データベースの
DB_BLOCK_SIZE
パラメータの最大値以上です。
Oracle では,Oracle9i が各テーブル領域で異なるブロック・サイズをサポートしているので,値を 32768 にすることを推奨しています。
4.4.8.3 RDG 内のメッセージの最大数を変更する
max_async_req
属性には,RDG の送信キューと受信キュー内に保持される非同期メッセージの最大数を指定します。
推奨値は最小で 100 です。
256 の値を指定すれば,性能が改善されます。
4.4.8.4 RDG テーブル内のセッションの最大数を変更する
max_async_req
属性には,1 つの RDG コンテキスト・テーブル内のセッションの最大数を指定します。
推奨値は,最小で Oracle のプロセス数に 2 を加えたものです。
4.4.8.5 メッセージ・パケット用に固定されるページの最大数を変更する
max_async_req
属性には,メッセージ・パケット用にメモリに自動的に固定されるページの最大数を指定します。
max_async_req
属性の値は 0 にすることをお勧めします。
4.4.9 メモリ・チャネル属性の変更
次の
rm
サブシステムの
rm_check_for_ipl
属性をチューニングすることで,Oracle 8.1.7.x/9i
データベースの性能が改善できることがあります。
rm_check_for_ipl
属性には,CPU のプロセッサ優先順位レベル (spl) をトレース・バッファに格納する時期を示すビットマスクを指定します。
この属性の値は,省略時の値の 63 にすることをお勧めします。
詳細は,
sys_attrs_rm
(5)