2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  · ...

109
<Insert Picture Here> 夜な夜な! なにわオラクル塾 Presented By アシスト #49 データベース性能分析手法解説 AWR/ASHを 活用した分析事例 2016年5月18日

Transcript of 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  · ...

Page 1: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

<Insert Picture Here>

夜な夜な! なにわオラクル塾Presented By アシスト #49

データベース性能分析手法解説 AWR/ASHを活用した分析事例

2016年5月18日

Page 2: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved. 2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

アジェンダ

一般的なDatabaseチューニングの流れ

AWR / ASHの概要

AWRの活用方法

ASHの活用方法

ケーススタディ

3

1

2

3

4

5

Page 4: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

Databaseの性能問題

アプリケーションが遅い(想定される性能と比較して)• どの処理がネックかわからない

• SQL文が適切でない- 超巨大SQL文を作成してしまった。「べからず集」に該当するSQLが散見される。

• 最適な設計になってない- 索引が作成されてない、使われていない。パーティションが使われていない。

• サーバーのリソースを使いきっていない- 「CPU利用率は余裕があるのに」

アプリケーションの性能が変動した• アップグレード後に想定外の性能変動が発生

- 実行計画が変わる想定ができてなかった。

• 今までと同じ運用をしていたのに性能変動が発生- 統計情報取得の運用がデータ変動を想定できなかった。

4

Page 5: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

一般的なDatabaseチューニングの流れ

5

問題発生 状況把握のための情報収集 / 取得

分析 / 問題の特定チューニング

対処

各種ログOS情報

何が遅い?どこで遅い?

遅い時間はいつ?再現性はあるか? Automatic Workload Repository(AWR)

Active Session History(ASH)

Page 6: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

従来からある、Databaseチューニング手法

問題が発生している箇所の特定(切り分け)が、まずは大変

(例)パフォーマンス問題の発生

- 30分ほど前からパフォーマンスが低下中

• 発生していた待機イベントは?

- Statspackによる分析

- 問題の時間帯に発生していた待機イベントを調査

• 原因となったセッションは?発行されていたSQLは?

- v$session_wait等からn秒ごとにcsvファイルに保存、等

- 問題の時間帯のセッションやSQLの特定に有用だが情報管理が煩雑

6

Statspackレポート

取得したcsvデータからのグラフ化

Page 7: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

本日の目的とゴール

7

• AWR/ASHの概要を理解する

• 性能課題解決のアプローチを知る

• Database運用管理にAWR/ASHの活用を埋め込むイメージをもつ

目的

性能課題解決に向けてAWR/ASHを活用することができるようになる

ゴール

Page 8: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

アジェンダ

一般的なチューニングの流れ

AWR / ASHの概要

AWRの活用方法

ASHの活用方法

ケーススタディ

8

1

2

3

4

5

Page 9: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR(Automatic Workload Repository)とは

• AWR(自動ワークロード・リポジトリ)- データベースの稼動情報(Statspack + α)を自動収集 / 保存

- MMON が定期的にSGA の情報を取得

- 情報取得の間隔と保存期間は画面から設定可能

- 性能分析の元となる情報の格納庫

9

定期的に保存SGA統計情報負荷の高いSQL…

MMON

AWR

ADDM

診断結果 / アドバイス

DBA

スナップショットの差分を診断

結果作成

起動

起動

結果表示

DiagnosticsPack

EE +

Page 10: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH(Active Session History:アクティブ・セッション履歴)とは

• アクティブ・セッションに関する情報を保持する(毎秒サンプリング)- SGA内の循環バッファに格納

• ビュー: V$ACTIVE_SESSION_HISTORY

- MMNLにより、AWR(ディスク)に書き込まれる

· AWRに書き込まれたデータは DBA_HIST_ACTIVE_SESS_HISTORY で確認可能

- ASHはデータベース診断のキー要素

