Oracle/アーキテクチャ

メモリチューニング

メモリ設計に関する初期化パラメータ

パラメータ説明
MEMORY_TARGETOracleシステム全体の使用可能なメモリー
MEMORY_MAX_TARGETMEMORY_TARGETで指定可能な最大サイズ
SGA_TARGETバッファ・キャッシュ、共有プール、ラージ・プール、Javaプール、Streamsプールのサイズを設定した値で動的に割り当てる
最低限保証するサイズは、DB_CACHE_SIZE、SHARED_POOL_SIZE、STREAMS_POOL_SIZE、JAVA_POOL_SIZE、LOG_BUFFER パラメータで指定可能
PGA_AGGREGATE_TARGETサーバープロセスが使用できるメモリーの目標値(足りなければ値を超え、超過している場合はメモリを解放するよう努力する)
0に設定するとWORKAREA_SIZE_POLICYパラメータがMANUALに設定される
PGA_AGGREGATE_LIMITPGAの上限値を指定。上限値を超えた場合は、最も調整が困難なメモリーを使用しているセッションでコールが停止、それでも越えた場合はセッションが終了する
WORKAREA_SIZE_POLICY作業領域のサイズ指定方法を指定(AUTO / MANUAL)MANUALにすると各作業領域に設定したパラメータ(〜AREA_SIZE)が利用される
SHARED_POOL_RESERVED_SIZE予約領域のサイズを指定。デフォルトは5%

SGA

名前説明
DBバッファキャッシュディスクから読み取られたデータのコピーをキャッシュする
REDOログバッファデータベースに対する変更情報をREDOレコードとしてキャッシュする。LGWRによってREDOログファイルに書き出される
共有プールライブラリキャッシュ共有SQL、共有PL/SQL、オブジェクトのメタデータなどを格納。
SQL実行時にはカーソルと呼ばれるポインタを使用して操作が行われる。
カーソルには様々なメタデータが対応付けられており、ライブラリキャッシュに格納されることで再利用されるようになっている。
予約領域4KBを超えるオブジェクトのロード時、ライブラリキャッシュに空き容量がなくエージアウトが発生する場合に使用される
データディクショナリキャッシュディクショナリから取得したレコードを格納。
ディクショナリの元データはSYSTEM表領域に格納されている為、バッファキャッシュにデータがロードされ、
使用されたレコードがディクショナリキャッシュに格納
サーバーリザルトキャッシュSQL文単位の結果セットが格納されている共有プール内の領域。
DBバッファキャッシュと異なり、データブロックではなくSQL問い合わせ結果やPL/SQLファンクション結果が含まれる
ラージプール共有プールの割り当てには適さない大量のメモリ割り当て用のメモリ領域
JavaプールJVMのJavaコードとデータが格納されるメモリ領域
StreamsプールDMLやDDLを他のDBに自動的に伝播させる機能用のメモリ。DataPumpは内部的にStreamsプールを使用している
Fixed SGAOracle内部のハウスキーピング(不要なデータ削除や領域解放などのメンテナンス)のメモリ領域

共有プールの構造

Oracle_shared-pool.pngCPUコア数や、共有プールサイズにより最大7個のサブプールに分割される。
更に存続期間により、4つのヒープに分割される。(最大 7 x 4 = 28)

分割した1つのヒープで空き領域不足が派生するとORA-04031が発生する。

他のヒープから空きメモリを確保するにはバッファキャッシュを経由(必要な容量を拡張して渡す)する為、
バッファキャッシュの拡張余力がないとORA-04031が発生する。
SGA全体で3GBとして、バッファキャッシュ2GB、共有プール500MBをパラメータ設定すると、500MBしか拡張余力がなくなる
ヒープ存続期間領域
sga heap(n,0)インスタンス起動中は確保される永続メモリ領域
sga heap(n,1)セッションが存在している間は確保されるライブラリキャッシュ、ディクショナリキャッシュ
sga heap(n,2)カーソルが存在している間は確保される親カーソル、子カーソル
sga heap(n,3)SQL文の実行間は確保されるSQL領域

