オンライン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

同時にオープンできる単一ユーザプロセスあたりのコンテキスト領域の最大数。

最終更新:2008年11月15日 22:10