ロックをつぶせ! 最初に疑うべき原因:Oracleパフォーマンス障害の克服(2)(1/3 ページ)
Oracleデータベースの運用管理者は、突発的に直面するパフォーマンス障害にどうやって対処したらよいか。本連載は、非常に複雑なOracleのアーキテクチャに頭を悩ます管理者に向け、短時間で問題を切り分け、対処法を見つけるノウハウを紹介する。対象とするバージョンはOracle8から9iまでを基本とし、10gの情報は随時加えていく。(編集局)
第2ステップ SQL処理にかかわる確認
前回「障害発生! 問題切り分けはスピード勝負」では、Oracleデータベース・サーバの管理や障害対策など、問題解決に有効と考えられる「問題解決に有効な6ステップ」を紹介しました。「第0ステップ ログの確認」「第1ステップ CPU/メモリの監視」は、日々の運用でサーバの状態を確認できる有効な手段であると理解できたと思います。本稿では問題の切り分けを明確に行うための「第2ステップ SQL処理にかかわる確認」を説明します。
SQL処理にまつわるOracleのキーワード
前述の「問題解決に有効な6ステップ」の第2ステップにSQL文の確認を挙げたのは、データベース・サーバの状態を変化させる要因は、ユーザーから日々頻繁に起こる要求に起因することが多いと考えるからです。まずは、この視点から問題解決へのステップを進めていきましょう。
実際の確認の手順を示す前に、Oracleデータベース・サーバがSQL文を処理し、ユーザーに対して処理結果を返すまでの動作に関連するキーワードを明確にしておきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
問い合わせや更新における各処理は、実行計画や実行結果などを格納するSGAなどの領域が正しく設定されているかが重要となりますので、この解説は「第3ステップ SGAの調整」で解説します。本稿では、ユーザーからの要求であるSQL処理全体に着目していきましょう。
オブジェクトに対するロック
複数のユーザーから処理が要求されるマルチ接続のデータベースには、読み取り一貫性という考え方が適用されています。これはユーザーが処理を要求し、その結果が確定されるまで、以前のデータが保証されるというものです。また、複雑に構成された複数のデータ構造を保証するには、データベース内での表データなどの構造が保証されなければなりません。この2点はデータを更新する際に重要な考え方です。
データベース・サーバで問題となるのは、「ロックがきちんと解放されない状況では、次の処理を行えない」ということです。やっかいなことにSQL処理によるロックの問題は、きちんとトランザクションの解放が行われていない場合などでは、サーバ上の問題に見えることがあります。しかし、トランザクションの一連の処理はSQL文によるアプリケーション側の制御ですので、サーバの問題と明確に切り分ける第一歩となります。まずはロックに着目して、問題解決につなげましょう。
ここでデータベース管理者が知りたい情報を整理してみましょう。
- どのセッションがロックをかけているのか
- どのユーザーがロックをかけているのか
- どのプログラムがロックをかけているのか
- どのようなSQL文が問題となっているのか
- どのオブジェクトがロックされているのか
- オブジェクトに対するロックをかけているのはどのプログラムなのか
それでは次ページで、動的パフォーマンスビューを使って問題となっているロックを特定していく作業を解説しましょう。(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.