忍者ブログ

OracleDBAの技術メモ

最近物覚えが悪くなったので 仕事中に調べた後々役立つ情報をメモしております。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

待機イベント-gc buffer busy acquire

待機イベント:gc buffer busy acquire とは

バッファの確保解除を待機している状態。
RACの別ノードで確保・保留されているブロックを受け取る場合に多く発生する。

これ以上詳しい情報がないので、「buffer busy waits」のCache Fusion版であると仮定して
「buffer busy waits」の状態を調べた。
「buffer busy waits」は以下の何れかの状態になっているとのこと
 (1)別のセッションがバッファをバッファ・キャッシュに読み取っている
     (そのため、その読み取りが完了するまで待機する)
 (2)バッファはバッファ・キャッシュにあるが非互換モードになっている
     (別のセッションがバッファを変更している)

上記が、RAC上の別々のノード間で発生しているということか?

参考:
  ・Oracle Real Application Clusters(Oracle RAC)のキモ~Cache Fusionに注目する~
    http://www.oracle.com/technetwork/jp/articles/yagi-cache-fusion-098964-ja.html

  ・(書籍)ORACLE MASTER Export[RAC]編 株式会社翔泳社刊(通称黒本)

オラクルマスター教科書 ORACLE MASTER Expert 【RAC】編(試験番号:1Z0-048)

新品価格
¥6,510から
(2012/7/17 21:50時点)

PR

待機イベント-gc cr block busy

待機イベント:gc cr block busy とは

CRブロックが転送されるのを待機している状態。
以下のような仕組みで発生する。



更新中ブロック等にSELECT要求等を行うと「CRブロック」が生成され、
「CRブロック」が転送されてSELECT要求が完了する(要求したブロックが参照できる)が、
このとき必ずログフラッシュが発生し、これが完了しないと「CRブロック」は転送されない。
その際の待ちが「gc cr block busy」イベントとなる。

ただし、必ずしも「gc cr block busy」の原因がログフラッシュとなるとは限らない。
(大半はログフラッシュが原因らしいと記述があるが…)


参考:
  ・Oracle Real Application Clusters(Oracle RAC)のキモ~Cache Fusionに注目する~
    http://www.oracle.com/technetwork/jp/articles/yagi-cache-fusion-098964-ja.html

  ・(書籍)ORACLE MASTER Export[RAC]編 株式会社翔泳社刊(通称黒本)

オラクルマスター教科書 ORACLE MASTER Expert 【RAC】編(試験番号:1Z0-048)

新品価格
¥6,510から
(2012/7/17 21:50時点)

CacheFusionに関するアーキテクチャ(リンク)

RACのCacheFusionに関するアーキテクチャの説明は以下が参考になる。
http://www.oracle.com/technetwork/jp/articles/yagi-cache-fusion-098964-ja.html

CatcheFusionに関してもシンプルにまとめられているのでこの本もおすすめ。
↓↓↓

オラクルマスター教科書 ORACLE MASTER Expert 【RAC】編(試験番号:1Z0-048)

新品価格
¥6,510から
(2012/7/17 21:50時点)

USE_NLヒントを有効にするために

USE_NLヒントを使用する場合は、
ORDEREDヒントも使用することを検討する。

ORDRERDヒントを使用したSQLのFROM句に

FROM 外部表にしたいテーブル名, 内部表にしたいテーブル名

とすれば、結合順序が

外部表にしたいテーブル名 → 内部表にしたいテーブル名

となり、内部表にしたいテーブル名に指定したテーブルは必ず内部表となる。



参考:KROWN#70315 結合操作のヒント句を使用しているにも関わらず意図した結合にならない。

内部表の決定(USE_NLヒントが有効にならない原因)

USE_NLヒントは、
指定された表が内部表として使用されるような結合時に
ネステッド・ループ結合するように指示するヒント句である。

したがって、指定されたテーブルが内部表として使用されない場合には、
USE_NLヒントは無効となる。

通常、オプティマイザは複数の結合順序パターンのコストを評価し、
よりコストの低い実行計画となる結合順序パターンを選択する。

そのため、USE_NLで指定したテーブルが
内部表とならない結合順序のコストより低く評価された結合順序があった場合、
その結合順序が選択されてしまい
結果的にUSE_NLヒントは無効となってしまう。

  例:以下の4つのパターンが評価されたとする
      ※)(外部表)→(内部表)と表現する

      プラン1 表A→表B ネステッド・ループ結合 コスト:400
      プラン2 表A→表B ハッシュ・ジョイン結合 コスト:300
      プラン3 表B→表A ネステッド・ループ結合 コスト:200
      プラン4 表B→表A ハッシュ・ジョインン結合 コスト:100

    上記の場合、通常もっともコストの低いプラン4が選択される。
    プラン4で実行計画が構成された状態から、
    USE_NL(表B)を指定して結合方法を強制しようとしても、
    表Bは内部表ではないのでUSE_NLヒントは働かない。

    しかし、USE_NL(表A)を指定した場合、
    表Aは内部表なので、ネステッド・ループ結合が使用される。

ブログ内検索

プロフィール

HN:
宇佐 義男
性別:
男性
自己紹介:
都内で活動中のフリーエンジニア
最近はOracle DBに関する作業が主です。

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

最新CM

[08/06 Apagajid]
[06/23 Ajimehof]
[05/28 ovkftcz]
[05/20 Adeepen]
[05/13 Ajirubuy]

バーコード

P R

忍者アナライズ

免責事項

当ブログは日本オラクル株式会社 及びその子会社、関連会社とは一切関係ありません。 当ブログに記述の内容については、実際とは異なる場合があります。 記載しているコマンド、スクリプトを利用したことによって発生した問題、障害等については一切責任を負いません。 利用は自己責任にてお願い致します。