• パフォーマンス問題やデータベースのハングに関する問題の調査を行う場合にASH の情報を使用した調査が有効となる場合がある(MOS Notes# 1742219.1 Active Session History(ASH) 情報の取得方法(KROWN:127934))

10

DiagnosticsPack

EE +

Page 11: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• 情報の特性、使用ケースから見た AWR と ASH

- 情報の特性

- 使用ケース

- 情報の特性

- 使用ケース

11

AWR(Automatic Workload Repository)

ASH(Active Session History)

スナップショット取得タイミングにおけるDatabase稼働情報の集合スナップショット間の差分を取得することで特定期間のDatabase稼働状態を確認可能

特定の期間内のインスタンス全体の状態を把握するために使用スナップショット取得の負荷を考慮すると通常運用で1時間または30分、試験時でも10分程度が取得の最小間隔

1秒または10秒間隔のアクティブなセッション状態情報の集合アクティブ(= 処理中)なセッションの状態や実行処理を確認可能

一時的なパフォーマンスの問題を診断する際にセッションレベルの分析を行うために使用1秒または10秒間隔のため、1秒未満の処理については情報が残っていない可能性がある

Page 12: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWR / ASH を使用した調査

- AWRとASHの両方を使用して調査を進めるケースもある

12

発生期間 問題とその範囲 AWR ASH

一定期間Database全体の処理遅延 ◎ △

特定セッション・処理の遅延 △ ○

一時的Database全体の処理遅延 △ ○

特定セッション・処理の遅延 × ○

調査スコープ

* Oracle Database 統計の詳細を参照するには、AWRを使用する必要があります

エンキュー競合 AWRの全体的な傾向の分析にて待機イベントを特定 ASHでブロッカーセッションや対象SQLを特定

一時表領域書き出し AWRの全体的な傾向の分析にて待機イベントを特定AWRの全体的な傾向の分析にてPGAの状態を確認

ASHで特定のセッションやSQL実行時に確保するPGAサイズや使用している一時表領域サイズを特定

Page 13: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWRの概要- インスタンスのメモリ上で保持する稼働情報をSYSAUX内のテーブルに格納した情報

- AWR情報参照のためのDBA_HISTから始まる静的ビューが提供

• (G)V$SYSTEM_EVENT → WRH$_SYSTEM_EVENT → DBA_HIST_SYSTEM_EVENT

• (G)V$SYSSTAT → WRH$_SYSSTAT → DBA_HIST_SYSSTAT

• (G)V$SQL → WRH$_SQLSTAT → DBA_HIST_SQLSTAT

13

SGA

稼働情報(V$ビュー / X$表)

稼働情報(テーブル)INSERT ~ SELECT

V$ビュー AWR実テーブル AWRのディクショナリビュー

* 上記の動的ビューは、AWRの各ビューと同様の情報を参照するためのビュー実際の取り込み時の参照先はV$ビューの基となる固定表等から取得されることがある

Page 14: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWRの概要- スナップショットを取得すると、その時点の各情報が対応するテーブルに格納される

14

WRH$_SYSTEM_EVENT

WRH$_SYSSTAT

WRH$_SQLSTAT

WRM$_SNAPSHOT

SNAP_ID : 1000 SNAP_ID : 1001 SNAP_ID : 1000のデータ

SNAP_ID : 1001のデータ

スナップショットとはSNAP_IDで関連付けられ( = 同一タイミングで取得された) 、テーブルに分散して格納された稼働情報の集合体

Page 15: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWRの概要- AWR情報を分析で使用する場合の注意点

• スナップショット内の情報は一部を除き、インスタンス起動からの累積値が格納される

• インスタンス再起動がすると累積値がリセットされ、スナップショット間の差分は取得できない

15

特定の期間の分析を行う場合、各情報の終了時点と開始時点の対応する値にスナップショット情報の差分算出が必要

再起動直後の最初のスナップショットについては、差分算出は不要 (インスタンス起動からの値として分析)再起動をまたいだ差分算出結果は値として意味がない

AWRの下記機能は、分析期間の中に再起動が入っている場合、使用できない• AWRレポート生成• AWRSQLレポート生成

SNAP_ID INSTANCE_NUMBER STAT_NAME VALUE------- --------------- ----------- -------------

1085 1 redo size 7,580,255,4561086 1 redo size 9,741,652,163

SNAP_ID 1085までに約7.5GBのREDOログを生成SNAP_ID 1086までに約9.7GBのREDOログを生成⇒ SNAP_ID 1085~1086 の間に 約 2.2 GBのREDOログを生成

Page 16: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWRの概要- スナップショットの取得

• MMONプロセスによる定期的な自動取得 (デフォルト1時間)

• DBMS_WORKLOAD_REPOSITORYパッケージを使用した手動取得

• Oracle Enterprise Managerを使用した取得

16

SGA

稼働情報(V$ビュー)

稼働情報(テーブル)

MMON

SQL> EXECUTE DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

Page 17: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWRの概要- AWRレポートの作成

• 指定した開始と終了スナップショット間の各情報の差分を算出し、レポートとして出力したファイル

- 出力項目は、Oracle Database 側で予め定義された項目

- 開始スナップショットと終了スナップショット間にインスタンス再起動がある場合は作成できない

• レポートの出力の形式としては、下記の2タイプが存在する

17

HTML形式 テキスト形式

基本的にいずれの形式でも出力項目は同じ(バージョンが同じ場合)

ただし、SQLテキスト全文は、HTML形式のみ出力される点に留意

Page 18: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWRの概要- AWRレポートの作成

• AWRレポートは下記の2つの方法で生成することができる

- SQL*Plus で Databaseインスタンスに接続後、下記のスクリプトを実行

- Oracle Enterprise Manager 内の『パフォーマンス > AWR > AWRレポート』のセクションからの実行 (Cloud Control 12cの場合)

18

■ 接続インスタンスのAWRレポートを生成する場合SQL> @?/rdbms/admin/awrrpt.sql

■ レポート対象となるインスタンスを選択しAWRレポートを生成する場合SQL> @?/rdbms/admin/awrrpti.sql

* 「?」は$ORACLE_HOMEを示します

Page 19: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• ASHの概要- インスタンス内のセッションのうち、アクティブな状態のセッション情報の履歴を保持

- ASH情報は下記の2つのビューで参照することができる

• (G)V$ACTIVE_SESSION_HISTORY : SGA上のASHバッファに保持、1秒間間隔

• DBA_HIST_ACTIVE_SESS_HISTORY : SYSAUX内のテーブルに保持、10秒間隔

19

(G)V$SESSIONで確認できるセッションのうち、CPU使用中または待機イベントクラスが Idle でない待機イベントで待機しているセッション

セッション CPU CPU待機 CPU CPU待機Idle Idle Idle

アクティブ アクティブ

* GV$ACTIVE_SESSION_HISTORYを使用すると、RAC内の別のインスタンスのASH情報を参照することが可能です

Page 20: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• ASHの概要- 各ビューのASH情報は下記のように格納される

- 格納先毎の保存期間

• ASHバッファ上のASH情報の保存期間は下記に依存

- 『アクティブ・セッション数』 及び 『ASHバッファのサイズ(共有プールサイズに依存)』

- インスタンス停止 (インスタンス停止でASHバッファ上の情報は消える)

• SYSAUX内のASH情報の保存期間はデフォルト8日間 (11gR2の場合)

20

バッファが一杯で動作

60分間隔

SGA

WRH$_ACTIVE_SESSION_HISTORY

SYSAUX

MMONASHバッファ

V$ACTIVE_SESSION_HISTORY

参照 MMNL

DBA_HIST_ACTIVE_SESS_HISTORY

参照

Page 21: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• ASHの概要• ASHに格納されている情報

• 対象セッション情報が記録された時間 : SAMPLE_TIME列 で特定

• 対象セッションの情報 : SESSION_ID列 及びSESSION_SERIAL#列 で特定

21

SESSION_ID SESSION_SERIAL# SAMPLE_TIME SQL_ID EVENT SESSION_STATE---------- --------------- --------------------- ------------- ----------------------------- -------------

164 3117 15-06-15 22:44:30.983 6m2ckkhmmqctb db file sequential read164 3117 15-06-15 22:44:31.871 6m2ckkhmmqctb ON CPU164 3117 15-06-15 22:44:32.778 log file sync 164 3117 15-06-15 22:44:34.678 13ffwur4e33gj db file scattered read

db file sequential read

log file syncCPUdb file

scattered read

22:44:30 22:44:31 22:44:32 22:44:33 22:44:34

SID 164SERIAL# 3117

ASHは最小でも1秒間隔の情報のため、この間に別の待機が発生していた可能性はある

SQL_IDが変わっているため、別SQL実行時のセッション情報であると判断できる

ASH情報が記録されていないため、セッションがアクティブな状態ではない

Page 22: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR / ASH の概要

• AWR / ASHでの分析の範囲- クライアント側、Database側で見た処理の流れ

- インスタンス全体で見たDatabase処理とAWR / ASHの分析範囲

22

クライアント側

Database側

SQL実行中 SQL実行中

SQL 結果

CPU I/O ロック CPU CPU I/O ロック

SQL

I/O CPU

結果

セッション1

セッション2

セッション3

・・・

LGWR

スナップショット1 スナップショット2

AWRの分析範囲

ASHの分析範囲

この部分を短くすること = 処理のレスポンスの改善

Page 23: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

アジェンダ

一般的なチューニングの流れ

AWR / ASHの概要

AWRの活用方法

ASHの活用方法

ケーススタディ

23

1

2

3

4

5

Page 24: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 想定されるケースとAWR情報の活用方法

24

正常時 / 問題発生時のAWRレポートの比較分析

対象Databaseにアクセスしているすべての処理で通常時よりも遅延が発生

定期的なAWR情報の抽出と比較分析

プロアクティブな性能問題の兆候分析によるパフォーマンストラブルの未然防止

特定SQLの対象期間におけるAWR SQLレポートの分析

上記による分析対象SQL特定時での一定期間におけるSQL実行状況の把握や改善のための分析

Page 25: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 正常時 / 問題発生時のAWRレポートの比較分析の流れ

25

1. Databaseインスタンスの稼働状況を把握(負荷傾向の確認)

2. 待機イベントから問題発生時に発生しているボトルネックを特定(問題特定)

3. ボトルネックとなっている待機イベントの増加原因の分析と対策の策定(問題調査・対策検討)

Page 26: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 正常時 / 問題発生時のAWRレポートの比較分析

1. Databaseインスタンスの稼働状況を把握 (負荷傾向の確認)

26

Load Profile Per Second Per Transaction~~~~~~~~~~~~ --------------- ---------------

DB Time(s): 0.0 0.1DB CPU(s): 0.0 0.0Redo size: 4,034,803.8 2,499.9

Logical reads: 215,587.1 164.6Block changes: 6,833.0 9.5

Physical reads: 21.1 0.4Physical writes: 899.5 0.4

User calls: 9,897.6 6.8Parses: 26.3 6.8

Hard parses: 0.2 0.2W/A MB processed: 75.2 0.6

Logons: 0.3 1.0Executes: 3,011.2 1.7

Rollbacks: 805.0 0.0Transactions: 2,035.3

Load Profile Per Second Per Transaction~~~~~~~~~~~~ --------------- ---------------

DB Time(s): 24.5 0.0DB CPU(s): 6.8 0.0Redo size: 16,605,841.7 2,578.4

Logical reads: 1,181,640.3 183.5Block changes: 53,613.6 8.3

Physical reads: 109.4 0.0Physical writes: 3,002.2 0.5

User calls: 28,759.9 4.5Parses: 77.2 0.0

Hard parses: 0.3 0.0W/A MB processed: 125.0 0.0

Logons: 0.3 0.0Executes: 10,313.1 1.6

Rollbacks: 3,785.0 0.6Transactions: 6,440.4

正常時 問題発生時

正常時と比較して、Databaseインスタンスの処理状況がどのように変化しているかを確認する

Page 27: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 正常時 / 問題発生時のAWRレポートの比較分析

2. 待機イベントから問題発生時に発生しているボトルネックを特定 (問題特定)

27

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tota Wait % DBEvent Waits Time Avg(ms) time Wait Class------------------------------ ------------ ------ ------- ------ -----------DB CPU 3483.6 90.5log file sync 164,157 164.2 1 4.3 Commitdb file sequential read 78,151 156.3 2 4.1 User I/Ogc cr block 2-way 25,156 25.2 1 .6 Clustergc current block 2-way 20,982 20.1 1 .5 Clusterlibrary cache pin 60 .5 0 .0 Concurrencycontrol file sequential read 3,796 .5 1 .0 System I/OSQL*Net more data to client 202,116 .4 0 .0 NetworkIPC send completion sync 551 .2 0 .0 Otherenq: FB - contention 1,746 .0 0 .0 Concurrency

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tota Wait % DBEvent Waits Time Avg(ms) time Wait Class------------------------------ ------------ ------ ------- ------ -----------log file sync 100,157 2203.5 22 42.4 CommitDB CPU 2067.6 39.8db file sequential read 48,151 866.7 18 16.6 User I/Ogc cr block 2-way 25,156 25.2 1 .4 Clustergc current block 2-way 20,982 20.1 1 .4 Clusterlibrary cache pin 42 .4 0 .0 Concurrencycontrol file sequential read 1,717 .3 1 .0 System I/OSQL*Net more data to client 104,116 .3 0 .0 NetworkIPC send completion sync 451 .2 0 .0 Otherenq: FB - contention 1,625 .0 0 .0 Concurrency

正常時

問題発生時

正常時と比較して処理量の増加分等を考慮しても待機時間が大幅に増加している待機イベント、

1待機あたりの平均待機時間が増加している待機イベントを特定

Page 28: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 正常時 / 問題発生時のAWRレポートの比較分析

3. ボトルネックとなっている待機イベントの増加原因の分析と対策の策定(問題調査・対策検討)

28

問題の待機イベントの特定待機時間の発生起因の洗い出し・ 待機イベントはどのような処理で発生するか?・ 待機イベントの発生に関わるリソースや設定は何か?

ディスクI/O

CPU N/Wリソース

競合 ・・・

非効率な処理の実施 リソースの限界 設定の不備

関連するAWRの各セクションを参照し、問題となっている処理の抽出と原因に応じた対応を実施

AWRの関連する他のセクションOS情報を参照して判断

Page 29: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析の流れ

29

1. 一定期間の稼働情報のスナップショット間の差分情報取得とCSV形式で出力(情報取得)

2. 取得したCSVデータのグラフ化と傾向分析(問題及び予兆のチェック)

Page 30: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

1. 一定期間の稼働情報のスナップショット間の差分情報取得とCSV形式で出力 (情報取得)

30

select'"' ||

es.DBID || '","' ||es.INSTANCE_NUMBER || '","' ||bs.SNAP_ID || '","' ||to_char(bs.END_INTERVAL_TIME, 'yyyy') || '","' ||to_char(bs.END_INTERVAL_TIME, 'mm') || '","' ||to_char(bs.END_INTERVAL_TIME, 'dd') || '","' ||to_char(bs.END_INTERVAL_TIME, 'hh24') || '","' ||to_char(bs.END_INTERVAL_TIME, 'mi') || '","' ||to_char(bs.END_INTERVAL_TIME, 'ss') || '","' ||es.SNAP_ID || '","' ||

…from

DBA_HIST_SNAPSHOT bs,DBA_HIST_SNAPSHOT es,

CSVで出力できるようにSQLを左記のような形で作成

Page 31: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

2. 取得したCSVデータのグラフ化と傾向分析 (問題及び予兆のチェック)

31

スプレッドシート機能を使用してグラフ化

0

500,000

1,000,000

1,500,000

2,000,000

2,500,000

3,000,000

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

1

11

orcl1 - execute count

orcl2 - execute count

Page 32: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

2. 取得したCSVデータのグラフ化と傾向分析 (問題及び予兆のチェック)

32

0

1

2

3

4

5

6

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

1

11

db file sequential read - orcl1

db file sequential read - orcl2

0

1

2

3

4

5

6

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

15

11

db file sequential read - orcl1

db file sequential read - orcl2

11/1は1ブロックの平均物理読み込みにおける待機時間は平均 1ミリ秒~2ミリ秒で推移

14日後には1ブロックの平均物理読み込みにおける待機時間は平均 2 ~ 4ミリ秒で推移

劣化傾向の確認

例) 待機イベント db file sequential read の1待機あたりの待機時間の推移

Page 33: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

