Oracle RAC パフォーマンス・チューニング


Oracle RACはデータベースソフトの追加機能の一つで、複数のコンピュータに処理を分散するクラスタリングを実現できます。

Oracle RACを導入することのより、一貫性を保ちながら一つのデータベースを複数のコンピュータで並列に操作できるようになり、負荷分散を図ることができるようになりました。

Rac

RAC ウェイト・イベント

パフォーマンス(性能劣化)問題へのトラブルショートではシステム、ネットワーク等の後に確認するのはウェイト(待ち)・イベントです。シングル・インスタンス・データベースではユーザのレスポンス・タイムが増加したり、データベースでの時間が高比率であれば、原因は見極められます。RAC環境ではGCウェイト・イベントやGlobal Cacheウェイト・イベントの特別なウェイト・イベントがあります。Oracleウェイト・イベントは要求の正確な結果を反映したイベントに起因しています。例えばインスタンスでのセッションがグローバル・キャッシュ内のブロックを探している場合には他のインスタンスでのデータ・キャッシュか、ディスクからリードしたメッセージを受け取っているのか判りません。ウェイトに関連するグローバル・キャッシュ用のイベントはグローバル・キャッシュ・ブロックやメッセージ上の正確な情報を伝えます。クラスタの状況を見るための1ウェイトが必要な時にはウェイト情報は「Cluster Wait Class」という広範なカテゴリにあります。ここにクラスタ用のウェイト情報が集約されます。

Oracle RACでの最も重要なウェイト・イベントは4つの大きなカテゴリに分けられます。

ブロック・オリエンテッド:ブロックが2-way,または3-wayメッセージの結果として受け取っているか:ブロックが1メッセージ、1転送を要求しているリソース・マスターから送られたのか、2メッセージと1ブロック転送を要求して送られたものから3つ目のノードに転送されたのかを示します。また、これらのウェイトはビジー、ピン、ログ・フラッシュ要求が無くても送信されたリモート・キャッシュ・ブロックも示します。

メッセージ・オリエンテッド:インスタンス内でのキャッシュから受け取ったブロックが無いことを示します。代わりにグローバル・グラントはディスクからブロックをリードするためのインスタンスへの許可を与えられます。この時間が長ければ、頻繁に使用されているSQLが大量のディスクI/Oを起こしているか、ワークロードで大量のデータをインサートしていて、新規ブロックのフォーマットが必要な場合です。

コンテンション(Contention)・オリエンテッド:gcカレント・ブロック・ビジーとgc crブロック・イベントが、多くの場合にログ・フラッシュが原因のリモート・インスタンス・処理遅延後のブロックを受け取ったことを示します。高い同時並行性はリモート・インスタンスのセッションによるブロックがピンか妨げられていることを示すgcバッファー・ビジー・イベントによることを証明しています。また同じインスタンスでのセッションがすでにブロックを要求しているとも示しています。

ロード・オリエンテッド:これはブロック・コンテンション(競合)の無い状況で最も頻繁で、GCS内で発生した遅延を示しています。有効なウェイト・タイムとトータルなウェイト・タイムはこれらのイベントが高い場合にパフォーマンス問題の警告時として考慮すべきです。通常は大きな作業セットに対してのインターコネクト、ロード問題、SQL実行が根本的な原因として考えられます。これらのイベントでウェイト・タイムはセッション・スタートからブロックが完了までの全体の往復時間を含みます。

RACパフォーマンス・チューニング

RACインスタンスで長時間稼働しているウェイトを分析する手法はシングル・インスタンスと変わりはありませんが、いくつかのRAC専用のステップとスクリプトがあります。

スクリプトにはOracle Supportからダウンロードできる「racdiag.sql」というものがあります。

パフォーマンス問題をトラブルシュートするためのもう1つの信頼できるソースは「v$views」です。RAC環境では確認するべき別のビューとしてgv$views (例 GV$SESSION_WAIT)があります。

●SQLチューニング
SQLチューニングはRAC環境では非常に重要で、しばしばパフォーマンス・ツーニング問題の根本原因となります。80%のパフォーマンス問題はSQLに関連すると云われています。ある資料ではRACデータベースを使用する時にバルク・ロードではサービスか、インスタンス・グループで稼働させるべきとあります。

また他のSQLチューニングの役割としてもっとRACにフレンドリーなコードを開発者はデザインすべきとしています。例えば計画ではデータの分割化と並列化された大容量を大規模テーブルに戻すようなクエリーでは、ロードがインスタンスをまたがって個別に起こるかどうかを判断するテストが必要です。

●クラスター・チューニング
相互接続による遅延とその取戻しに役立つと認識すべきCRSとGRIDに密着して関連する2つの項目があります。もしユーザがOracle 10Gを使用しているならdiagwaitパラメータを13に設定する必要があります。これはcrsd.logのロッギングを増やし、RAC問題のトラブルシュートを手助けします。もう1つはCRSパラメータでCSSミスカウント・パラメータを増加させます。CSSミスカウント・パラメータは相互接続遅延を指摘します。注意してこれを増やしてください。それはユーザはクラスタを望んでいるが失敗する可能性が高いミスカウントがあるケースがあります。これらはあくまでもシステムに依存するので注意ください。

ソース:Oracle RAC Tuning Tips(Kathy Gibbs, Confio Software)

関連したトピックス