性能問題の原因と対策
性能問題の調査方法 その2(データベース調査)
性能問題がどこに起因するかを調べるために、①システム全体の性能測定→②データベース調査→③アプリケーション調査の順番に測定・調査を行い、性能に影響の高い問題部分を検出します。
今回は、「②データベース調査」について、性能問題の調査方法をお話します。
業務アプリケーションでは、一般的にデータベースに各種データを登録します。
アプリケーションからのデータベースの利用方法が最適か、データベース統計情報、データベース定義から調査します。データベースの利用方法が起因して性能問題が発生するケースが非常に多いため、十分な調査が必要となります。
●データベース統計情報
性能問題となりそうなSQL文を特定するために、データベース統計情報を調査します。データベースの種類により、統計情報が収集できるものとできないものがあります。
・Oracle(動的パフォーマンスビュー)
SQL単位の発行回数、Parse回数、バッファリード回数、ディスクI/O回数、ロックモード、ロック時間、セッションID、対象Oracleユーザ名、アナライザによるコストベース評価など、SQL文単位にそのSQL発行状況とそのSQL処理の負荷の情報を収集されます。
動的パフォーマンスビューは、OracleのVLにより採取方法が異なるため、注意が必要です。
・Microsoft SQLServer(SQLプロファイラ、SQLクエリアナライザ)
デッドロック、重大なエラー、ストアドプロシージャ、Transact-SQL、ログイン状況、SQL実行計画
・PostgresSQL
postgresql.confの以下のステータスを修正して採取します。
stats_start_collector:ture
stats_command_string:ture
stats_row_level:ture
stats_block_level:ture
統計情報用のビューを使用してデータベースの状態を採取します。
・その他DB
SQLトレースにより、SQL発行状況を調査します。
●データベース定義
問題となるSQLで使用しているテーブル・インデックス・カラムを調査します。
これらの調査結果から、analyzeを使用して以下のデータベースの利用方法の妥当性を検証します。
・インデックス検索をしているか?
・全件検索をしていないか?
・SQL発行回数が異常に多くないか?
・ロック時間が長くないか?
・ロック範囲(行ロックと表ロック、DBロック)が妥当か?
・SQLに無駄がないか?
次回は、「性能問題の調査方法 その3(プログラム調査)」についてお話します。