2. 取得したCSVデータのグラフ化と傾向分析 (問題及び予兆のチェック)

33

0

2,000

4,000

6,000

8,000

10,000

12,000

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

1

11

read by other session

rdbms ipc reply

enq: TX - index contention

direct path read

SQL*Net message to client

db file sequential read

log file sync

DB CPU

0

2,000

4,000

6,000

8,000

10,000

12,000

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

15

11

read by other session

rdbms ipc reply

enq: TX - index contention

direct path read

SQL*Net message to client

enq: TX - row lock contention

db file sequential read

log file sync

DB CPU

11/1には発生していなかった待機イベントが待機時間の多い上位待機イベントとして発生

発生原因を調査

例) フォアグラウンドプロセスにて待機時間の多い上位待機イベントの待機時間の推移

Page 34: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

4,000,000,000

6,000,000,000

8,000,000,000

10,000,000,000

12,000,000,000

14,000,000,000

16,000,000,000

18,000,000,000

0 1 2 3 4 5 6 7 8 9 1011121314151617181920212223 0 1 2 3 4 5 6 7 8 9 1011121314151617181920212223 0 1 2 3 4 5 6 7 8 9 1011121314151617181920212223

1 2 3

11

java pool

streams pool

large pool

shared pool

DEFAULT buffer cache

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

2. 取得したCSVデータのグラフ化と傾向分析 (問題及び予兆のチェック)

34

1日から3日にかけて時間の経過とともに特定のコンポーネントの増加、減少傾向を確認

要因原因を調査

例) SGA内の各コンポーネントサイズの推移

Page 35: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

- インスタンス負荷傾向把握のための取得項目の例と使用するDBA_HISTビュー

35

分析項目 DBA_HISTビュー 使用する列

SQL実行回数 DBA_HIST_SYSSTAT(STAT_NAME = execute count)

①STAT_NAME②VALUE

REDO生成量 DBA_HIST_SYSSTAT(STAT_NAME = redo size)

論理読み込みブロック数 DBA_HIST_SYSSTAT(STAT_NAME in db block gets, consistent gets)

物理読み込みブロック数 DBA_HIST_SYSSTAT(STAT_NAME = physical reads)

差分

差分

差分

差分

Page 36: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

- インスタンスボトルネック傾向把握のための取得項目の例と使用するDBA_HISTビュー

36

分析項目 DBA_HISTビュー 使用する列

待機イベント・CPU時間 DBA_HIST_SYSTEM_EVENT ①EVENT_NAME②TIME_WAITED_MICRO_FG

DBA_HIST_SYS_TIME_MODEL(STAT_NAME = DB CPU)

①STAT_NAME②VALUE

差分

Page 37: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

- インスタンスの性能傾向把握のための取得項目の例と使用するDBA_HISTビュー

37

分析項目 DBA_HISTビュー 使用する列

読み込みI/O性能 DBA_HIST_SYSTEM_EVENT(EVENT_NAME = db file sequential read)

①EVENT_NAME②TIME_WAITED_MICRO_FG③TOTAL_WAITS_FG

1待機あたりの平均待機時間= ② / ③

書き込みI/O性能 DBA_HIST_SYSTEM_EVENT(EVENT_NAME = log file parallel write)

コミット性能 DBA_HIST_SYSTEM_EVENT(EVENT_NAME = log file sync)

差分

差分

差分

Page 38: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

- インスタンスの性能傾向把握のための取得項目の例と使用するDBA_HISTビュー

38

分析項目 DBA_HISTビュー 使用する列

キャッシュフュージョン性能(Current ブロック)

DBA_HIST_SYSSTAT(STAT_NAME in (gc current blocks received

gc current block receive time))

①STAT_NAME②VALUE(~ receive time)③VALUE(~ received)

1転送あたりの平均時間= ② / ③

キャッシュフュージョン性能(CR ブロック)

DBA_HIST_SYSSTAT(STAT_NAME in (gc cr blocks received

gc cr block receive time))

差分

差分

Page 39: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 定期的なAWR情報の抽出と比較分析

- インスタンスのメモリ傾向把握のための取得項目の例と使用するDBA_HISTビュー

39

分析項目 DBA_HISTビュー 使用する列

SGAサイズ DBA_HIST_MEM_DYNAMIC_COMP(COMPONENT in (DEFAULT buffer cache,

java pool, large pool, shared pool, streams pool))

①COMPONENT②CURRENT_SIZE

PGAサイズ(セッションあたりの確保可能サイズ)

DBA_HIST_PGASTAT(NAME = global memory bound)

①NAME②VALUE

PGAサイズ(スナップ取得時の確保サイズ)

DBA_HIST_PGASTAT(NAME = total PGA allocated)

* SGAサイズの確認 (32Kバッファ・キャッシュ等のコンポーネントを使用している場合は、適宜条件を変更する)

Page 40: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 特定SQLの対象期間におけるAWR SQLレポートの分析の流れ

- 分析対象SQLのSQL_IDを指定し、AWR情報からSQLレポートを生成

40

1. SQL実行統計の分析 (SQLの改善点の確認)

2. SQL実行計画の分析 (改善のための実行計画の検討)

■ 対象インスタンスを選択しAWR SQLレポートを生成する場合SQL> @?/rdbms/admin/awrsqrpi.sql

■ 接続インスタンスのAWR SQLレポートを生成する場合SQL> @?/rdbms/admin/awrsqrpt.sql

* 「?」は$ORACLE_HOMEを示します

Page 41: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 特定SQLの対象期間におけるAWR SQLレポートの分析

1. SQL実行統計の分析

- AWR SQLレポート内のSQL実行統計から改善できるポイントを確認

41

Stat Name Statement Per Execution % Snap---------------------------------------- ---------- -------------- -------Elapsed Time (ms) 2,183,155 42.4 12.0CPU Time (ms) 1,025,266 19.9 11.1Executions 51,526 N/A N/ABuffer Gets 9,971,515 193.5 13.2Disk Reads 8,781,526 170.4 53.5Parse Calls 12 0.5 0.0Rows 51,526 1 N/AUser I/O Wait Time (ms) 1,154,366 22.4 N/ACluster Wait Time (ms) 2,382 0.0 N/AApplication Wait Time (ms) 1,141 0.0 N/AConcurrency Wait Time (ms) 0 N/A N/AInvalidations 0 N/A N/AVersion Count 1 N/A N/ASharable Mem(KB) 3,167 N/A N/A

どの部分に時間を要しているか等を確認する

バッファ読み込み数や物理ブロック読み込み数の状況を確認する

Page 42: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 特定SQLの対象期間におけるAWR SQLレポートの分析

2. SQL実行計画の分析 (改善のための実行計画の検討)

42

Execution Plan------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |------------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | | | 2 (0)| || 1 | NESTED LOOPS | | 1 | 12 | 2 (0)| 00:00:01 || 2 | TABLE ACCESS BY INDEX ROWID | EMP | 1 | | 1 (0)| 00:00:01 || 3 | NESTED LOOPS | | 1 | 1 | 1 (0)| 00:00:01 || 4 | TABLE ACCESS BY INDEX ROWID | IDX1_DEPT | 1 | 1 | 1 (0)| 00:00:01 || 5 | INDEX RANGE SCAN | DEPT | 1 | 1 | 1 (0)| 00:00:01 || 6 | INDEX RANGE SCAN | IDX1_EMP | 1 | 1 | 1 (0)| 00:00:01 |------------------------------------------------------------------------------------------------------------------

実行計画から実行統計で確認したポイントの改善余地の有無を確認する

改善の余地があった場合は、SQLチューニングを実施

Page 43: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

アジェンダ

一般的なチューニングの流れ

AWR / ASHの概要

AWRの活用方法

ASHの活用方法

ケーススタディ

43

1

2

3

4

5

Page 44: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH活用方法

• パフォーマンス分析ケースごとのASH活用方法

44

対象セッション特定するためのSQL

セッション単位の分析を実施するためのSQL

SQL単位の分析を実施するためのSQL

待機イベント単位の分析を実施するためのSQL

分析対象となるセッションが特定できていないため、確認できているインプット情報からセッションを特定するケース

分析対象となるセッションが特定できており、該当セッションの状態を詳細に分析するケース

分析対象SQLが特定できており、該当SQLの実行セッションの状態を分析するケース

分析対象待機イベントが特定できており、該当待機イベントでの待機が発生しているセッションの状態を分析するケース

Page 45: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH活用方法

45

対象セッション特定 特定のAPで使用されているDatabaseセッション情報の確認

アクティブな状態が記録されているDatabaseセッション情報の確認

PGAメモリまたは一時表領域の使用量が多いDatabaseセッション情報の確認

特定のSQLを実行しているDatabaseセッション情報の確認

特定の待機イベントで待機しているDatabaseセッション情報の確認

CPUを使用している時間が多いDatabaseセッション情報の確認

• パフォーマンス分析ケースごとのASH活用方法

Page 46: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH活用方法

46

セッション単位の分析 特定のDatabaseセッションで発生している待機イベントの確認

特定のDatabaseセッションで発生している待機イベントの状態の確認

特定のDatabaseセッションにおけるPGAメモリ、一時表領域使用状況の確認

特定のDatabaseセッションの待機と原因となっているブロッキング・セッションの確認

• パフォーマンス分析ケースごとのASH活用方法

Page 47: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH活用方法

47

SQL単位の分析 実行が記録されたSQL及びSQL実行計画識別子、発生待機イベントの確認

実行が記録されたSQLのPGAメモリ、一時表領域使用状況の確認

特定のDatabaseセッションで実行されたSQL及びSQL実行計画識別子の確認

特定のDatabaseセッションで特定のSQL実行時に発生していた待機イベントの確認

特定のDatabaseセッションで特定の待機イベントが発生時の実行SQL、SQL実行計画識別子の確認

特定のセッションでCPU使用中時の実行SQL、SQL実行計画識別子の確認

• パフォーマンス分析ケースごとのASH活用方法

Page 48: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH活用方法

48

待機イベント単位の分析 全Databaseセッションで記録されていた待機イベント発生傾向確認

全Databaseセッションで記録されていた待機イベント種別毎の発生傾向確認

特定のDatabaseセッションにおける待機イベント発生傾向確認