共有プールの獲得や解放を行う場合、排他制御を行う為に「shared pool latch」を獲得するが、1つの共有プールだけだとラッチ競合による待機が発生する。
その為、共有プールを分割することで競合を減らしている

共有プールのメモリ割り当て

  1. フリーリストから空きを探す(フリーリストは各ヒープ毎に存在する)
  2. Reserved Granule(未割り当ての領域)から確保
  3. 予約済みプールから確保(一定サイズ以上のものを割り当てる領域)
  4. 使用済み領域の再利用(LRU(長期間使ってないもの)リストをフラッシュ、チャンク結合して空きを作る)
  5. 共有プール拡張(IMMEDIATEモード(※)でバッファキャッシュから空き容量を確保)
  6. ORA-04031エラー(要求サイズのメモリが割り当てられない)

※共有プール領域で、空き容量不足でORA-04031が発生しうる時、他コンポーネントを縮小して共有プール領域へメモリを割り当てる(共有プールへのメモリ割り当ては一方通行)

PGA

PGAはプロセス起動した際に割り当てられるプライベートメモリで、主な目的はソートを内部的に行う処理、ハッシュ結合。
初期化パラメータ PGA_AGGREGATE_TARGET で OSに割り当てるメモリ容量を指定。
ORACLEが事前にメモリを確保しておく目標値であり、最大値ではない。足りなければ設定値を超えて確保し、目標値より多ければ解放しようとする。
12.1から上限を強制する PGA_AGGREGATE_LIMIT 初期化パラメータが追加されている。

カラム名説明
aggregate PGA target parameter自動モードで実行中の作業領域に使用できるPGAメモリの量
aggregate PGA auto targetPGA_AGGREGATE_TARGET初期化パラメータの現在値
global memory bound自動モードで実行される作業領域の最大サイズ
total PGA inuse現在、作業領域で利用されているPGAメモリの量
total PGA allocatedインスタンスにより割り当てられた現行のPGAメモリ量
maximum PGA allocatedインスタンス起動以降、割り当てられた最大PGAのメモリ量
over allocation countインスタンス起動以降、PGA_AGGREGATE_TARGETを越えて割り当てた回数(この値が定期的に増える場合は、PGA_AGGREGATE_TARGETの設定値を大きくする必要がある)


 

クラスターウェア

CRSスタック

デーモン名説明
CSSDCluster Synchronization Servicesデーモン。ASMのグループサービスの提供及びノード間の状態の監視を行う
インターコネクトを使用しノード間の同期を取り、インターコネクトに障害が発生したらノードを再起動する
CRSDCluster Ready Servicesデーモン。クラスタリソース(インスタンス、リスナー、VIPなどOracle Cluesterwareに登録したアプリケーション)の起動、停止、監視を行う。
クラスタリソース障害発生時はリソース再起動する
EVMDEvent Managerデーモン。クラスタイベント(ノード、クラスタの起動停止など)を受信し必要に応じてクラスタイベントの転送を行う
プロセス名説明
ocssd.binCSSD(Cluster Synchronization Servicesデーモン)は投票ディスクを使用してノード間の状態を監視する
Oracleユーザーにて起動され、CSSDが異常終了した場合、ノードが再起動する
ベンダー製クラスタウェアと併用する場合はクラスタウェアと統合される
併用しない場合は、rootによって起動されたOPRCD(プロセスモニタデーモン)がノードを停止する
Windows/Linux環境ではhangcheck-timerなどのカーネルドライバが同様の機能を提供する為、起動しない
crsd.binCRSD(Cluster Ready Servicesデーモン)はOCRファイルを使用してOracle Clusterwareに登録
rootユーザーによって起動され、各アプリケーションで定義したアクションスクリプトを使用し起動、停止、F/O等を行う
ASMとDBに関連するプロセスとしてRACGIMON(インスタンスモニター)を起動し、状態監視やFANなどの機能を提供する
CRSDはracgwrapスクリプトからracgmainプログラムを起動し、更に各アクション実行の為、子プロセスを一時的に起動する
evmd.binEVMD(Event Managerデーモン)は、クラスタイベントの受信、転送を行う
Oracleユーザーによって起動され、イベントを受信すると、イベントをログ化し、子プロセスであるEVMLOGGER(イベントマネージャロガー)にイベント処理を要求する。
EVMLOGGERはONS(Oracle Notification Services)にイベントを送信したり、RACGEVTFを起動しコールアウトを実行する

