オンラインREDOログ設計
オンラインREDOログファイル容量については、小さすぎるとログスイッチが頻発し、オーバーヘッドによる負荷が大きくなります。逆に大きすぎると、ログスイッチの回数は減少するが、ログスイッチ発生時に大量のI/Oが発生し、一時的にパフォーマンスが低下する可能性があります。システムの規模や入力、更新処理が一時に集中することを考慮して設定します。特に計算式はないため、実際に行われると予想される処理を行い、1日に最低でも2ファイル以上はアーカイブされるサイズに設定します。
5.6.1.REDOの量の見積もり
1.SQL*Plusより、v$SYSSTATから、現状のREDO開始値を調査します。
$sqlplus system/manager
SQL>column name format a40
SQL>column REDO_I NEW_VALUE redo
SQL>set termout off
SQL>select value REDO_I from v$sysstat where name = ‘redo size’;
REDO_I
---------
11232
SQL>
2.対象としているインスタンスでサンプルとなる1トランザクションを実行します。この時、このトランザクションのみ動作している状態でなければなりません。
3.1で取得した「開始値」をもとにREDO量を算出します。
SQL> select (value - &redo) redo from v$sysstat where name = 'redo
size';
旧 1: select (value - &redo) redo from v$sysstat where name = 'redo
size'
新 1: select (value - 11232) redo from v$sysstat where name = 'redo size'
REDO
---------
254772 (Byte) … ②
SQL>
4.トランザクションの実行回数を200とした場合の REDOサイズを求めます。
= (254772 * 200)/(1024 * 1024)
= 50 (切上げ)
必要とされる最小REDOサイズは 50MB となる
5.推奨である3グループを考慮して、アーカイブREDO本数が2以上になるように設計する。
4のトランザクションで、2本のアーカイブREDOが作成されるようにする。
ロググループ数 + アーカイブREDOログ本数 = REDOサイズ
(3 * χ) + (2 * χ) = 50
5χ = 50
χ = 10
オンラインREDOログサイズは 10MB となる
5.6.2. 1日あたりのREDOの量
REDOサイズが最適か判断するために、Server
Managerから、2日続けて同じ時間にコマンド「ARCHIVE LOG LIST」を発行し、リストされた「現行のログ順序番号」の差を求めます。
$svrmgrl
SVRMGR>connect internal
SVRMGR>archive log list
データベース・ログ・モード :アーカイブ・モード
自動アーカイブ :使用可能
アーカイブ先 :%RDBMS80%\
一番古いオンラインログ順序番号 :31
現行のログ順序番号 :32
SVRMGR>exit
次の日
SVRMGR>archive log list
データベース・ログ・モード :アーカイブ・モード
自動アーカイブ :使用可能
アーカイブ先 :%RDBMS80%\
一番古いオンラインログ順序番号 :31
現行のログ順序番号 :35
よって、
35-32=3
1日あたり 3REDO発生する
5.7.パラメータ設計
init.oraに指定されるOracleのパラメータは、インスタンス・チューニング・プロセスのテストを繰り返しながら設定を変更するものであり、最初に最適な値を設定することは困難である。
init.oraのパラメータによってメモリの使用量は大きく変化する。100以上のパラメータがあるが、特にパフォーマンスに大きな影響を与えるものを以下に取り上げる。パラメータはサンプルのinit.oraファイルにあるlargeモデルを基本とし、メモリに余裕がある分だけ設定を変更してSGAが実メモリの1/4程度になるように調整するものとする。
5.7.1.代表的なパラメータ
db_block_size
データベース・ブロックサイズを指定する。create database時に指定するとその後で変更することはできないので注意が必要である。
db_block_buffers
データベース・バッファ・サイズを指定する。ブロック数指定のため、db_block_sizeとの積が共有メモリでのバッファとして使用される。最初の設定は、shared_pool_sizeを調整した後でSGA全体の制限(実メモリの1/4)内で設定する。その後、メモリに余裕がある限りヒット率を見ながら増やしていく。
log_buffer
オンラインREDOログ・バッファ・サイズを指定する。最初の設定は、1Mbytes以下として、その後、統計値から競合がおきている場合に増やしていく。
shared_pool_size
共有プールサイズを指定する。ライブラリキャッシュ、共有SQL領域、ディクショナリキャッシュが含まれている。最初の値を10Mbytes程度にして、ライブラリキャッシュ、ディクショナリキャッシュの順でヒット率をみながら、増やしていく。一方で大きなSQL、PL/SQLについては先に使用メモリを測定し、必要な共有メモリ領域を確保できるように設定する。
log_checkpoint_interval
ログスイッチを発生させるオンラインREDOログブロック数を指定する。
REDOログ・ファイルより大きいサイズを指定して、ログ・スイッチ以外でチェックポイントが発生しないように設定する。
db_file_multiblock_read_count
フルテーブルスキャンを行う際に一度のreadで読み込まれるブロック数。フルテーブルスキャンの使用頻度に応じて設定する。
sort_area_size
ソートを行う際に、各サーバプロセス毎に使用される最大メモリ量を指定する。
最初は64Kbytesからはじめて必要に応じて増やしていく。
transaction_per_rollback_segments
ロールバックセグメントあたりのトランザクション数を指定する。
最初はデフォルトの4ではじめ、ロールバックセグメント数が50を超えた場合に再度考慮する。
checkpoint_process
チェックポイントの指示をログライタに代わって行うチェックポイントプロセスを起動するかどうかを指定する。
dml_locks
データ操作言語のロックの最大数を指定する。通常、同時実行される更新トランザクション数の8倍の値が必要である。
dbwr_io_slaves
非同期I/OをOSレベルでサポートしていない場合、データベースライタを複数起動して複数のディスクへの書き込みを行う際のデータベースライタの数を指定する。最初はデフォルトの1で、I/Oの負荷を見ながら最大論理ディスク本数までデータベースライタ数を増やす。LGWR、ARCHにも同じパラメータが存在する。
db_block_checkpoint_batch
データベースライタがチェックポイント時に書き込みに行くブロック数を指定する。最初はデフォルト値に設定し、統計を見ながら値を大きくする。
processes
同時にOracle
Serverに接続できるOSのユーザプロセスの最大数を指定する。バックグラウンドプロセスに最大7以上、更にログオンあたりに1を設定する。
open_cursors
同時にオープンできる単一ユーザプロセスあたりのコンテキスト領域の最大数。