特定の待機イベントで待機していたDatabaseセッション情報の確認

特定の待機イベントの待機が記録されたSQLの確認

CPU使用中で記録されていたDatabaseセッション情報の確認

CPU使用中で記録されたSQLの確認

• パフォーマンス分析ケースごとのASH活用方法

Page 49: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

アジェンダ

一般的なチューニングの流れ

AWR / ASHの概要

AWRの活用方法

ASHの活用方法

ケース・スタディ

49

1

2

3

4

5

Page 50: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

問題概要

- サービスインから一定期間経過後、突然ある日を境に特定の処理の性能劣化が発生

- 該当の処理は定常的に実施されている処理

- 対象の処理についてはユーザからのヒアリングの結果、徐々に遅くなっていた模様

50

アプリケーション・ログから見たオペレーション数と平均レスポンス時間(ms)

0

50

100

150

200

250

300

350

0

10,000

20,000

30,000

40,000

50,000

60,000

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 2 4 6 8 10 12 14 16 18 20 22 24 26 28 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30

1 2 3

合計 / オペレーション数 平均 / 平均レスポンス(ms)

合計

オペ

レー

ショ

ン数 平

均レ

スポ

ンス

(ms)

大幅なレスポンス劣化&

スループットダウン

Page 51: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

事象発生前後のインスタンス状況の分析

- AWRレポートの上位待機イベントの比較を実施

51

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tota Wait % DBEvent Waits Time Avg(ms) time Wait Class------------------------------ ------------ ------ ------- ------ -----------DB CPU 3483.6 90.5log file sync 164,157 164.2 1 4.3 Commitdb file sequential read 78,151 156.3 2 4.1 User I/O…

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tota Wait % DBEvent Waits Time Avg(ms) time Wait Class---------------------------- ------------ ------ ------- ------ -----------DB CPU 2067.6 22.9direct path write temp 211,415 1268.8 6 13.8 USER I/O direct path read temp 214,222 1071.1 5 11.6 USER I/O…

正常時

問題発生時問題発生時の上位待機イベントから

一時表領域への読み込み、書き込みの待機が大幅に増加していることを確認

ただし、この段階では対象の処理のSQLが原因かは断定できない

Page 52: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

特定した待機イベントの要因SQLの特定

- ASHから特定した待機イベント発生時の実行SQLを検索

52

selectINST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENT, SESSION_STATE, count(1) "SESSION_COUNT"

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date(‘<対象期間開始日時>’,’yyyymmddhh24miss’)

and to_date(‘<対象期間終了日時>’,’yyyymmddhh24miss')and EVENT in (‘direct path write temp‘, ‘direct path read temp’)group by

INST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENT, SESSION_STATEorder by 1,2,3,6;

INST_ID SQL_ID PLAN_HASH_VALUE EVENT SESSION_STATE SESSION_COUNT------- ------------- --------------- ------------------------------- ------------- -------------

1 1fqg2t21f2gf4 3051237957 direct path write temp WAITING 151161 1fqg2t21f2gf4 3051237957 direct path read temp WAITING 141561 1gwhj4i32ujr5 1021473 direct path write temp WAITING 121 nr3u4535gv3fw 241672552 direct path read temp WAITING 6

特定のSQLにて対象の待機イベントが多数発生

Page 53: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

特定したSQLの実行計画 / 実行アプリケーション確認

- AWR情報から該当SQLのSQLレポートを抽出

53

SQLレポート

該当の処理で実行されていたSQLの場合、問題発生前の該当SQLの待機状態を確認

SQL> @?/rdbms/admin/awrsqrpi.sql

SQL実行統計

SQL実行計画

SQLテキスト

AP側の担当者に対象処理で実行されているSQLかどうかを確認

実行計画上、一時表領域へのI/Oが発生しうる箇所を確認

Page 54: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

問題発生前に対象SQL実行時に発生していた待機イベントを確認

- ASH情報から問題発生前の該当SQLの待機イベントの状態を確認

54

selectINST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENT, SESSION_STATE, count(1) "SESSION_COUNT"

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and SQL_ID = ‘1fqg2t21f2f4’group by

INST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENT, SESSION_STATEorder by 1,2,3,6;

INST_ID SQL_ID PLAN_HASH_VALUE EVENT SESSION_STATE SESSION_COUNT------- ------------- --------------- ------------------------------- ------------- -------------

1 1fqg2t21f2gf4 3051237957 ON CPU 411161 1fqg2t21f2gf4 3051237957 db file sequential read WAITING 561 1fqg2t21f2gf4 3051237957 SQL*Net message to client WAITING 33

大半がCPU使用であり、問題発生時に確認された待機イベントの発生は見られない

Page 55: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

該当SQLの問題発生前後の実行計画の状況の確認

- AWR情報から対象SQLの実行計画の変動有無を確認

55

selectdistinct INST_ID, SQL_ID, SQL_PLAN_HASH_VALUE

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss‘)and SQL_ID = ‘1fqg2t21f2f4’;

INST_ID SQL_ID PLAN_HASH_VALUE ------- ------------- ---------------

1 1fqg2t21f2gf4 3051237957

INST_ID SQL_ID PLAN_HASH_VALUE ------- ------------- ---------------

1 1fqg2t21f2gf4 3051237957

正常時 問題発生時

SQL実行計画は問題発生前後で変化なし

Page 56: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

該当SQL実行時のPGAメモリ及び一時表領域の状態の確認

- ASH情報から対象SQL実行時のPGAメモリ、一時表領域の確保サイズを確認

56

selectINST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, max(PGA_ALLOCATED) “MAX_PGA_ALLOCATED”,max(TEMP_SPACE_ALLOCATED) "MAX_TEMP_ALLOCATED"

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and SQL_ID = ‘1fqg2t21f2f4’group by INST_ID, SQL_ID, SQL_PLAN_HASH_VALUE,order by 1,4,5,2,3;

INST_ID SQL_ID MAX_PGA_ALLOCATED MAX_TEMP_ALLOCATED------- ------------- ----------------- ------------------

1 1fqg2t21f2gf4 9045376 0

正常時

INST_ID SQL_ID MAX_PGA_ALLOCATED MAX_TEMP_ALLOCATED------- ------------- ----------------- ------------------

1 1fqg2t21f2gf4 9437184 4088768

問題発生時

確保しているPGAサイズが若干増加し、使用している一時表領域が発生

Page 57: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

- AWR情報からPGAメモリの割り当て可能サイズの推移を確認

- AWR情報からPGAメモリの割り当てサイズの推移を確認

57

イン

スタ

ンス

のス

ナッ

プ取

得時

の総

PG

Aサ

イズ

(MB

)

セッ

ショ

ンあ

たり

の割

り当

て可

能サ

イズ

(KB

)

0

500

1,000

1,500

2,000

2,500

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 2 4 6 8 10 12 14 16 18 20 22 24 26 28 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30

1 2 3

total PGA allocated

総PGAサイズが徐々に増加

問題発生時に総PGAサイズがPGA_AGGREGATE_TARGETの設定値に到達

0

500

1,000

1,500

2,000

2,500

1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 2 4 6 8 10 12 14 16 18 20 22 24 26 28 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30

1 2 3

global memory bound

global memory bound

割り当て可能PGAサイズが徐々に低下

インスタンス及びセッションのPGAメモリの状況を確認

Page 58: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

原因と対処

- 対象の処理ではソートを実施しているが、サービスイン後3カ月の間はデータが蓄積されていき、1処理あたりの処理件数が増加する (= 必要なPGAサイズが増加)

- 徐々に1セッションあたりの確保PGAサイズが増加していった結果、インスタンスの総PGAサイズがPGA_AGGREGATE_TARGETに到達

- 上記の結果、処理で必要なPGA領域はさらに必要となるが、割り当てが行われず、一時表領域への読み込み、書き出しが行われ、性能が劣化

- 3ヶ月間のデータ増加を考慮したPGA_AGGREGATE_TARGETのサイズ設定により、1セッションあたりのPGAサイズを必要な分確保させることで対処

58

Page 59: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース1】 定常的に実行される処理が急激に遅延

まとめ

項目 内容

問題概要サービスインから2ヶ月半経過後、処理のレスポンスが劣化対象の処理は定常的に実施されており、徐々にレスポンスが劣化する傾向にあった

AWR/ASHの活用

[AWR] Top 10 Foreground Events by Total Wait Timeで待機イベントの状況比較[ASH] 発生していた待機イベントが記録されていたSQLの特定[ASH] 特定したSQLの問題発生前の記録されていた待機イベントの確認[ASH] 特定したSQLの実行計画の変動を有無を確認[ASH] 特定したSQL実行時に確保されるPGA及び一時表領域サイズの確認[AWR] DBA_HIST_PGASTATから1セッションでの確保可能PGAサイズの確認[AWR] DBA_HIST_PGASTATからスナップ取得時の確保総PGAサイズの確認

原因と対処PGA_AGGREGATE_TARGETが適切な設定ではなく、一時表領域への書き出しが発生PGA_AGGREGATE_TARGETのサイズを適正サイズに設定し、対処

59

Page 60: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース2】バッチ処理の長時間走行

- 長くても3時間程度で終わっていたバッチ処理が5時間以上かかった

- バッチ処理内で実行されているSQLは“INSERT INTO 表 SELECT * FROM 表”によるデータのローディング

- 処理件数が増えると処理時間も増える傾向はあるものの、処理件数が特に多かった6日より、12日の方が処理時間が長い

60

特に処理時間が長かった日

処理件数が特に多かった日

問題概要

Page 61: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース2】バッチ処理の長時間走行

- 両日ともにdb file sequential read が待機の上位に出てきている

- 負荷傾向に大きな差異はない(バッチ処理が長かった日が特に負荷が高いということはない)

61

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Total Wait % DBEvent Waits Time Avg(ms) time Wait Class------------------------ ------------ ----- ------- ------ ----------db file sequential read 742,021 5,608 8 53.7 User I/O DB CPU 1,673 16.0 db file scattered read 622,749 1,159 2 11.0 User I/Olog file sync 39,701 510 13 4.8 Commitdirect path read 743,227 427 1 4.1 User I/O...

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Total Wait % DBEvent Waits Time Avg(ms) time Wait Class------------------------ ------------ ----- ------- ------ ----------db file sequential read 727,180 5,551 8 53.1 User I/O DB CPU 1,673 1656 15.9 db file scattered read 610,294 1147 2 10.9 User I/Olog file sync 38,906 504 13 4.8 Commitdirect path read 728,362 422 1 4.0 User I/O ...