クラスターウェアのログ

$ORA_CRS_HOME/log/ホスト名 と $ORACLE_HOME/log/ホスト名 に格納されている。($ORA_CRS_HOME = クラスタのインストールディレクトリ)

ディレクトリファイル名説明
.alertホスト名.logアラートログ
/agent/crsd/oraagent_oracle/
orarootagent_root/
リソース管理してるデーモン、エージェントログ
リソースメンバーシップに問題が発生した場合に確認する
/agent/ohasd/oracssdagent_root/
oracssdmonitor_root/
ノードメンバーシップに問題(Oracle再起動やハング)があった場合に確認するログ
11gR2からのログで、11gR1までは、cssd/oclsomon/oclsomon.*
/crsd/crsd.logCRSDのログ。10MBでローテーション(crsd.l01〜10で、10世代保存)
/cssd/ocssd.logCSSDのログ。20MBでローテーション(ocssd.01〜05で、5世代保存)
ディスクパス切断や、インターコネクト障害の時に確認するログ
キーワード:Aborting local node to avoid splitbrain
/evmd/evmd.logEVMDのログ。500KBでローテーション(<ホスト名>_evmlog_<日付>_1、2の名前で保存)
$ORA_CRS_HOME/evm/lognにもあるが、バイナリの為、emvshowコマンドを使用
時間ごとに確認:emvshow -t "[@timestamp]@@" ログ名
イベント属性毎:emvshow -D ログ名
/racg/vip.logなどVIP、ONSなどのリソースログ
/client/css.logなどサーバー制御ユーティリティ(srvctl)やOCR管理(ocrdump、ocrconfig、ocrcheck)

クラスターウェアのログ収集

rootユーザーにて実行($ORA_CRS_HOME、$ORA_BASE、$ORACLE_HOMEの環境変数を設定する)

$ORA_CRS_HOME/bin/diagcollection.pl
オプション説明
--collectログ情報の収集
--all デフォルト。すべてのログを収集
--crs CRSホームのOracle Clusterwareログ、OCR、COREファイルを収集
--oh RACホームのOracle Clusterwareログを収集
--nocore コアファイルを含めない
--clean現行ディレクトリに存在するファイルのクリーンアップを行う
現行ディレクトリに同名ファイルが存在すると上書き確認を聞いてくるので事前に削除する
--coreanalyze生成されたファイルで検出されたコアファイルのみテキストファイルに抽出
--help使用方法を表示


 

サービス/プロセス

クラスターサービス

名前説明
GCSキャッシュフュージョンという仕組みを利用しキャッシュ一貫性を提供するサービス
ノードAがデータを取得(データはディスクから読み取られバッファキャッシュに蓄えられる)
ノードBが同じデータを取得を要求 ※
ノードAはノードBへブロック転送を行う(ブロック転送によりディスクのI/Oは発生しない)
※ノードBはリソースマスターへ要求を行い、リソースマスターはブロックを保持しているノードAへ転送指示を行う
GESキャッシュ一貫性以外の排他制御を提供するサービス。
DMLによるロック処理などノードAで行ロックが発生しているテーブルに対してノードBが同じ行ロックするSQLをした場合、行ロックを保持したままキャッシュフュージョンが行われる

バックグラウンドプロセス

