サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
www.ex-em.co.jp
共有プール・ラッチは共有プールの基本的なメモリー構造であるヒープを保護する役割をします。 空きチャンクを探すために空きリストを探索して、適切なチャンクを割り当てて、必要な場合空きチャンクを分割する、という一連の作業は全て共有プール・ラッチを獲得してから 可能になります。共有プール・ラッチを獲得する時、競合が発生するとlatch:shared pool待機イベントで待機します。 ヒープと関連した一連の作業は非常に早く完了するので、普通の場合は共有プール・ラッチでの競合は発生しません。 しかし、次のような場合には、latch:shared pool待機イベントが増加する可能性があります。 共有プール・ラッチは全体インスタンスに一つだけ存在します。 一つの共有プールでは一つの共有プール・ラッチが使われますが、 これは共有プールの基本メモリー構造であるヒープのアーキテクチャーによるものです。 従っ
共有プール・ラッチが空き領域を探すために空きリストをスキャンして適切なチャンクを割り当てる作業を保護するなら、ライブラリ・キャッシュ・ラッチはSQLを実行するためにライブラリ・キャッシュメモリー領域を探索して管理する全ての作業を保護します。 ライブラリ・キャッシュ・ラッチはCPUカウントより大きい素数中一番小さい数だけ子ラッチを持ちます。 ライブラリ・キャッシュ・ラッチを獲得する中で競合が発生すると、latch:library cache待機イベントを待機します。ライブラリ・キャッシュ・ラッチ競合は主に次のような場合に発生します。 ハード解析やソフト解析が多過ぎる場合 バージョン・カウントが高い場合 SGA領域のページ・アウトが発生する場合 共有プール・ラッチ競合が主にハード解析による空きリストの探索によって発生するように、ライブラリ・キャッシュ・ラッチ競合の最も重要な原因もハード解析にあ
1.概要 特定ブロックにアクセスする際プロセスは該当ブロックに対してバッファ・ロックを獲得します。特定ブロックを変更する際も、該当ブロックに対してバッファ・ロックを排他モードで獲得します。また、特定ブロックに対しては読取時バッファ・ロックを共有ロックモードで獲得します。 もしプロセスAがブロックXに対してバッファ・ロックを獲得している状態で、プロセスBが同一のブロックに対してアクセスをした場合バッファ・ロックを獲得できない為待機します。その時、発生する待機イベントがbuffer busy waits待機イベントです。 buffer busy waits待機イベントが最も多く確認されるのは、同時に複数のプロセスが同一のブロックに対してインサートやアップデートをする場合です。インサートやアップデートの作業は該当ブロックに対してバッファ・ロックを排他モードで獲得することを要求します。複数のプロセ
read by other session待機イベントは、buffer busy waits待機ベントと同じくバッファ・ロック競合と関連があります。read by other session待機イベントが発生する状況は以下の通りです。 ディスクから読込んだブロックをバッファ・キャッシュにキャッシュしようとするプロセスAは、該当ブロックに対してバッファ・ロックを 排他ロック・モードで獲得します。 同じブロックを読もうとするプロセスBは、該当ブロックに対してバッファ・ロックを共有ロック・モードで獲得しようとします。 プロセスAがバッファ・ロックを排他ロック・モードで獲得したままブロックを読んでいるので、このプロセスBはプロセスAの作業が終わるまで待機しなければなりません。 プロセスAがブロックをディスクからメモリーに読込むまでプロセスBはread by other session待機イベントで
DBリンクを経由するSELECT処理でUNDOセグメントが割り当てられてしまう 【Question】 DBリンクを経由してデータをSELECTで参照しています。ところが、SQLを実行するとUNDOセグメントを割り当ててセッションが終了するまでずっと残っています。なぜでしょうか。 【Answer】 これはOracleの内部的な動きです。リモートクエリーの場合、SELECTでも無条件でTXロック獲得するようになっています。 これはSELECT文がローカルで実行中にリモートでTXロックでその状態を保護する仕組みです。 この現象は、セッションの終了やDML実行後にコミットが発生するため、自然となくなり殆どの場合問題にはなりません。 しかし、トランザクションの数が多い状態で無駄なトランザクションを発生させたくない場合は以下の二つの方法で解消することができます。 ① SELECT後にコミットを実行する
ユーザー・プロセスがコミットまたはロールバックを行うと、サーバー・プロセスはLGWRへ要求を送ります。 LGWRはREDOバッファの一番最後に記録された部分からコミットした部分までの全REDOエントリをREDOログ・ファイルへ 書込みます。この動作が行われた回数は、redo synch writesの統計で確認することができます。 サーバー・プロセスはコミットを実行した後、LGWRが正常にREDOエントリを書きだすまで待ちますが、 この時、log file sync待機イベントで待機します。 つまり、ログ・バッファとファイルの同期化を行う間、 LGWRプロセスはREDOエントリがREDOログ・ファイルへ書込みを完了するまで log parallel write待機イベントで待機し、サーバー・プロセスはlog file sync待機イベントで待機します。 サーバー・プロセスでは2つの理由でl
バッファ・キャッシュを使うためハッシュ・チェーンを探索したり変更を加えようとするセッションは、 必ずそのチェーンを管理しているcache buffers chainsラッチ(以降、CBCラッチ)を獲得しなければなりません。 このラッチを獲得する時に、競合が発生するとlatch:cache buffers chains待機イベントで待機します。 Oracle9i以降からは読み取り専用を保護するため、チェーンを探索する場合にはCBCラッチを 共有モードで獲得し、競合を減らせるようになっています。これには一つ注意すべきことがあります。 理論的にはSELECT文が同時に発行された場合は、CBCラッチを共有できるため、 CBCラッチ競合が発生してはいけませんが、実際テストをしてみるとラッチ競合は相変らず発生します。 その理由は、バッファ・ロックと関連があります。読み取り専用で作業を行うために共有モー
Oracleはユーザーが要求したデータがSGAのバッファ・キャッシュに存在しない場合、サーバー・プロセスがデータ・ファイルから該当するデータ・ブロックをバッファ・キャッシュにロードします。これを従来型パスI/Oと言います。従来型パスI/Oはマルチ・ブロック読取り方式とシングル・ブロック読取り方式に分けられます。マルチ・ブロック読取り方式は1回にいくつかの連続したブロックを読込むI/Oで、シングル・ブロック読取り方式は1回に一つのブロックだけを読込むI/Oです。 Oracleでは 従来型パスI/Oが発生した場合、2つの待機イベントを通じて、マルチ・ブロック読取りが発生したのか、それともシングル・ブロック読取りが発生したのかを分かるようにしてあります。この2つの待機イベントがdb file sequential read/db file scattered readイベントです。これらの待機イ
11gから追加されたV$SQL_HINT 11gから凄いビューが追加されましたよ、V$SQL_HINT! SQL> desc v$sql_hint 名前 NULL? 型 ----------------------------------------- -------- ---------------------- NAME VARCHAR2(64) SQL_FEATURE VARCHAR2(64) CLASS VARCHAR2(64) INVERSE VARCHAR2(64) TARGET_LEVEL NUMBER PROPERTY NUMBER VERSION VARCHAR2(25) VERSION_OUTLINE VARCHAR2(25) SQL> exec print_table('select * from v$sql_hint where name like ''INDEX%
“Scene25 – SGA: allocation forcing Component growth”...
このページを最初にブックマークしてみませんか?
『日本エクセム株式会社 - データベース・アプリケーションサーバーの見える化で効率...』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く