正常時

問題発生時

正常時と問題発生時のAWRレポートを比較

Page 62: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

処理中のAWRレポートの待機イベントを確認

【ケース2】バッチ処理の長時間走行

62

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Total Wait % DBEvent Waits Time Avg(ms) time Wait Class------------------------ ------------ ----- ------- ------ ---------db file sequential read 802,667 5,600 7 50.4 User I/O db file scattered read 521,189 2,111 4 19.0 User I/O DB CPU 1,251 11.3 log file sync 186,940 1,134 6 10.2 Commitlog file parallel write 185,912 714 4 6.4 User I/O...

Top 10 Foreground Events by Total Wait Time~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Total Wait % DBEvent Waits Time Avg(ms) time Wait Class------------------------ ------------ ----- ------- ------ ---------db file sequential read 742,021 5,608 8 53.7 User I/O DB CPU 1,673 16.0 db file scattered read 622,749 1,159 2 11.0 User I/Olog file sync 39,701 510 13 4.8 Commitdirect path read 743,227 427 1 4.1 User I/O...

問題発生時(処理開始直後の30分) 問題発生時(処理終了前の30分)

バッチ処理時間が長かった日はI/O系の待機イベントが延々続いている

Page 63: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース2】バッチ処理の長時間走行

- ASHからバッチ処理実行セッションに絞って待機イベントを集計するとdb file sequential read が多い

63

INSTANCE_NUMBER SESSION_ID SESSION_SERIAL# EVENT SESSION_COUNT--------------- ---------- --------------- ---------------------------- -------------

1 1501 14317 log file switch completion 11 1501 14317 direct path read 31 1501 14317 direct path read temp 31 1501 14317 direct path write temp 41 1501 14317 db file parallel read 61 1501 14317 log buffer space 111 1501 14317 db file scattered read 1451 1501 14317 db file sequential read 3965

select INSTANCE_NUMBER, SESSION_ID, SESSION_SERIAL#, nvl(EVENT, SESSION_STATE) "EVENT", count(1) "SESSION_COUNT"from DBA_HIST_ACTIVE_SESS_HISTORYwhere SAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and INSTANCE_NUMBER = <INSTANCE_NUMBER> and SESSION_ID = <SESSION_ID> and SESSION_SERIAL# = <SESSION_SERIAL#>group by INSTANCE_NUMBER, SESSION_ID, SESSION_SERIAL#, nvl(EVENT, SESSION_STATE)order by 1,5,4,2,3;

db file sequential read待機イベントが多数発生

特定のDatabaseセッションにおける待機イベントの 詳細情報の確認

Page 64: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース2】バッチ処理の長時間走行

- db file sequential read 待機の場合、CURRENT_OBJ# 列からオブジェクト番号が特定できるので対象オブジェクトを確認

64

SAMPLE_TIME INST_ID SESSION_ID SESSION_SERIAL# EVENT P1TEXT P1 P2TEXT P2 P3TEXT P3 CURRENT_OBJ# ------------ ------- ---------- --------------- ------------------------ ------ ---- ------ ----- ------ --- ------------01:28:23.870 1 1501 14317 db file sequential read file# 152 block# 28646 blocks 1 10005501:28:32.864 1 1501 14317 db file sequential read file# 153 block# 18645 blocks 1 10005501:28:33.864 1 1501 14317 db file sequential read file# 152 block# 28648 blocks 1 10005501:28:34.793 1 1501 14317 db file sequential read file# 156 block# 9068 blocks 1 100055

特定のオブジェクトに集中

select SAMPLE_TIME,INST_ID,SESSION_ID,SESSION_SERIAL#,EVENT,P1TEXT,P1,P2TEXT,P2,P3TEXT,P3,CURRENT_OBJ#from GV$ACTIVE_SESSION_HISTORYwhere SAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and EVENT= 'db file sequential read'and INST_ID = <INST_ID> and SESSION_ID = <SESSION_ID> and SESSION_SERIAL# = <SESSION_SERIAL#>order by 1;

特定のDatabaseセッションにおける待機イベントの 詳細情報の確認

Page 65: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース2】バッチ処理の長時間走行

[参考] ASHの対象オブジェクトの特定方法

- ASHでは以下の条件の時に CURRENT_OBJ# 列に対象オブジェクト番号が入る

• セッションが待機状態

• 待機タイプがApplication,Cluster, Concurrency, User I/O の場合

65

select OWNER,OBJECT_NAME,SUBOBJECT_NAMEfrom DBA_OBJECTSwhere OBJECT_ID = <オブジェクト番号>

オブジェクト番号からオブジェクト名を特定する方法

INSERT先の表の索引と判明

Page 66: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース2】バッチ処理の長時間走行

- db file sequential read が待機が多く見られた索引は 遅延が発生した数日前に付与されたものと判明

- 索引のサイズが大きく、SQL実行中に索引ブロックの読み込みとデータベースバッファキャッシュからのキャッシュアウトが繰り替えされていたため、頻繁に読み込みが生じていた

- 対象の索引を削除してバッチ処理後に索引を再作成することで回避

66

索引が付与された日

特に処理時間が長かった日

原因と対処

Page 67: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース2】バッチ処理の長時間走行

まとめ

項目 内容

問題概要バッチ処理の遅延バッチ処理内で実施されている SQLは “INSERT INTO 表 SELECT * FROM 表”

AWR/ASHの活用[AWR] 問題発生時の待機イベントの全体傾向確認[ASH] 特定のDatabaseセッションにおける待機イベント発生傾向確認[ASH] 特定のDatabaseセッションにおける待機イベントの詳細情報の確認

原因と対処INSERT対象表に付与された索引が大きく、SQL実行中にI/Oとキャッシュアウトが繰り返されたためバッチ処理前に索引を削除して再作成することで回避

67

Page 68: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース3】I/O負荷高騰

- これまで問題なく稼働していたアプリケーションのレスポンスが急に悪くなった

- I/O系の待機イベントの平均待機時間(Avg wait)が大きくなっている

68

Top 10 Timed Foreground Events~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Avgwait % DB

Event Waits Time(s) (ms) time Wait Class------------------------- ------ ----------- ------ ------ ----------db file scattered read 72,239 2,500 36 27.1 User I/Odirect path write temp 7,000 1,404 199 14.9 User I/ODB CPU 1,096 11.9db file sequential read 32,600 1,037 30 11.3 User I/Odirect path read 10,360 700 56 6.9 User I/O...

Top 10 Timed Foreground Events~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Avgwait % DB

Event Waits Time(s) (ms) time Wait Class------------------------ ------- ----------- ------ ------ ----------direct path read 41,432 141 3 42.4 User I/ODB CPU 138 41.6db file sequential read 24,520 44 2 13.3 User I/Ogc cr block 2-way 26,116 4 0 1.1 Clustergc current block 2-way 14,740 2 0 .7 Cluster

正常時

問題発生時

例えば単一ブロック読み込みの待機イベントであるdb file sequential read が 30ミリ秒と遅くなっている

問題概要

Page 69: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース3】I/O負荷高騰

- AWR の Instance Activity Stats から Database 起因のI/O量を確認できる

69

Instance Activity Stats DB/Inst: TEST01/TEST011 Snaps: 12345-12346-> Ordered by statistic name

Statistic Total per Second per Trans-------------------------------- ------------------ -------------- -------------...physical read total IO requests 380,004 212.8 61.7physical read total bytes 1,256,560,253,152 697,680,806.7 2.0150100E+08physical write total IO requests 283,193 150.2 45.1physical write total bytes 267,419,868,772 148,479,732.1 42,883,237.0...

Instance Activitiy Stats

このケースでは、正常時と I/O負荷高騰時で顕著な I/O回数、サイズの増減がなかった

physical read total IO requests : DISK読み取りの要求数physical write total IO requests : DISK書き込みの要求数Physical read total bytes : DISK読み取りの合計サイズPhysical write total bytes : DISK書き込みの合計サイズ

データベースのI/Oが増えたかどうか確認

Page 70: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース3】I/O負荷高騰

[参考] I/O量が増えた場合に有効な情報

- 正常時と I/O量増加時を比較してI/Oが増えている要因を特定することができる

- 複合した IOStat by Function/Filetype というセクションもある

70

Reads: Reqs Data Writes: Reqs Data Waits: AvgFunction Name Data per sec per sec Data per sec per sec Count Tm(ms)--------------- ------- ------- ------- ------- ------- ------- ------- -------Buffer Cache Re 53.9G 1384.6 30.8165 0M 0.0 0M 2293.5K 0.3DBWR 0M 0.0 0M 4G 237.5 2.27843 0 N/ALGWR 0M 0.0 0M 1.8G 173.7 1.03067 284K 0.1Others 769M 30.8 .429124 181M 9.9 .101003 60.5K 1.8Direct Reads 383M 26.3 .213725 0M 0.0 0M 0 N/ADirect Writes 0M 0.0 0M 34M 1.4 .018972 0 N/ATOTAL: 55.1G 1441.8 31.4594 6G 422.5 3.42908 2637.9K 0.3

IOStat by Function summary (機能ごとのI/O情報)

Reads: Reqs Data Writes: Reqs Data Waits: AvgFunction Name Data per sec per sec Data per sec per sec Count Tm(ms)--------------- ------- ------- ------- ------- ------- ------- ------- -------Data File 120.6G 1532.2 68.9372 4.1G 245.6 2.34706 0.2 13.2Log File 0M 0.0 0M 1.8G 173.7 1.02788 N/A N/AControl File 676M 24.1 .377227 82M 3.0 .045758 0.1 N/ATemp File 15M 0.1 .008370 16M 0.1 .008928 0.9 N/ATOTAL: 121.3G 1556.5 69.3228 6G 422.3 3.42964 0.2 13.2

IOStat by Filetype summary (ファイルタイプごとの I/O情報)

Page 71: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース3】I/O負荷高騰