プロセス名説明
PMON他のバックグラウンドプロセスを監視し、サーバープロセスが異常終了した場合に復旧を行う
SMONインスタンスリカバリ(障害後のインスタンス再起動時にコミットされてないデータブロックへREDOログを自動的に適用)しDBを正常な状態に戻す
使ってない一時表領域を綺麗にする(例えば、索引作成時の領域割り当てが失敗した際など、一時表領域を綺麗にする)
DBWnDBバッファキャッシュの内容をデータファイルに書き込む。複数プロセス起動し書き込みパフォーマンスの改善ができる(マルチCPUの場合)
次のような場合に使用済みバッファをディスクに書き込む
・サーバープロセスがしきい値までバッファスキャンしてもクリーンな再利用できるバッファが見つからない場合はDBWnに書き込み信号が送られる
・定期的にバッファを書き込んで、REDOスレッド内のインスタンスリカバリを開始する位置(チェックポイント)を進める。
 チェックポイントのログの位置はバッファキャッシュ内のもっとも古い使用済みバッファキャッシュによって決まる
LGWRREDOログバッファの内容をREDOログファイルへ書き込む。
書き込むタイミングは、COMMIT、REDOログスイッチ、LGWRによる最後の書き込みから3秒経過した時、DBWnが修正済みバッファをディスクに書き込む必要があるとき
CKPTバッファキャッシュとデータファイルを同期するためのイベント。
チェックポイントが発生すると新しいチェックポイント情報(SNCなど)で制御ファイルやデータファイルヘッダーを更新し、DBWnにデータブロックをディスクに書き込むように依頼する。
チェックポイントを利用する目的は
・インスタンス障害時のリカバリ時間の短縮
バッファキャッシュ内の使用済みバッファが定期的にディスクに書き込まれることを保証する
DBの通常停止が実行された際にすべてのコミット済みデータがディスクに書き込まれることを保証する
MMON
MMNL
AWRに関する多数のタスクを実行する。
MMONはスナップショットを取得し前回変更されたSQLオブジェクトの統計数値を取得してメトリックがそのしきい値を超えたときに書き込みを行う。
管理性モニタープロセス(MMNL)はSGAのアクティブセッション履歴(ASH)バッファ内の統計をディスクに書き込む
RECOアプリケーションがネットワーク上の複数のDBで処理することを分散処理と言い、分散処理で扱われるトランザクションの障害を解決する
ARCnREDOログスイッチが行われるとオンラインREDOログをオフラインファイルととしてコピーする(DBがアーカイブログモードになっている場合のみ)

クラスター環境でのみ実行されるバックグラウンドプロセス

プロセス名説明
LMONクラスタにインスタンスの追加・切り離しが行われることを検知しグローバルリソースの再構築を行う
LMD0デットロックの管理やロックモードの変換(排他モード、共有モードなど)のGESリソース調整を行う
LCK0不正なロック、使用中ロックリストなどを作成しGESリソース要求を処理する
LMSnインスタンス間でのメッセージの流れを制御し、キャッシュ一慣性のためのデータブロック転送等のGCSリソース調整を行う
DIAGインスタンス内の状態を監視し、インスタンス内のプロセスが異常終了した場合に診断データを保持する

バックグラウンドプロセス一覧

 

REDOログ

データに対して行われたすべての変更履歴を記録するファイルで障害時のリカバリに使用。

主なテーブル

ビュー説明
V$LOG制御ファイルからのログファイル情報
V$LOGFILEREDOログファイルの情報
DBA_HIST_LOGログファイルの履歴情報でV$LOGのスナップ情報が含まれる

REDOログの構成

REDOログは複数メンバー(ファイル)からなるグループで構成される。
インスタンス毎に、スレッドが割り振られる。

  • グループ1(ファイル1a、ファイル1b)
  • グループ2(ファイル2a、ファイル2b)
  • グループ3(ファイル3a、ファイル3b)
    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------
         1          1       2181   52428800        512          2 NO  CURRENT              214366325 2016-04-07 09:00:54   2.8147E+14
         2          1       2180   52428800        512          2 NO  INACTIVE             214294773 2016-04-06 23:36:01    214366325 2016-04-07 09:00:54
         3          2       1819   52428800        512          2 NO  INACTIVE             214205326 2016-04-06 12:00:25    214358417 2016-04-07 08:00:14
         4          2       1820   52428800        512          2 NO  CURRENT              214358417 2016-04-07 08:00:14   2.8147E+14

