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