I/O系の待機イベントのヒストグラムを確認する

71

Wait Event Histogram DB/Inst: TEST01/TEST011 Snaps: 12345-12346…

% of Waits-----------------------------------------------

TotalEvent Waits <1ms <2ms <4ms <8ms <16ms <32ms <=1s >1s-------------------------- ----- ----- ----- ----- ----- ----- ----- ----- -----…db file scattered read 70.0K 70.6 .9 13.9 2.1 7.1 2.4 2.9 .1db file sequential read 34.8K 88.0 1.0 2.3 5.3 2.1 .5 .8 .1…

Waits64ms

Event to 2s <32ms <64ms <1/8s <1/4s <1/2s <1s <2s >=2s-------------------------- ----- ----- ----- ----- ----- ----- ----- ----- -----db file scattered read 2144 96.9 1.1 .8 .6 .3 .1 .0 .1db file sequential read 280 99.1 .3 .2 .2 .1 .0 .0 .1…

Wait Event Histogram

平均的に30ミリ秒程度レスポンスに時間がかかっているのではなく、

一部の I/O だけが非常に遅く平均レスポンス時間を引き上げている傾向

システム全体のI/Oが増加した結果、ストレージ負荷が限界になっているのではないと考える

Page 72: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース3】I/O負荷高騰

- OSのI/O統計(iostat) からsvctm(レスポンス時間)が非常に遅い DISKが1本あることを確認

- この DISKへのアクセスが全体のI/OのAvg Wait を引き上げていた

- DISK故障と判断し、問題のDISKを ASM DISKGROUP からDROPしたところ問題が解消 (後日DISKを交換)

72

ほとんどのDISKの svctm が数ミリ秒の中、svctm が200ミリ秒近くに高騰していたDISKがあった

OSの I/O統計(iostat より)

原因と対処

Page 73: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース3】I/O負荷高騰

まとめ

項目 内容

問題概要 I/O系の待機イベントの平均待機時間増加による性能低下

AWR/ASHの活用[AWR] データベースのI/Oが増えたかどうか確認[AWR] I/O系の待機イベントのヒストグラムを確認する

原因と対処 DISK故障問題DISKを使用しないようにする

73

Page 74: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース4】 実行時間が1秒以下のSQLの調査

- 運用管理において30分に1回、特定SQLの秒間実行回数を取得しているが、まれに秒間実行回数が低下する時がある

- 該当の処理で実行しているSQLはINSERT文で処理時間が短く、 AWRレポートの 『SQL Ordered by xxx』セクションには対象のSQLは出力されていない

74

秒間実行回数が低い時間

問題概要

Page 75: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース4】 実行時間が1秒以下のSQLの調査

- AWRレポートの 『SQL Ordered by xxx』セクションに表示されていないSQLでもDBA_HIST_SQLSTAT に統計が保存されている場合がある

- 対象のアプリケーションから実行されているSQLの SQL_IDの統計がDBA_HIST_SQLSTAT に残っていたため分析を実施

- 秒間実行回数が低下している時は、1実行あたりの ElapsedTImeが長くなり、IOWAITも増加していた

75

DBA_HIST_SQLSTAT の列の意味Executions : 実行回数ELAPSED_TIME_DELTA : SQL実行時間 (単位マイクロ秒)IOWAIT_DELTA : I/O待機時間 (単位マイクロ秒)

秒間実行回数が低い時間

DBA_HIST_SQLSTATからの解析

Page 76: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース4】 実行時間が1秒以下のSQLの調査

[参考] DBA_HIST_SQLSTAT ビューで時間を確認できる列

列名

CPU_TIME_DELTAこのカーソルによって、解析、実行またはフェッチのために使用されたCPU時間のデルタ値(マイクロ秒)

ELAPSED_TIME_DELTAこのカーソルによって、解析、実行またはフェッチのために使用された経過時間のデルタ値(マイクロ秒)

IOWAIT_DELTA ユーザーI/O待機時間のデルタ値(マイクロ秒)

CLWAIT_DELTA クラスタ待機時間のデルタ値(マイクロ秒)

APWAIT_DELTA アプリケーション待機時間のデルタ値(マイクロ秒)

CCWAIT_DELTA 同時実行性待機時間のデルタ値(マイクロ秒)

PLSEXEC_TIME_DELTA PL/SQL実行時間のデルタ値(マイクロ秒)

JAVEXEC_TIME_DELTA Java実行時間のデルタ値(マイクロ秒)

76

Page 77: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース4】 実行時間が1秒以下のSQLの調査

対象モジュールのセッションにおける待機イベント種別毎の発生傾向確認

- ASH から特定の時間帯の WAIT_CLASS の傾向を確認

- 普段はV$ACTIVE_SESSION_HISTORY のエントリには待機があまり出ていないが待機イベントが捕捉される回数が増えている (特に User I/O)

77

INST_ID WAIT_CLASS SESSION_COUNT---------- -------------- -------------

1 User I/O 61 Cluster 121 Other 16

INST_ID WAIT_CLASS SESSION_COUNT---------- -------------- -------------

1 Application 41 Other 131 Cluster 181 User I/O 30

select INST_ID, nvl(WAIT_CLASS, SESSION_STATE) "WAIT_CLASS", count(1) "SESSION_COUNT"from GV$ACTIVE_SESSION_HISTORYwhere SAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and MODULE like ‘MODULE10%'group by INST_ID, nvl(WAIT_CLASS, SESSION_STATE)order by 1,3,2;

正常時 秒間実行回数低下時

Page 78: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース4】 実行時間が1秒以下のSQLの調査

- AWR (DBA_HIST_SQLSTAT) や ASH からI/Oに問題がある可能性が高いと判断

- その後 iostat 等の調査から問題発生時は I/Oレスポンス時間が大きくなっていることを確認

- あるSQLの初回実行時に I/O回数(IOPS)が増加している傾向があったため、事前に実行してバッファキャッシュに乗せておく対処を実施

78

原因と対処

Page 79: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

【ケース4】 実行時間が1秒以下のSQLの調査

まとめ

項目 内容

問題概要アプリケーションの特定処理の秒間実行回数が低下したSQLの1回あたりの実行時間が数ミリ秒増加していた

AWR/ASHの活用[AWR] DBA_HIST_SQLSTATからの解析[ASH] 全DBセッションで記録されていた待機イベント種別毎の発生傾向確認

原因と対処AWR/ASH から I/Oに問題がある点を絞り込みあるSQLの初回実行時にI/O回数が増加し、I/Oレスポンス時間が長くなる傾向が見られたため、事前実行することで回避

79

Page 80: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

本日の目的とゴール

80

• AWR/ASHの概要を理解する

• 性能課題解決のアプローチを知る

• Database運用管理にAWR/ASHの活用を埋め込むイメージをもつ

目的

性能課題解決に向けてAWR/ASHを活用することができるようになる

ゴール

Page 81: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

POCO : The Power of Cloud by Oracle

81

POCO:The Power of Cloud by Oracle

Page 82: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

Appendix

82

Page 83: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

Oracle Enterprise Manager を使ったAWR活用方法

• 正常時 / 問題発生時のAWRレポートの比較分析- AWRベースラインの活用

• AWRベースラインとは?

- ある期間のシステム負荷

- 期間は開始/終了スナップショットで指定。差分がベースライン(システム負荷)になる

- 利点:他の期間と比較し、現在の負荷を正しく判断できる

83

12:004/11 4/12

ベースラインA

スナップ7... スナップ10

データベース負荷

12:005/11 5/12

ベースラインB

スナップ37... スナップ40

データベース負荷ベースライン同士の

比較が可能

Page 84: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

Oracle Enterprise Manager を使ったAWR活用方法

• 正常時 / 問題発生時のAWRレポートの比較分析- AWRベースライン

• 他のスナップショットと比較するために保持されている特定期間のスナップショットのセット

• ベースラインに含まれるスナップショットはAWRの自動消去プロセスから除外され、無期限に保持される

• 使用可能なベースラインの種類

- 固定ベースライン

• 既存のAWRスナップショットを利用したベースライン

- 変動ウィンドウ・ベースライン

• AWR保存期間内に存在するすべてのAWRデータに対応する動的ベースライン

• 過去n日間の移動平均のベースラインを自動作成/自動更新(デフォルトではAWR保存期間と同じ8日)

- ベースライン・テンプレート

• 開始/終了を時間で指定(未来の時間も指定可)、定期的に自動作成

- 1回のみ、もしくは繰り返し処理を選択可能

• 例)毎週月曜日の10:00~12:00、システムメンテナンス直後の祝日、等

84

Page 85: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR活用方法

• 正常時 / 問題発生時のAWRレポートの比較分析「2.待機イベントから問題発生時に発生しているボトルネックを特定(問題特定)」

85

- AWR期間比較レポート• 2つの期間のパフォーマンス比較を

することが可能• 比較するプログラムを独自で作成

する必要がない

- 適応メトリックしきい値• ベースラインからメトリックしきい値

を設定する• 「固定しきい値」以外の設定が可能

Page 86: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

Oracle Enterprise Manager を使ったASH活用方法

• Active Session Historyによるセッションの可視化

86

SQL> select username, event,

sid from v$session・・・

手作業でのスクリプト作成、実行

収集データの管理、グラフ化

高負荷時の上位SQLや上位セッションを短時間で特定

Oracle Enterprise Managerが自動的に実施

• データベースセッションの負荷に関する情報(wait event)を低負荷で取得

• リアルタイムでグラフ表示

調べたい時間帯を選択すると、

選択した期間の上位SQLや上位セッション等へドリルダウン

Page 87: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ADDM

• 自動データベース診断モニター(ADDM)- 一定期間のパフォーマンス問題を診断するエンジン

• 診断のタイミングと期間- AWRスナップショットの定期取得のタイミングで起動し

直前の取得間隔における性能を診断

- 任意の期間を指定して診断させることも可能

• 診断内容- 発見された症状、その原因と対処策、影響を

受けたセッションやSQL等を提示

87

ADDMの課題点→ 診断結果が「いつも通り」なのか「いつもと違う

(問題がある)」のか判別が難しい

Page 88: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

期間比較ADDM

88