データが更新されると、一旦REDOログバッファ(メモリ)に格納されLGWRによってREDOログバッファから、REDOログファイルに書き込みが行われる。
グループ内のファイル全てに対して全く同じ内容を同時に書き込む(耐障害性を考慮)
バッファから、ログに書き込まれるタイミングは

  • トランザクションのコミット時
  • REDOログ・バッファの3分の1がいっぱいになったとき
  • タイムアウト発生時(3秒)

グループ内のファイル容量が一杯になるとログスイッチを行い次のREDOロググループに変更履歴を書き込む。

チェックポイント

REDOログに比べてデータファイルは遅延書き込みを行う為、データに整合性が取れなくなる。
チェックポイントは、REDOログと、データファイルの内容の同期を取る為のイベントで以下のタイミングで発生

  • ログ・スイッチが発生したとき
  • インスタンスがABORT以外で停止されたとき
  • ALTER TABLESPACE文で任意の表領域をオフラインにしたとき

チェックポイントに関連する初期化パラメータ

初期化パラメータ説明
LOG_CHECKPOINT_INTERVALREDOログに指定されたデータが書き込まれた時にチェックポイントを実行(単位はOSのブロックサイズ)
LOG_CHECKPOINT_TIMEOUTすべてのバッファが指定した秒より長い間、(キャッシュ内に)使用済で残らないようにする
LOG_CHECKPOINTS_TO_ALERTチェックポイントの開始/終了をアラートログに記録する(ログスイッチはパラメータに関係なく記録される)

REDOログのDUMP

変更履歴をDUMPしてテキスト表示する。

ALTER SYSTEM DUMP LOGFILE 'REDOログファイルのFULLPATH'
DBA MIN file_id#  block_id#
DBA MAX file_id#  block_id#;

※ file_id# と block_id# を指定することでDUMPするオブジェクトを絞り込んでいる
※ file_id# と block_id# は DBA_EXTENTSテーブルから確認する

アーカイブログ

主なテーブル

ビュー説明
V$ARCHIVED_LOG制御ファイルからのアーカイブログ情報
V$ARCHIVE_DESTアーカイブログ保存先(DESTINATION)や設定値、モード、状態情報
V$ARCHIVE_DEST_STATUSアーカイブログ保存先(DESTINATION)や構成情報
V$RECOVERY_FILE_DESTリカバリ領域の保存先、最大サイズ、現在の使用量

初期化パラメータ

初期化パラメータ説明
DB_RECOVERY_FILE_DESTリカバリ領域の保存先
DB_RECOVERY_FILE_DEST_SIZEリカバリ領域の最大サイズ

アーカイブログ

ARCHIVELOGモードにした場合、容量FULLになっているREDOログファイルのコピーを作成する。
ARCHIVEが終了するまで、REDOログ・ファイルは上書きされない。
アーカイブログの情報は、ARCHIVE LOG LIST コマンドで確認可能。

ARCHIVE LOG LIST

アーカイブログの削除

削除条件を指定した後、対象ファイルが表示され、YES/NO の選択がでる。YESを選択することで削除される。
削除されたアーカイブログは、V$ARCHIVED_LOG の NAME 列が空白になる。

-- RMAN に接続
NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
rman target /
rman target [USER]/[PASS]@[識別子]
-- アーカイブログのリスト表示
list archivelog all;
list archivelog like '%ファイル%';
-- 7日以上前のアーカイブログ削除
delete archivelog until time 'sysdate-7';
-- シーケンスNo 105 までのアーカイブログ削除
delete archivelog until sequence 105 [ thread 1 ];


 

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-01-11 (水) 23:53:19 (74d)