読者です 読者をやめる 読者になる 読者になる

Performance Tuning

Oracle

※ソースは以下のリンク:
http://www.orapub.com/tools-firefighting-diagnostic-xls-toolkit パフォーマンス・チューニングにおいて覚えておくことは3つ。

  1. Must empbrace different perspective
    様々な視点から考える。Oracleのパフォーマンス・チューニングにおいて持つべき視点は以下の三つ:
    1. Operating System - いわゆるOS。IO、CPU、メモリなどの視点
      1. 使用するコマンド
        1. top
        2. iostat
        3. sar
        4. vmstat
        5. netstat
    2. Application - SQL。どういったものが実行されているか。
      1. SQLが何をしているか
        1. CPU/LIO(Logical I/O)/Buffer Gets
        2. PIO-R(物理読み込み)
        3. DML
        4. Sorting
        5. Query
        6. Parsing
      2. SQLの種類を識別したらAWRを使用して詳細を確認⇒上位のものや、複数回出てくるSQLに注意
        1. SQL Statistics
          1. SQL ordered by Elapsed Time/CPU Time
          2. SQL ordered by Gets/Reads
    3. Oracle - インスタンス。待機イベントなど
      1. コストベースとタイムベースという考え方が出来る。 今回はタイムベースについて。ユーザーには二種類おり、別の基準をもっている。
        1. OLTP-centric users - 速いレスポンスタイムを求めている。
        2. Batch-centri users - 仕事をより早くこなして欲しい。
      2. Elapsed Time = CPU Time + Wait Time ⇒ 経過時間 = CPUの処理時間 + 待機時間
        1. AWRのTime Model StatisticsのDB CPUとbackground cpu timeの合計がTotal
        2. AWRのWait Eventsで待機イベントとTotal Wait Time(s)を確認できる。また以下の動的パフォーマンスビューでも確認できる:
          1. wait: v$system_event
          2. cpu: v$sys_time_model
        3. Oracleがwait timeを導き出す方法:
          1. サーバープロセスにstraceを使用して、clock_gettimeとpreadを確認。
          2. preadの前後のclock_gettimeを引き算して導き出す。
          3. 仮にプロセス番号が2518だとするとコマンドは"$ strace -rp 2518"
        4. DB TimeはCPU timeとWait timeに分けられる。CPU timeにはサーバープロセスのものとバックグラウンドプロセスのものがあるが、バックグラウンドプロセスの時間は無視してよい(コミットなど、文字通り裏方として作業をしているため)。Wait timeはI/Oとそれ以外のものに分類できる。I/Oはさらに読み込みと書き込みに分類される。
  2. 以上の3つの視点とそれぞれの分析&サマリがあると分かりやすい。
  3. Must be quantitative based
    数値化する。数値は信頼性があり、再現性があるので伝えやすい。
  4. Understand that seriarization is death
    1秒かかるプロセスが100個あったとする⇒すべてのプロセスをシリアルで処理すると100秒。
    1. Elapsed Time = Pieces of work * Time to process
      1. 経過時間=仕事の数*処理にかかる時間
      2. Wall Time = Elapsed Time/Parallelism
      3. 処理に必要な時間=経過時間÷並列度
    2. すなわち処理に必要な時間を減らす方法は三つ
      1. 仕事の数を減らす⇒SQLチューニングなどで余計なIOを減らすなど。
      2. 仕事をより早く処理する⇒ストレージを高速化、CPUの高速化など。
      3. 並列度をふやす。