AWRスナップショット期間1(05/24 22:00~23:00)

AWRスナップショット期間2(05/17 22:00~23:00)

診断結果期間比較ADDM

カーソル共有の問題

SQLの性能劣化

I/Oボトルネック

SGAサイズの不足

• 2つのAWRスナップショット期間を比較し診断

• パフォーマンス変化の原因を特定し、影響を測定し、関係づけ

- 原因: ワークロードの変化、データベース構成の変更

- 影響: SQL性能の低下、リソース(CPU, I/O, メモリ, インターコネクトのスループット等)のひっ迫

• 対応方法の推奨と、それによる改善の度合いを提示

Page 89: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

データベースの可視化機能想定利用シーン

どんなときに利用するか? 何ができるか? 利用する目的と対象は?

AWR, ADDM データベースインスタンスの性能情報を収集するとき。デフォルトの設定では1時間毎に自動収集され保存される。

取得されている2時点間(例えば、今日の13:00-14:00)におけるパフォーマンスに関連した統計情報を調べることができる。例えば、負荷の高いSQLはどれか?どの待機が多いか(データファイルからの読み込みか、メモリ内のリソースの競合か)等。

データベースインスタンスの処理全体の分析。他のチューニングツールが読み込む元の情報の保存。

ASH(Active Session History)

「今、データベースの応答が遅い」というとき。

今アクティブなデータベースセッションに関する情報を可視化できる。特定の期間(例えば10分前から現時点まで)における高負荷なSQL、セッションを簡単に特定できる。

「現在進行形のデータベースの性能問題」の原因切り分けに利用。データベースインスタンスの処理全体を対象に適用し、特定のSQL、セッションまで切り分け。

リアルタイムSQL監視 「現在、データベースで実行中の処理(個別SQL)」の状況を確認したいとき。個別SQLの実行計画のボトルネックを確認したいとき。

一定時間以上(通常5秒以上)データベース側で処理中のSQLの実行ステップの確認。現在、どのステップを実行中か、実行ステップのボトルネックはどこかを簡単に特定。

個別SQLの実行状況の確認。個別SQLのチューニング。

89

Page 90: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR Warehouse

90

• AWRはOracle Database 10g以降事実上のパフォーマンス・リポジトリ

• しかし、AWRデータの保存期間のデフォルトとなっている8日間では、長期間に跨るパフォーマンス診断を行えない(例: 今期と前期の期末処理におけるパフォーマンスを比較する)

• 長期間保存できるようにAWR保存期間を変更すると、本番環境のストレージ・オーバーヘッドとコストを増やしてしまう

CRMFinance Supply Chain

0%

30%

60%

90%

120%

0%

30%

60%

90%

120%

0%

30%

60%

90%

120%

Page 91: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR Warehouse

• 長期間AWRデータを保持するためのCentral AWRリポジトリを構成

• AWR WarehouseへAWRスナップショットを収集する対象データベース(AWRソース・データベース)を登録

• ETLジョブ(Oracle Data Pumpを利用)がソース・データベースからCentral AWRリポジトリへスナップショットを転送

• 設定可能なAWRデータの保存期間は、年単位または永久

91

アーキテクチャ

Page 92: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR Warehouse

92

• すべてのAWR機能を長期AWRデータを基に利用可能

–パフォーマンス・ホーム

– トップ・アクティビティ

– AWRレポート

– ASH分析

–期間比較ADDM

–期間比較レポート

AWRソース・データベースに対するランタイム・オーバーヘッドはゼロ

Page 93: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR Warehouse

Central AWRダッシュボード・メニュー

93

• Add/RemoveAWRソース・データベースを追加/削除

• ASH分析 / AWRレポート/ 期間比較 / パフォーマンス・ホームAWRソース・データベースに対して各AWR機能画面へ遷移

• Enable/Disable Snapshot UploadAWRソース・データベースからCentral AWRリポジトリへのスナップショットのアップロードを有効/無効化

• Upload Snapshots nowAWRソース・データベースからCentral AWRリポジトリへスナップショットの手動アップロード

Page 94: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

AWR Warehouse

機能の有効化

• サポートされるAWRソース・データベース- Oracle Database 10.2、11.1および11.2

- Oracle Database 12.1 (CDB & non-CDBのSIおよびRAC)

• AWRソース・データベースのバージョンはCentral AWRリポジトリ・データベースと同じかまたはそれより以前のデータベース・バージョンである必要がある

• したがってOracle DB 12.1をAWR Warehouseへ登録する場合はCentral AWRリポジトリ・データベースにはOracle DB 12.1.0.2を使用する

- AWRソース・データベースもAWR Warehouseへ登録するデータベースはOracle Enterprise Managerへターゲットとして追加しておく

94

Page 95: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

Oracle Enterprise Manager Database Express

基本管理機能とパフォーマンス診断・チューニングに特化したDB付属ツール

95

· 特別なインストールは不要

- DB内のXDBサーバーを利用

- 利用に際し追加のミドルウェア・コンポーネントは不要

- データベース作成時に構成可能

· 軽量・小さなフットプリント

- ディスク使用量: 20MB程度

- DBサーバーはSQLの実行のみ

- UI画面の生成は100%ブラウザ側で処理を実行

Page 96: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

DBA_HISTビューからの差分情報取得

• スナップ間差分を抽出するための考慮事項

96

select'"' ||

bsn.SNAP_ID || '","' ||to_char(bsn.END_INTERVAL_TIME,'yyyy') || '","' ||

…esn.SNAP_ID || '","' ||

…esy.STAT_NAME || '","' ||(esy.VALUE - bsy.VALUE) || '"'

fromDBA_HIST_SNAPSHOT bsn, DBA_HIST_SNAPSHOT esn, DBA_HIST_SYSSTAT bsy, DBA_HIST_SYSSTAT esy

where bsn.DBID = esn.DBID and bsn.INSTANCE_NUMBER = esn.INSTANCE_NUMBER and bsn.END_INTERVAL_TIME = esn.BEGIN_INTERVAL_TIMEand bsn.STARTUP_TIME = esn.STARTUP_TIMEand bsn.DBID = bsy.DBID and bsn.INSTANCE_NUMBER = bsy.INSTANCE_NUMBER and bsn.SNAP_ID = bsy.SNAP_IDand esn.DBID = esy.DBID and esn.INSTANCE_NUMBER = esy.INSTANCE_NUMBER and esn.SNAP_ID = esy.SNAP_IDand bsy.STAT_NAME = esy.STAT_NAME and bsy.STAT_NAME = 'execute count'and bsn.END_INTERVAL_TIME >= to_date('201505170000','yyyymmddhh24mi')and esn.END_INTERVAL_TIME <= to_date('201505180002','yyyymmddhh24mi');

例) 05/17 ~ 05/18の1時間毎のSQL実行回数の差分を取得するSQL

DBA_HIST_SNAPSHOT bsn : 差分比較時の前スナップ情報取得DBA_HIST_SNAPSHOT esn : 差分比較時の後スナップ情報取得DBA_HIST_SYSSTAT bsy : 差分比較時の前スナップ内データ取得DBA_HIST_SYSSTAT esy : 差分比較時の後スナップ内データ取得

Page 97: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

DBA_HISTビューからの差分情報取得

• スナップ間差分を抽出するための考慮事項

97

例) 05/17 ~ 05/18の1時間毎のSQL実行回数の差分を取得するSQL

select'"' ||

bsn.SNAP_ID || '","' ||to_char(bsn.END_INTERVAL_TIME,'yyyy') || '","' ||

…esn.SNAP_ID || '","' ||

…esy.STAT_NAME || '","' ||(esy.VALUE - bsy.VALUE) || '"'

fromDBA_HIST_SNAPSHOT bsn, DBA_HIST_SNAPSHOT esn, DBA_HIST_SYSSTAT bsy, DBA_HIST_SYSSTAT esy

where bsn.DBID = esn.DBID and bsn.INSTANCE_NUMBER = esn.INSTANCE_NUMBER and bsn.END_INTERVAL_TIME = esn.BEGIN_INTERVAL_TIMEand bsn.STARTUP_TIME = esn.STARTUP_TIMEand bsn.DBID = bsy.DBID and bsn.INSTANCE_NUMBER = bsy.INSTANCE_NUMBER and bsn.SNAP_ID = bsy.SNAP_IDand esn.DBID = esy.DBID and esn.INSTANCE_NUMBER = esy.INSTANCE_NUMBER and esn.SNAP_ID = esy.SNAP_IDand bsy.STAT_NAME = esy.STAT_NAME and bsy.STAT_NAME = 'execute count'and bsn.END_INTERVAL_TIME >= to_date('201505170000','yyyymmddhh24mi')and esn.END_INTERVAL_TIME <= to_date('201505180002','yyyymmddhh24mi');

* スナップショットの取得時間は、数秒のズレが発生するため、終了日時の設定の際には1分~2分程度プラスした時間とする

DBA_HIST_SNAPSHOT.END_INTERVAL_TIME がスナップショットの取得時間となるため、

分析対象期間の開始、終了日時をそれぞれ指定

Page 98: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

DBA_HISTビューからの差分情報取得

• スナップ間差分を抽出するための考慮事項

98

例) 05/17 ~ 05/18の1時間毎のSQL実行回数の差分を取得するSQL

select'"' ||

bsn.SNAP_ID || '","' ||to_char(bsn.END_INTERVAL_TIME,'yyyy') || '","' ||

…esn.SNAP_ID || '","' ||

…esy.STAT_NAME || '","' ||(esy.VALUE - bsy.VALUE) || '"'

fromDBA_HIST_SNAPSHOT bsn, DBA_HIST_SNAPSHOT esn, DBA_HIST_SYSSTAT bsy, DBA_HIST_SYSSTAT esy

where bsn.DBID = esn.DBID and bsn.INSTANCE_NUMBER = esn.INSTANCE_NUMBER and bsn.END_INTERVAL_TIME = esn.BEGIN_INTERVAL_TIMEand bsn.STARTUP_TIME = esn.STARTUP_TIMEand bsn.DBID = bsy.DBID and bsn.INSTANCE_NUMBER = bsy.INSTANCE_NUMBER and bsn.SNAP_ID = bsy.SNAP_IDand esn.DBID = esy.DBID and esn.INSTANCE_NUMBER = esy.INSTANCE_NUMBER and esn.SNAP_ID = esy.SNAP_IDand bsy.STAT_NAME = esy.STAT_NAME and bsy.STAT_NAME = 'execute count'and bsn.END_INTERVAL_TIME >= to_date('201505170000','yyyymmddhh24mi')and esn.END_INTERVAL_TIME <= to_date('201505180002','yyyymmddhh24mi');

