ablog

不器用で落着きのない技術者のメモ

Oracle の負荷テストについてメモ

  • 良すぎるキャッシュヒット率に注意
    • 一部のデータにしかアクセスしない場合、全データがキャッシュに載り、良すぎるキャッシュヒット率が計測される。
  • キャッシュの状態を適切に再現する
    • キャッシュの状態を適切に再現するためにテスト手順、テストデータ、テスト環境のスペックについて注意する必要がある。
    • オンライン時間帯にアクセスしない表に対して検索する夜間バッチ処理の場合、DB/OS/ストレージのキャッシュをクリアしてからパフォーマンステストを実施する。
    • オンライン時間帯に頻繁に参照されるマスタ表の場合、テストアプリケーションを空回しし、本番稼動時のキャッシュ状態を再現してから測定を開始する。
  • テストデータのサイズはキャッシュサイズに比例して用意する
    • キャッシュサイズ、データサイズが本番環境と異なる環境でテストを実施する場合は、比率が本番環境と同等になるようにする。
  • 過剰キャッシュヒットを見破るには
    • STATSPACK の Instance Activity の physical reads および physical writes と DB のブロックサイズの積がバッファキャッシュのサイズと比較して小さすぎる場合、テストデータの量が少なすぎるまたは負荷シミュレータ検索対象とするデータ範囲が狭すぎる疑いがある。
    • STATSPACK の File IO Stats で一部のデータファイルに物理I/Oが偏っている場合、負荷シミュレータが一部のデータにしかアクセスしていない可能性がある。
    • STATSPACK の SQL ordered by Gets、SQL ordered by Reads、SQL ordered by Executions などの Gets per Exec、Reads per Exec、Rows per Exec がゼロやゼロに近い値になっていたり、本番システムにおける問い合わせの処理パターンと合致しない値になっている場合は、試験結果の信憑性が疑われる。
  • 収集しておいたほうが良い情報
    • STATSPACK(レベル7)
    • OS情報(sar、vmstat、iostat、vxstatなど)
      • CPU使用率
      • CPUのrunキュー長
      • スワッピング状況
      • カーネルメモリ使用状況
      • ユーザメモリ使用状況
      • ディスクI/O量
      • ディスクビジー
      • 平均サービス時間
      • 平均待ち時間
  • テスト前にやるべきこと
    • 統計情報の収集
    • テスト環境を無断で使用している者がいないか確認する。


門外不出のOracle現場ワザ (DB Magazine SELECTION) P.89-108 より

負荷テストについて基本的なメモ

  • 負荷テストは性能要件を満たすことを確認するテスト。
  • 要件(requirement)には機能要件(functional requirement)と非機能要件(non-functional requirements)がある。
  • 性能要件は非機能要件の一つ。
  • 非機能要件には性能要件、障害対策要件、セキュリティ要件、運用要件などがある。
  • ウォーターフォールモデルの場合、結合テストの後に実施するのが一般的。先に非機能要件を確認したら、機能要件が満たされてなくて修正したら、再度、非機能要件を確認しないといけない。だから、機能要件、非機能要件という順番で確認するんだと思う。
  • 本番環境と同等のハードウェア環境を用意したほうが良い。
  • 目標値をクリアするまで、負荷テスト → パフォーマンスチューニング ... を繰り返す。
  • スループットは単位時間あたりにシステムが処理できる処理数。Webアプリケーションなら秒間PV数、DBサーバなら秒間何クエリなど。重要なのは平均のトラフィックではなくピーク時のトラフィックを目標値に定めること。
  • レスポンスタイムひとつの処理に要する時間。Webアプリケーションならクリックしてから応答が返り、画面に表示されるまでの時間。パーセンタイル値が指標としてよく使われる。「95パーセンタイル値2秒」など。
  • ターンアラウンドタイムはレスポンスタイムと似ているが、レスポンスタイムが処理結果が出始めるまでの時間であるのに対して、ターンアラウンドタイムは処理結果が出割るまでの時間。


[参考]
第8回 性能テスト:ソフトウェアテスト基本テクニック|gihyo.jp … 技術評論社
itarchitect.jp
実例で学ぶWebシステムのチューニング手法 | 技術トピックス | ウルシステムズ株式会社
http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/seino.htm
DBマガジン 2009年7月号 特集2 性能問題を未然に防ぎ安定運用を目指すLinux-DBシステム負荷テストのオキテ 松信嘉範

Perlワンライナーでレコードセパレータを変更する

n または p オプションを指定すると Perl はデフォルトで1行ずつ読み込む。OSで固有に定義されている入力レコードセパレータを使って各行の終わりを検出する。-0digits オプションを使うとレコードセパレータ(レコードの区切り)を変更することができる。

  • 行モード(デフォルト)
perl -wple ...
  • 段落モード(1つ以上の空行をレコードセパレータと認識する)
perl -00 -wle ...
  • ファイルモード(ファイル全体を1レコードとして認識する)
perl -0777 -wle ...
  • 段落モードの例
perl -00 -wnle 'BEGIN{%h=();} /09:00/.../10:01/ and !/10:01/ and /^[0-9\/]{10} ([0-9]{2}:[0-9]{2}):[0-9]{2}/ and $h{$1}++;END{map{print "$_: $h{$_}"} sort keys %h;}' hoge.log 


[参考]
ミニマルPerl ―Unix/LinuxユーザのためのPerl習得法 P.21