玄録

玄録は、秀玄舎の事例を通した、
実践研究の成果をご報告する不定更新の
ビジネスレポートです。

性能問題の原因と対策

性能問題の調査方法  その2(データベース調査)

2007.09.18

  • Facebook
  • mixi
  • hatena

 性能問題がどこに起因するかを調べるために、①システム全体の性能測定→②データベース調査→③アプリケーション調査の順番に測定・調査を行い、性能に影響の高い問題部分を検出します。

 今回は、「②データベース調査」について、性能問題の調査方法をお話します。

業務アプリケーションでは、一般的にデータベースに各種データを登録します。
アプリケーションからのデータベースの利用方法が最適か、データベース統計情報、データベース定義から調査します。データベースの利用方法が起因して性能問題が発生するケースが非常に多いため、十分な調査が必要となります。

●データベース統計情報
 性能問題となりそうな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(プログラム調査)」についてお話します。