BEGIN_INTERVAL_TIMEは1つ前のスナップショット取得時間となる差分比較時の前スナップのEND_INTERVAL_TIMEと結合

これにより前後のスナップ内のデータを結合できる

Page 99: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

DBA_HISTビューからの差分情報取得

• スナップ間差分を抽出するための考慮事項

99

例) 05/17 ~ 05/18の1時間毎のSQL実行回数の差分を取得するSQL

select'"' ||

bsn.SNAP_ID || '","' ||to_char(bsn.END_INTERVAL_TIME,'yyyy') || '","' ||

…esn.SNAP_ID || '","' ||

…esy.STAT_NAME || '","' ||(esy.VALUE - bsy.VALUE) || '"'

fromDBA_HIST_SNAPSHOT bsn, DBA_HIST_SNAPSHOT esn, DBA_HIST_SYSSTAT bsy, DBA_HIST_SYSSTAT esy

where bsn.DBID = esn.DBID and bsn.INSTANCE_NUMBER = esn.INSTANCE_NUMBER and bsn.END_INTERVAL_TIME = esn.BEGIN_INTERVAL_TIMEand bsn.STARTUP_TIME = esn.STARTUP_TIMEand bsn.DBID = bsy.DBID and bsn.INSTANCE_NUMBER = bsy.INSTANCE_NUMBER and bsn.SNAP_ID = bsy.SNAP_IDand esn.DBID = esy.DBID and esn.INSTANCE_NUMBER = esy.INSTANCE_NUMBER and esn.SNAP_ID = esy.SNAP_IDand bsy.STAT_NAME = esy.STAT_NAME and bsy.STAT_NAME = 'execute count'and bsn.END_INTERVAL_TIME >= to_date('201505170000','yyyymmddhh24mi')and esn.END_INTERVAL_TIME <= to_date('201505180002','yyyymmddhh24mi');

スナップショットの情報はインスタンス毎に存在するため、差分取得対象のインスタンスを結合条件に追加

Page 100: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

DBA_HISTビューからの差分情報取得

• スナップ間差分を抽出するための考慮事項

100

例) 05/17 ~ 05/18の1時間毎のSQL実行回数の差分を取得するSQL

select'"' ||

bsn.SNAP_ID || '","' ||to_char(bsn.END_INTERVAL_TIME,'yyyy') || '","' ||

…esn.SNAP_ID || '","' ||

…esy.STAT_NAME || '","' ||(esy.VALUE - bsy.VALUE) || '"'

fromDBA_HIST_SNAPSHOT bsn, DBA_HIST_SNAPSHOT esn, DBA_HIST_SYSSTAT bsy, DBA_HIST_SYSSTAT esy

where bsn.DBID = esn.DBID and bsn.INSTANCE_NUMBER = esn.INSTANCE_NUMBER and bsn.END_INTERVAL_TIME = esn.BEGIN_INTERVAL_TIMEand bsn.STARTUP_TIME = esn.STARTUP_TIMEand bsn.DBID = bsy.DBID and bsn.INSTANCE_NUMBER = bsy.INSTANCE_NUMBER and bsn.SNAP_ID = bsy.SNAP_IDand esn.DBID = esy.DBID and esn.INSTANCE_NUMBER = esy.INSTANCE_NUMBER and esn.SNAP_ID = esy.SNAP_IDand bsy.STAT_NAME = esy.STAT_NAME and bsy.STAT_NAME = 'execute count'and bsn.END_INTERVAL_TIME >= to_date('201505170000','yyyymmddhh24mi')and esn.END_INTERVAL_TIME <= to_date('201505180002','yyyymmddhh24mi');

差分を取得するスナップショット間に再起動が発生していないことを確認するため、インスタンスの起動時間情報を結合

Page 101: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH調査用SQLサンプル

• パフォーマンス分析ケース毎のASH活用方法- 特定のAPで使用されているDatabaseセッション情報の確認

101

対象セッション特定

目的 指定した期間に特定のAPに使用されているDatabaseセッションを特定するための情報を取得する

入力情報

①調査対象となる期間が特定できていること②クライアントプログラム名、クライアントモジュール名、クライアント識別子、クライアントマシンのいずれかが特定できていること

SQL例

selectdistinct INST_ID, SESSION_ID, SESSION_SERIAL#, PROGRAM, MODULE, CLIENT_ID, MACHINE

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and (PROGRAM = '<PROGRAM>' or MODULE = '<MODULE>' or CLIENT_ID = '<CLIENT_ID>' or MACHINE = '<MACHINE>‘)order by 1,2,3;

Page 102: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH調査用SQLサンプル

• パフォーマンス分析ケース毎のASH活用方法- 特定のDatabaseセッションの待機と原因となっているブロッキング・セッションの確認

102

セッション単位の分析

目的 指定した期間に特定のセッションを待機させていたブロッキング・セッションを特定する

入力情報

①調査対象となる期間が特定できていること②該当セッションの存在するインスタンス、セッションID、セッション・シリアルが特定できていること

SQL例

selectSAMPLE_TIME, INST_ID, SESSION_ID, SESSION_SERIAL#, BLOCKING_INST_ID, BLOCKING_SESSION, BLOCKING_SESSION_SERIAL#, BLOCKING_SESSION_STATUS

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and INST_ID = <INST_ID> and SESSION_ID = <SESSION_ID> and SESSION_SERIAL# = <SESSION_SERIAL#>order by 1;

* 上記をブロッキング・セッションが存在しなくなるまで繰り返し実施することで大元のブロッキング・セッションを特定

Page 103: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH調査用SQLサンプル

• パフォーマンス分析ケース毎のASH活用方法- 実行が記録されたSQLのPGAメモリ、一時表領域使用状況の確認

103

SQL単位の分析

目的 指定した期間に実行が記録されたSQL毎に確保されたPGAメモリ、一時表領域の最大サイズを確認する

入力情報

①調査対象となる期間が特定できていること

SQL例

selectINST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, max(PGA_ALLOCATED) “MAX_PGA_ALLOCATED“,max(TEMP_SPACE_ALLOCATED) "MAX_TEMP_ALLOCATED"

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and SQL_ID is not nullgroup by INST_ID, SQL_ID, SQL_PLAN_HASH_VALUEorder by 1,4,5,2,3;

Page 104: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

ASH調査用SQLサンプル

• パフォーマンス分析ケース毎のASH活用方法- 特定の待機イベントの待機が記録されたSQLの確認

104

待機イベント単位の分析

目的 指定した期間に特定の待機イベントでの待機の記録回数が多いSQLと記録回数を確認する

入力情報

①調査対象となる期間が特定できていること②該当待機イベント名が特定できていること

SQL例

selectINST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENT, count(1) "SESSION_COUNT"

fromGV$ACTIVE_SESSION_HISTORY

whereSAMPLE_TIME between to_date('<対象期間開始日時>','yyyymmddhh24miss')

and to_date('<対象期間終了日時>','yyyymmddhh24miss')and EVENT = '<EVENT>‘and SQL_ID is not nullgroup by INST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENTorder by 1,5.4,2,3;

Page 105: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

性能監視・分析の効率化

アプリケーション情報をDatabaseセッション情報につける

• SQL*Plusをベースとしたアプリケーションの場合

• それ以外のアプリケーションの場合- PL/SQLを実行して明示的にアプリケーション情報を定義する

105

<構文>SQL> SET APPINFO <テキスト>

<例>SQL> SET APPINFO myappl

<構文>SQL> EXECUTE DBMS_APPLICATION_INFO.SET_MODULE(‘モジュール名’,‘アクション名’)

<例>SQL> EXECUTE DBMS_APPLICATION_INFO.SET_MODULE(‘myappl’,‘select’)

Page 106: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

アプリケーション情報の活用

モジュール列の利用

106

Page 107: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved.

Oracleの実績 Oracleのサポート

年間売上 約80億円(国内トップクラス)

お取引き企業数 8,000社以上(国内トップクラス)

サポート契約継続率 90%以上

過去3年のサポート切替実績 1,200件以上

【Oracle販売実績】

Oracle Award受賞

[DODAI] Platform Solution Award

【過去受賞歴】

パートナー別販売実績第1位

Excellent Partner受賞(9年連続 9回)

Best Partner賞

Support of The Year賞

Show case of the Year賞

Oracle Real Application Clusters部門

Best Area Performance of the Year賞

Oracle Database 11g Award賞

KUDOS for Oracle Support Partners賞

【ACSP認定】高レベルサポート認定企業

【Oracle受賞歴】

1987年、アシストグループとして株式会社オラクルを設立し、国内で

最初にOracleのライセンス販売、サポートの提供をはじめました。

誠実にお客様の声に耳を傾け、真心を持ってお答えするという姿勢と、

万全のサポート体制でお客様の期待に答え続け、多くのお客様より厚く

ご支持を頂けております。

【歴史】

○ マルチベンダー対応

アシストではすべてのOSで実機を用意し、構築スキルを蓄え、

検証環境を整えております。

24時間365日、約200名のOracle専属技術者に

よる全国サポート体制 (国内最大級)

過去3年(年間平均)の対応状況

サポート件数 約10,000件/年

フィールド対応件数 約400件/年

顧客満足度 約90%

○ 信頼のフィールドサポート

サポートセンターで解決できない問題は、Oracle専任技術

者が直接お客様のもとをお伺いし、解決にあたります。

アシストのOracleビジネスのご紹介

107

Page 108: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved. 108

Page 109: 2016年5月18日 - Oracle › technetwork › jp › ondemand › branch › ...2016/05/18  ·  夜な夜な! なにわオラクル塾 Presented By アシスト#49

Copyright© 2016, Oracle.& K.K.Ashisuto. All rights reserved. 109

ご清聴ありがとうございました。

株式会社アシスト