Copyright © 2018 K.K. Ashisuto
サポートのトップエンジニアが語る
ワンランク上のStatspack 活用術!
株式会社アシスト
サポートセンター
地宗 幸代
1
Copyright © 2018 K.K. Ashisuto
自己紹介
地宗 幸代(ちそう さちよ)
サポート歴:15年以上
・担当製品:
Oracle Database、Oracle Real Application Clusters、
WebLogic Server、Oracle Cloud
・Oracle Database トラブル調査テクニック 講師
2
Copyright © 2018 K.K. Ashisuto
アジェンダ
1. Statspack とは?
2. しきい値の変更
3. SQL全文の確認
4. Snapshot取得レベル変更
5. 領域管理の注意点
6. 便利なレポート出力方法
3
Copyright © 2018 K.K. Ashisuto
アジェンダ
1. Statspack とは?
2. しきい値の変更
3. SQL全文の確認
4. Snapshot取得レベル変更
5. 領域管理の注意点
6. 便利なレポート出力方法
4
Copyright © 2018 K.K. Ashisuto
突然ですが質問です
Q:パフォーマンス障害が発生!
障害発生中のパフォーマンス情報が取得できて
いなかった場合の問題解決率は?
5
解決
未解決
41.7%
Copyright © 2018 K.K. Ashisuto
パフォーマンス障害の解決率
Statspackを定期的に取得するとパフォーマンス障害の解決率が
約2倍にアップ!
6
41.7
80
0
25
50
75
100
情報取得なし Statspackの
定期取得あり
解決率(%)
※2015年7月~2016年6月のアシスト
サポートセンターの問合せ内での解決率
解決率
2倍
パフォーマンス障害の解決率(%)
Copyright © 2018 K.K. Ashisuto
Statspackとは?
DBの稼働統計をレポートするツール
・DBの稼働情報を snapshot として取得、蓄積
・取得済 snapshot の範囲内でレポートを出力
・インストール手順はspdoc.txtに記載
$ORACLE_HOME/rdbms/admin/spdoc.txt
7
Copyright © 2018 K.K. Ashisuto
Statspackとは?
イメージ
8
snapshot
9:00
snapshot
12:00
snapshot
15:00
snapshot
18:00
9:00~12:00
の稼働レポート
15:00~18:00
の稼働レポート
12:00~15:00
の稼働レポート
9:00~18:00
の稼働レポートデータベース
Copyright © 2018 K.K. Ashisuto
Statspackとは?
snapshotの取得方法
9
SQL> execute statspack.snap
※perfstat(statspack用ユーザ)にて実行
DBインスタンス接続して以下のコマンドを実行
Copyright © 2018 K.K. Ashisuto
Statspackとは?
Statspackレポートの出力方法
10
SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql
※perfstat(statspack用ユーザ)にて実行
DBインスタンス接続して以下のスクリプトを実行
・実行後にレポート対象のsnapshotの範囲指定が求められます。
Copyright © 2018 K.K. Ashisuto
Statspackとは?
例えばこんなことがレポートされます(1)
11
Instance CPU
~~~~~~~~~~~~ % Time (seconds)
-------- --------------
Host: Total time (s): 515,680.1
Host: Busy CPU time (s): 50,494.9
% of time Host is Busy: 9.8
Instance: Total CPU time (s): 79.6
% of Busy CPU used for Instance: 0.2
Instance: Total Database time (s): 145.1
%DB time waiting for CPU (Resource Mgr): 0.0
Memory Statistics Begin End
~~~~~~~~~~~~~~~~~ ------------ ------------
Host Mem (MB): 258,086.2 258,086.2
SGA use (MB): 8,192.0 8,192.0
PGA use (MB): 376.8 374.1
% Host Mem used for SGA+PGA: 3.3 3.3
CPU
メモリ
使用状況
DB・ホスト全体
Copyright © 2018 K.K. Ashisuto
Statspackとは?
例えばこんなことがレポートされます(2)
12
待機
イベント
セッションの待機
時間とその種類
Avg %Total
%Tim Total Wait wait Waits Call
Event Waits out Time (s) (ms) /txn Time
---------------------------- ------------ ---- ---------- ------ -------- ------
db file sequential read 556 0 3 5 2.1 .0
control file sequential read 2,544 0 0 0 9.5 .0
Disk file operations I/O 1,882 0 0 0 7.0 .0
db file scattered read 35 0 0 4 0.1 .0
Disk file Mirror Read 691 0 0 0 2.6 .0
db file parallel read 8 0 0 10 0.0 .0
row cache lock 1,518 0 0 0 5.7 .0
SQL*Net break/reset to clien 1,462 0 0 0 5.5 .0
enq: IV - contention 280 0 0 0 1.0 .0
control file parallel write 20 0 0 0 0.1 .0
log file sync 22 0 0 0 0.1 .0
SQL*Net message from client 3,592 0 15,755 4386 13.5
jobq slave wait 3,786 100 1,894 500 14.2
SQL*Net message to client 3,592 0 0 0 13.5
Copyright © 2018 K.K. Ashisuto
Statspackとは?
例えばこんなことがレポートされます(3)
13
ディスク
読込みの
多いSQL
SQL ordered by Reads DB/Inst: ORCL/orcl1 Snaps: 6457-6459
-> End Disk Reads Threshold: 1000 Total Disk Reads: 5,555
-> Captured SQL accounts for 47.7% of Total Disk Reads
-> SQL reported below exceeded 1.0% of Total Disk Reads
CPU Elapsd
Physical Rds Executions Rds per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#,length,piece fr
om idl_ub1$ where obj#=:1 and part=:2 and version=:3 order by pi
ece#
107 3 35.7 1.9 1.38 1.63 4051972239
Module: DBMS_SCHEDULER
DECLARE job BINARY_INTEGER := :job; next_date TIMESTAMP WITH TI
ME ZONE := :mydate; broken BOOLEAN := FALSE; job_name VARCHAR2
(30) := :job_name; job_subname VARCHAR2(30) := :job_subname; j
ob_owner VARCHAR2(30) := :job_owner; job_start TIMESTAMP WITH T
95 222 0.4 1.7 1.37 1.59 3528632252
Copyright © 2018 K.K. Ashisuto
Statspackとは?
・Statspackレポートの一般的な見方はWEB上にも
多数公開されています。
・詳細はそちらに譲るとして、本日はStatspackの
さらなる活用方法や実運用上の注意点をご案内します。
14
Copyright © 2018 K.K. Ashisuto
アジェンダ
1. Statspack とは?
2. しきい値の変更
3. SQL全文の確認
4. Snapshot取得レベル変更
5. 領域管理の注意点
6. 便利なレポート出力方法
15
Copyright © 2018 K.K. Ashisuto
Statspackとは?
例えばこんなことがレポートされます(3)
16
ディスク
読込みの
多いSQL
SQL ordered by Reads DB/Inst: ORCL/orcl1 Snaps: 6457-6459
-> End Disk Reads Threshold: 1000 Total Disk Reads: 5,555
-> Captured SQL accounts for 47.7% of Total Disk Reads
-> SQL reported below exceeded 1.0% of Total Disk Reads
CPU Elapsd
Physical Rds Executions Rds per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#,length,piece fr
om idl_ub1$ where obj#=:1 and part=:2 and version=:3 order by pi
ece#
107 3 35.7 1.9 1.38 1.63 4051972239
Module: DBMS_SCHEDULER
DECLARE job BINARY_INTEGER := :job; next_date TIMESTAMP WITH TI
ME ZONE := :mydate; broken BOOLEAN := FALSE; job_name VARCHAR2
(30) := :job_name; job_subname VARCHAR2(30) := :job_subname; j
ob_owner VARCHAR2(30) := :job_owner; job_start TIMESTAMP WITH T
95 222 0.4 1.7 1.37 1.59 3528632252
Copyright © 2018 K.K. Ashisuto
Statspackとは?
例えばこんなことがレポートされます(3)
17
ディスク
読込みの
多いSQL
SQL ordered by Reads DB/Inst: RACOKAKI/racokaki1 Snaps: 6457-6459
-> End Disk Reads Threshold: 1000 Total Disk Reads: 5,555
-> Captured SQL accounts for 47.7% of Total Disk Reads
-> SQL reported below exceeded 1.0% of Total Disk Reads
CPU Elapsd
Physical Rds Executions Rds per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#,length,piece fr
om idl_ub1$ where obj#=:1 and part=:2 and version=:3 order by pi
ece#
107 3 35.7 1.9 1.38 1.63 4051972239
Module: DBMS_SCHEDULER
DECLARE job BINARY_INTEGER := :job; next_date TIMESTAMP WITH TI
ME ZONE := :mydate; broken BOOLEAN := FALSE; job_name VARCHAR2
(30) := :job_name; job_subname VARCHAR2(30) := :job_subname; j
ob_owner VARCHAR2(30) := :job_owner; job_start TIMESTAMP WITH T
95 222 0.4 1.7 1.37 1.59 3528632252
多いって
どのくらい?
Copyright © 2018 K.K. Ashisuto
しきい値の変更
Snapshotで情報採取されるSQLはしきい値で決まる
しきい値の内容 パラメータ デフォルト値
SQL実行回数 i_executions_th 100
ディスク読込ブロック数 i_disk_reads_th 1000
パース発生回数 i_parse_calls_th 1000
Buffer読込数 i_buffer_gets_th 10000
共有メモリの合計使用量 i_sharable_mem_th 1048576
子カーソルの数 i_version_count_th 20
18
Copyright © 2018 K.K. Ashisuto
しきい値の変更
しきい値の変更方法
19
SQL> execute statspack.modify_statspack_parameter -
(i_disk_reads_th=>500);
※perfstat(statspack用ユーザ)にて実行
例:ディスク読込ブロック数のしきい値を500に設定
Copyright © 2018 K.K. Ashisuto
しきい値の変更
しきい値の変更を確認
20
SQL> select disk_reads_th from
stats$statspack_parameter;
DISK_READS_TH
-------------
500
Copyright © 2018 K.K. Ashisuto
しきい値の変更
レポートに表示されるSQL文の数の変更方法
$ORACLE_HOME/rdbms/admin/sprepcon.sql
を編集
○表示されるSQL文の数を指定するパラメータ
(変更前) define top_n_sql = 65;
(変更後) define top_n_sql = 500;
21
Copyright © 2018 K.K. Ashisuto
アジェンダ
1. Statspack とは?
2. しきい値の変更
3. SQL全文の確認
4. Snapshot取得レベル変更
5. 領域管理の注意点
6. 便利なレポート出力方法
22
Copyright © 2018 K.K. Ashisuto
SQL全文の確認
デフォルトではSQL文は4行分しか表示されない
23
Elapsed Elap per CPU Old
Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
5.15 2,173 0.00 39.1 3.09 0 1367836129
Module: Streams
select queue_id, queue_schema, queue_name, subscriber_id, subscr
iber_name, inst_id, latency_state, latency, dequeue_re
quests, active_shards, active_listener, flags, con_i
d from gv$aq_subscribe
2.83 192 0.01 21.5 2.82 0 1297986421
Module: DBMS_SCHEDULER
SELECT OWNER, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE, TABLES
PACE_NAME, TABLESPACE_ID FROM SYS.SYS_DBA_SEGS WHERE SEGMENT_OBJ
D = :B1 AND SEGMENT_TYPE <> 'ROLLBACK' AND SEGMENT_TYPE <> 'TYPE
2 UNDO' AND SEGMENT_TYPE <> 'DEFERRED ROLLBACK' AND SEGMENT_TYPE
1.79 454 0.00 13.6 1.22 1 4288707916
begin dbsnmp.bsln_internal.maintain_thresholds; end;
SQL文が途切れて
全文が見えない
Copyright © 2018 K.K. Ashisuto
SQL全文の確認
表示設定の変更方法
$ORACLE_HOME/rdbms/admin/sprepcon.sql
を編集
○SQLの表示行数を指定するパラメータ
(変更前) define num_rows_per_hash = 4;
(変更後) define num_rows_per_hash = 100;
24
Copyright © 2018 K.K. Ashisuto
SQL全文の確認
変更後にレポート再取得でSQL文全文確認可能
25
Elapsed Elap per CPU Old
Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
2.83 192 0.01 21.5 2.82 0 1297986421
Module: DBMS_SCHEDULER
SELECT OWNER, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE, TABLES
PACE_NAME, TABLESPACE_ID FROM SYS.SYS_DBA_SEGS WHERE SEGMENT_OBJ
D = :B1 AND SEGMENT_TYPE <> 'ROLLBACK' AND SEGMENT_TYPE <> 'TYPE
2 UNDO' AND SEGMENT_TYPE <> 'DEFERRED ROLLBACK' AND SEGMENT_TYPE
1.79 454 0.00 13.6 1.22 1 4288707916
Elapsed Elap per CPU Old
Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
2.83 192 0.01 21.5 2.82 0 1297986421
Module: DBMS_SCHEDULER
SELECT OWNER, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE, TABLES
PACE_NAME, TABLESPACE_ID FROM SYS.SYS_DBA_SEGS WHERE SEGMENT_OBJ
D = :B1 AND SEGMENT_TYPE <> 'ROLLBACK' AND SEGMENT_TYPE <> 'TYPE
2 UNDO' AND SEGMENT_TYPE <> 'DEFERRED ROLLBACK' AND SEGMENT_TYPE
<> 'TEMPORARY' AND SEGMENT_TYPE <> 'CACHE' AND SEGMENT_TYPE <>
'SPACE HEADER' AND SEGMENT_TYPE <> 'UNDEFINED' AND TABLESPACE_NA
ME NOT IN ('SYSAUX' , 'SYSTEM')
1.79 454 0.00 13.6 1.22 1 4288707916
●設定変更前 ●設定変更後
Copyright © 2018 K.K. Ashisuto
アジェンダ
1. Statspack とは?
2. しきい値の変更
3. SQL全文の確認
4. Snapshot取得レベル変更
5. 領域管理の注意点
6. 便利なレポート出力方法
26
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
Snapshot には取得レベルがある
27
SQL> select snap_id,instance_number,snap_time,snap_level from stats$snapshot order by 1;
SNAP_ID INSTANCE_NUMBER SNAP_TIME SNAP_LEVEL
---------- --------------- ------------------- ----------
16 1 2017/10/17 13:16:17 5
17 1 2017/10/17 13:16:20 5
18 1 2017/10/17 17:29:49 5
19 1 2017/10/17 17:29:52 5
20 1 2017/10/17 17:29:52 5
21 1 2017/10/17 17:29:53 5
22 1 2017/10/17 17:29:54 5
23 1 2017/10/17 17:30:09 5
24 1 2017/10/17 17:30:10 5
9 rows selected.
SQL>
デフォルトは
レベル5
※取得済みのsnapshotのレベルは
stats$snapshotのsnap_level列で確認可能
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
Snapshot の取得レベル変更方法
28
SQL> execute statspack.modify_statspack_parameter -
(i_snap_level=>6);
※perfstat(statspack用ユーザ)にて実行
例:レベル6に変更する場合
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
29
• SQL単位での処理時間統計
• SQLの実行計画とその変化SQLレポート
• セグメント別のI/O統計
• セグメント別の行ロック、ITL待機統計セグメント情報
• 親/子ラッチの情報
• サポートから指示があった場合に取得ラッチ情報
レベル6
レベル7
レベル10
取得レベル別の追加情報
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
レベル6
SQLレポートの出力方法
30
SQL> @$ORACLE_HOME/rdbms/admin/sprepsql.sql
※perfstat(statspack用ユーザ)にて実行
DBインスタンスに接続して以下スクリプトを実行
・実行後に対象のSQLが含まれるsnapshotの範囲指定と
Hash Value値の入力が求められます。
レベル6
SQLレポート
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
Hash Value の確認方法
Statspackレポート内の Old Hash Value列から確認
31
Elapsed Elap per CPU Old
Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
5.15 2,173 0.00 39.1 3.09 0 1367836129
Module: Streams
select queue_id, queue_schema, queue_name, subscriber_id, subscr
iber_name, inst_id, latency_state, latency, dequeue_re
quests, active_shards, active_listener, flags, con_i
d from gv$aq_subscribe
Hash Value値
レベル6
SQLレポート
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
SQLレポートより抜粋
Start Id Start Time End Id End Time Duration(mins)
--------- ------------------- --------- ------------------- --------------
193 10-Nov-17 02:47:05 257 10-Nov-17 13:32:32 645.45
SQL Statistics
:
:
% Snap
Statement Total Per Execute Total
--------------- --------------- ------
Buffer Gets: 22,386 520.6 1.03
Disk Reads: 0 0.0 .00
Rows processed: 3,873 90.1
CPU Time(s/ms): 0 3.9
Elapsed Time(s/ms): 0 3.9
:
:
32
レベル6
SQLレポート
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
SQLレポートより抜粋
SQL Text
~~~~~~~~
delete /*+ dynamic_sampling(m 4) dynamic_sampling_est_cdn(m) */
from sys.mon_mods$ m
where exists
(select /*+ unnest */ * from sys.tab$ t where t.obj# = m.obj#)
Known Optimizer Plan(s) for this Old Hash Value
:
First First Last Plan
Snap Id Snap Time Active Time Hash Value Cost
--------- --------------- --------------- ------------ ----------
191 10-Nov-17 02:26 10-Nov-17 13:34 805044450 4
191 10-Nov-17 02:26 05-Nov-17 14:02 3469818654 200
33
レベル6
SQLレポート
複数行の出力
実行計画
に変化あり
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
SQLレポートより抜粋(Plans in shared pool between Begin and End Snap Ids)
--------------------------------------------------------------------------------
| Operation | PHV/Object Name | Rows | Bytes| Cost |
--------------------------------------------------------------------------------
|DELETE STATEMENT |----- 805044450 -----| | | 4 |
|DELETE |MON_MODS$ | | | |
| FILTER | | | | |
| TABLE ACCESS FULL |MON_MODS$ | 187 | 2K| 2 |
| TABLE ACCESS CLUSTER |TAB$ | 1 | 5 | 2 |
| INDEX UNIQUE SCAN |I_OBJ# | 1 | | 1 |
|DELETE STATEMENT |----- 3469818654 ----| | | 200 |
|DELETE |MON_MODS$ | | | |
| NESTED LOOPS SEMI | | 19 | 114 | 200 |
| TABLE ACCESS FULL |MON_MODS$ | 99 | 1K| 2 |
| VIEW PUSHED PREDICATE |VW_SQ_1 | 1 | 2 | 2 |
| TABLE ACCESS CLUSTER |TAB$ | 1 | 5 | 2 |
| INDEX UNIQUE SCAN |I_OBJ# | 1 | | 1 |
--------------------------------------------------------------------------------
34
レベル6
SQLレポート
遅延時は
青字の
実行計画へ
変更を検討
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
SQLレポートの活用例
35
レベル6
SQLレポート
1.パフォーマンス遅延が発生
2.該当時間帯のSQLレポートを出力
実行計画の変化を確認
3.統計情報のリストアやヒント句等で
実行計画を戻すことを検討
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
レベル7ではセグメント別の情報をレポート
・物理I/O
・バッファ読込
・アクセス競合(SGA上、ITL、行ロック)
・ブロックの変更数
36
レベル7
セグメント情報
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
レベル7 セグメント別統計
Segments by Physical Reads DB/Inst: ORCL/orcl1 Snaps: 108-265
-> End Segment Physical Reads Threshold: 1000
Subobject Obj. Physical Pct
Owner Tablespace Object Name Name Type Reads Total
---------- ---------- -------------------- ------------ ----- ------------ -----
TEST USERS TEST_TAB TABLE 1,318 58.8
SYS SYSAUX WRI$_OPTSTAT_HISTGRM SYS_P730 TABLE 187 8.3
SOE USERS SYS_LOB0000008303C00 LOB 156 7.0
SYS SYSAUX WRH$_LATCH_PK 24639_1380 INDEX 130 5.8
SOE SOE SEGV TABLE 78 3.5
-------------------------------------------------------------
37
レベル7
セグメント情報
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
Snapshotで採取されるセグメントはしきい値で決まる
しきい値の内容 パラメータ デフォルト値
物理読込発生数 i_seg_phy_reads_th 1000
論理読込発生数 i_seg_log_reads_th 10000
ブロック競合の発生回数 i_seg_buff_busy_th 100
行ロックの発生回数 i_seg_rowlock_w_th 100
ITL待機の発生数 i_seg_itl_waits_th 100
crブロック数(※) i_seg_cr_bks_sd_th 1000
currentブロック数(※) i_seg_cu_bks_sd_th 1000
(※)・・・・・RAC環境でのみ有効
38
レベル7
セグメント情報
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
しきい値の変更方法
レポートに表示されるセグメント数の変更方法
○$ORACLE_HOME/rdbms/admin/sprepcon.sql
の以下のパラメータを編集
define top_n_segstat = 5;
39
SQL> execute statspack.modify_statspack_parameter -
(i_seg_phy_reads_th=>2000);
※perfstat(statspack用ユーザ)にて実行
レベル7
セグメント情報
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
負荷が集中しやすいセグメントを特定
40
レベル7
セグメント情報
1.負荷が集中しやすいセグメントを特定
2.パーティション化やテーブル分離し、
配置する物理ディスクを分散
3.アクセスを分散させる
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
レベル10 ラッチ情報
・ラッチとはDB内の内部処理を順序制御するロック機構
・このレベルはSnapshot取得にリソースを大量に消費
・サポートより指示があった場合のみ使用してください
41
レベル10
ラッチ情報
Copyright © 2018 K.K. Ashisuto
Snapshot取得レベル変更
42
• SQL単位での処理時間統計
• SQLの実行計画とその変化SQLレポート
• セグメント別のI/O統計
• セグメント別の行ロック、ITL待機統計セグメント情報
• 親/子ラッチの情報
• サポートから指示があった場合に取得ラッチ情報
レベル6
レベル7
レベル10
どの取得レベルが良い?
Copyright © 2018 K.K. Ashisuto
アジェンダ
1. Statspack とは?
2. しきい値の変更
3. SQL全文の確認
4. Snapshot取得レベル変更
5. 領域管理の注意点
6. 便利なレポート出力方法
43
Copyright © 2018 K.K. Ashisuto
領域管理の注意点
Snapshotは定期的な削除が必要
44
SQL> @$ORACLE_HOME/rdbms/admin/sppurge.sql
※perfstat(statspack用ユーザ)にて実行
DBインスタンス接続後に以下のスクリプトを実行
・実行後に削除対象のSnapshot ID指定を求められます。
Copyright © 2018 K.K. Ashisuto
領域管理の注意点
sppurge.sqlは内部的にdeleteを実行
・snapshot実体は複数のテーブルデータ(stats$xxxx)
・sppurge はテーブルへのdeleteを実行
45
テーブル(segment)
再利用可能領域
イメージ:snapshot格納テーブル(sppurge.sql 実行後) 削除データ分の
領域は未解放
肥大化した場合
は縮小が必要
使用中領域
Copyright © 2018 K.K. Ashisuto
領域管理の注意点
stats$肥大化時のshrink方法
46
SQL> ALTER TABLE STATS$XXXXX ENABLE ROW MOVEMENT;
SQL> ALTER TABLE STATS$XXXXX SHRINK SPACE;
※perfstat(statspack用ユーザ)にて実行
Copyright © 2018 K.K. Ashisuto
領域管理の注意点
削除時の注意点
・sppurge.sqlでは一部関連オブジェクトが
削除されない
・statspack.purgeを使用して
i_extended_purge =true の付与で
関連オブジェクトを含めて削除
47
Copyright © 2018 K.K. Ashisuto
領域管理の注意点
i_extended_purge =true の付与
48
SQL> exec statspack.purge(i_begin_snap=>1,-
i_end_snap=>10, i_extended_purge=>TRUE);
※perfstat(statspack用ユーザ)にて実行
i_begin_snap と i_end_snap で削除対象のSnapshot ID
範囲を指定。以下はsnap_id 1~10 を削除する例。
Copyright © 2018 K.K. Ashisuto
領域管理の注意点
i_extended_purge =true の付与時の注意点
・sppurge.sql 実行より多くのリソースを消費
・負荷の高い時間帯は避けて実行
49
Copyright © 2018 K.K. Ashisuto
領域管理の注意点
・肥大化させないよう定期的な削除を
・削除時には i_extended_purge =true
50
Copyright © 2018 K.K. Ashisuto
アジェンダ
1. Statspack とは?
2. しきい値の変更
3. SQL全文の確認
4. Snapshot取得レベル変更
5. 領域管理の注意点
6. 便利なレポート出力方法
51
Copyright © 2018 K.K. Ashisuto
便利なレポート出力方法
spreport.sqlで一度に出力可能なレポートは一つのみ
・レポートの出力方法は spreport.sql 実行のみ
・細かく刻んで出力させたい場合は手間がかかる
52
Copyright © 2018 K.K. Ashisuto
便利なレポート出力方法
日単位の指定でレポートを一括で取得
・アシスト作成のスクリプト(lump_spreport.sh)をご紹介
・スクリプト詳細は Linux 版のみ本資料末に補足資料に記載。
※後日資料ダウンロード後にご利用ください。
※Windows版はDatabase Support Blogで公開中です。
53
https://www.ashisuto.co.jp/db_blog/article/201712-statspack-report.html
Copyright © 2018 K.K. Ashisuto
便利なレポート出力方法
実行例
54
[oracle@support52 work]$ ./lump_spreport.sh
レポート期間を確認します。
例)2007-01-25に取得されたsnapshotをレポート化したい場合
開始日付けを2007-01-25と入力、終了日付けを2007-01-26と入力します。
レポート化したい開始日付け(YYYY-MM-DD)を入力してください。>>
2017-11-09 日付を入力
レポート化したい終了日付け(YYYY-MM-DD)を入力してください。>>
2017-11-10 日付を入力
DBインストールユーザでスクリプトを実行
・実行後にレポートを出力する日付範囲の指定が求められます。
Copyright © 2018 K.K. Ashisuto
便利なレポート出力方法
実行例
55
このインスタンス番号は、2 です。
以下のスナップショットをレポート化します。
SNAP_ID SNAP_TIME
---------- -------------------
108 2017-11-09 11:57:40
109 2017-11-09 11:58:31
110 2017-11-09 12:00:31
(中略)
114 2017-11-09 18:32:55
115 2017-11-09 18:43:00
116 2017-11-09 18:53:05
Copyright © 2018 K.K. Ashisuto
便利なレポート出力方法
実行例
56
レポート化には、CPU負荷がかかります。
実行はシステムに影響の少ない時間帯に行ってください。
処理を続行してよろしいですか?[YES/NO]
YES  ”YES”を入力し[ENTER]を実行すると処理開始。
”NO” を入力し[ENTER]を実行すると処理は中断されます。
処理を続行します。
[oracle@support52 work]$
[oracle@support52 work]$ cd ./spreport  カレントディレクトリ下にspreportと
いうディレクトリが作成され、レポート
[oracle@support52 spreport]$ ls が出力されます。
sp_2_108_109.lst sp_2_110_111.lst sp_2_112_113.lst sp_2_114_115.lst
sp_2_109_110.lst sp_2_111_112.lst sp_2_113_114.lst sp_2_115_116.lst
[oracle@support52 spreport]$
Copyright © 2018 K.K. Ashisuto
まとめ
Statspackは
57
使い方次第で
便利な
診断ツール
環境や問題
に適した
スナップショット
取得で
効果大
サポセンへの
連携で
障害解決率
アップ
使用の際は運用管理の意識も
Copyright © 2018 K.K. Ashisuto 58
※本資料に記載している情報は、2018年9月21日現在のものです。
※本資料の内容は、今後予告なく変更されることがあります。
※OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
※文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright © 2018 K.K. Ashisuto
補足資料
59
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
README
◆スクリプトの概要
=====================
このスクリプトは、取得したSTATSPACKレポートを指定日付範囲で出力するスクリプトです。
このスクリプトは、インスタンス単位で実行されることを想定しています。
RAC環境では、それぞれのインスタンスで実行してください。
このスクリプト実行には、手の加わっていない(インストール時の)
$ORACLE_HOME/rdbms/admin/spreport.sql
$ORACLE_HOME/rdbms/admin/sprepins.sql
が必要です。
60
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
README
◆スクリプトの使い方
=====================
1. スクリプト内で修正が必要なのは、以下の変数です。
ORACLE_HOME
→実行する環境のORACLE_HOMEを指定してください。
STATSUSER
→STATSPACK実行ユーザ/パスワードを指定してください。
2. oracleアカウントで本スクリプト(lump_spreport.sh)を実行します。
61
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
README
◆免責事項
=====================
・本スクリプトは、サンプルとして提供されるものであり
本スクリプト使用による損害については一切責任を負いかねます。
・本スクリプトの修正については、自由に行っていただいてもかまいませんが、
修正したことによって発生する不具合、損害等については、一切責任を負いかねます。
・本スクリプトの内容は、予告なく修正・変更される可能性があります。
・本スクリプトは、すべての環境・バージョンでの動作を保障するものではありません。
62
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
lump_spreport.sh ソース(1)
63
#!/bin/sh
# * -----------------------------------------------------------------------------------------
# * Script Name : lump_spreport.sh
# * -----------------------------------------------------------------------------------------
# * Explain : 溜めたSTATSPACKレポートをSNAP_IDの昇順で一括出力するシェルスクリプト
# * インスタンス単位で実行してください。
# *
# * このスクリプト実行には、手の加わっていない(インストール時の)
# * $ORACLE_HOME/rdbms/admin/spreport.sql
# * $ORACLE_HOME/rdbms/admin/sprepins.sql
# * が必要です。
# *
# * Caution : STATSPACKレポートを一括出力する場合、CPUに相応の負荷がかかります。
# * 本番環境にて実行される場合は、STATSPACKレポート一括出力にてかかる負荷を
# * 考慮し、システムに影響を与えない時間帯等での実行をお願いします。
# *
# * Created : 2007-01-29 by K.K.Ashisuto 新規作成
# * Modified :
# * -----------------------------------------------------------------------------------------
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
lump_spreport.sh ソース(2)
64
# * -----------------------------------------------------------------------------------------
# * Shell Parameters for this Script
# * -----------------------------------------------------------------------------------------
STATSUSER="perfstat/perfstat" # STATSPACK用スキーマ/パスワードを定義します
REPORTDIR="./spreport";export REPORTDIR
if [ ! -d ${REPORTDIR} ];then
mkdir -p ${REPORTDIR}
fi
echo ""
echo "レポート期間を確認します。"
echo "例)2007-01-25に取得されたsnapshotをレポート化したい場合"
echo " 開始日付けを2007-01-25と入力、終了日付けを2007-01-26と入力します。"
echo ""
echo "レポート化したい開始日付け(YYYY-MM-DD)を入力してください。>> ";read START_DATE
echo ""
echo "レポート化したい終了日付け(YYYY-MM-DD)を入力してください。>> ";read END_DATE
echo ""
# * -----------------------------------------------------------------------------------------
# * Main Processes
# * -----------------------------------------------------------------------------------------
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
lump_spreport.sh ソース(3)
65
cd ${REPORTDIR}
${ORACLE_HOME}/bin/sqlplus -S ${STATSUSER} <<EOF > /dev/null
SET PAGES 0 HEAD OFF FEED OFF TRIMSPOOL ON
SPOOL .snap_list.lst
SELECT snap_id FROM stats¥$snapshot
WHERE instance_number = (SELECT instance_number FROM v¥$instance)
AND snap_time BETWEEN TO_DATE('${START_DATE}','YYYY-MM-DD') AND TO_DATE('${END_DATE}','YYYY-MM-DD')
ORDER BY snap_time ASC;
SPOOL OFF
SPOOL .inst_num
SELECT instance_number FROM v¥$instance;
SPOOL OFF
SET HEAD ON PAGES 50
SPOOL .cat_snap_list.lst
SELECT snap_id,to_char(snap_time,'YYYY-MM-DD HH24:MI:SS') snap_time FROM stats¥$snapshot
WHERE instance_number = (SELECT instance_number FROM v¥$instance)
AND snap_time BETWEEN TO_DATE('${START_DATE}','YYYY-MM-DD') AND TO_DATE('${END_DATE}','YYYY-MM-DD')
ORDER BY snap_time ASC;
SPOOL OFF
EOF
INST=`cat .inst_num | awk '{print $1}'`;export INST
LINE_END=`wc -l .snap_list.lst | awk '{print $1}'`;export LINE_END
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
lump_spreport.sh ソース(4)
66
LINE_LAST=`expr ${LINE_END} - 1`
LINE_CNT=1;export LINE_CNT
echo ""
echo "このインスタンス番号は、${INST} です。"
echo "以下のスナップショットをレポート化します。"
cat .cat_snap_list.lst
echo ""
echo "レポート化には、CPU負荷がかかります。"
echo "実行はシステムに影響の少ない時間帯に行ってください。"
echo "処理を続行してよろしいですか?[YES/NO]" ;read CONTINUE_F
echo ""
#echo "${CONTINUE_F}が選択されました。"
if [ -n "${CONTINUE_F}" ];then
if [ "${CONTINUE_F}" = "YES" -o "${CONTINUE_F}" = "yes" ];then
echo "処理を続行します。"
else
echo "処理は中断されました。"
exit 1
fi
else
echo "処理は中断されました。"
exit 1
fi
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
lump_spreport.sh ソース(5)
67
while [ ${LINE_CNT} -le ${LINE_LAST} ]
do
LINE_NEXT=`expr ${LINE_CNT} + 1`;export LINE_NEXT
START_SNAP=`head -${LINE_CNT} .snap_list.lst | tail -1 | awk '{print $1}'`;export START_SNAP
END_SNAP=`head -${LINE_NEXT} .snap_list.lst | tail -1 | awk '{print $1}'`;export END_SNAP
#echo ${START_SNAP}
#echo ${END_SNAP}
${ORACLE_HOME}/bin/sqlplus ${STATSUSER} <<EOF > /dev/null
DEFINE begin_snap=${START_SNAP}
DEFINE end_snap=${END_SNAP}
DEFINE report_name=sp_${INST}_${START_SNAP}_${END_SNAP}
@?/rdbms/admin/spreport.sql
EOF
LINE_CNT=`expr ${LINE_CNT} + 1`
done
Copyright © 2018 K.K. Ashisuto
日単位レポートを一括取得するシェル
lump_spreport.sh ソース(6)
68
LINE_LAST=`expr ${LINE_END} - 1`
LINE_CNT=1;export LINE_CNT
echo ""
echo "このインスタンス番号は、${INST} です。"
echo "以下のスナップショットをレポート化します。"
cat .cat_snap_list.lst
echo ""
echo "レポート化には、CPU負荷がかかります。"
echo "実行はシステムに影響の少ない時間帯に行ってください。"
echo "処理を続行してよろしいですか?[YES/NO]" ;read CONTINUE_F
echo ""
#echo "${CONTINUE_F}が選択されました。"
if [ -n "${CONTINUE_F}" ];then
if [ "${CONTINUE_F}" = "YES" -o "${CONTINUE_F}" = "yes" ];then
echo "処理を続行します。"
else
echo "処理は中断されました。"
exit 1
fi
else
echo "処理は中断されました。"
exit 1
fi
Copyright © 2018 K.K. Ashisuto
(参考)解決率のさらなるアップのために
Statspackとv$ビューの定期取得を併用いただくと、より解決率がアップします
(弊社実績:91.7%)。定期取得をおすすめするV$ビューのバッチ/シェルスクリ
プトは弊社の Database Support Blogにアップしております。宜しければご
活用ください。
https://www.ashisuto.co.jp/db_blog/article/20161116_perform_view.html

More Related Content

PDF
Rac rac one_node説明資料
PDF
DockerとPodmanの比較
PDF
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
Linux-HA Japanプロジェクトのこれまでとこれから
PDF
はじめてのOracle Cloud Platform
Rac rac one_node説明資料
DockerとPodmanの比較
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
Linux-HA Japanプロジェクトのこれまでとこれから
はじめてのOracle Cloud Platform

What's hot (20)

PDF
Docker道場オンライン#1 Docker基礎概念と用語の理解
PPTX
OCI GoldenGate Overview 2021年4月版
PDF
Oracle GoldenGate FAQ
PDF
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
PDF
Oracle GoldenGate入門
PDF
楽天プロジェクトX:基幹DB移設 編
PDF
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
PDF
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
PDF
PostgreSQL 15の新機能を徹底解説
PDF
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
PDF
Kongの概要と導入事例
PDF
Oracle GoldenGate 概要 2020年11月版
PDF
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
PDF
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
PDF
【旧版】Oracle Exadata Cloud Service:サービス概要のご紹介 [2021年7月版]
PPTX
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
PDF
監査ログをもっと身近に!〜統合監査のすすめ〜
PDF
AWS Database Migration Service ご紹介
PPTX
クラウドでも非機能要求グレードは必要だよね
PDF
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
Docker道場オンライン#1 Docker基礎概念と用語の理解
OCI GoldenGate Overview 2021年4月版
Oracle GoldenGate FAQ
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
Oracle GoldenGate入門
楽天プロジェクトX:基幹DB移設 編
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
PostgreSQL 15の新機能を徹底解説
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
Kongの概要と導入事例
Oracle GoldenGate 概要 2020年11月版
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
【旧版】Oracle Exadata Cloud Service:サービス概要のご紹介 [2021年7月版]
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
監査ログをもっと身近に!〜統合監査のすすめ〜
AWS Database Migration Service ご紹介
クラウドでも非機能要求グレードは必要だよね
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
Ad

Similar to [db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStatspack活用術!』 (20)

PDF
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
PPTX
DBA から開発者への情報提供
PDF
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
PDF
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
PDF
C13 SQL Server2012知られざるTips集 by 平山理
PPTX
ここからはじめる SQL Server の状態取得
PDF
デモとディスカッションで体験するOracle DBトラブル対応
PPT
プロとしてのOracleアーキテクチャ入門 ~番外編~
PDF
Sql server data store data access internals
PPTX
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
PDF
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
PDF
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
PDF
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
PPTX
SQL Server 2019 とともに知る Microsoft Data Platform
PDF
[C14] ソーシャル ゲーム基盤を支える SQL Server by Takashi Inaba
PDF
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
PDF
Sql database その裏側に迫る
PDF
SQL Server パフォーマンスカウンター
PDF
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
PPTX
Microsoft Azure SQLマネージド インスタンスのソースとしての利用
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
DBA から開発者への情報提供
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
C13 SQL Server2012知られざるTips集 by 平山理
ここからはじめる SQL Server の状態取得
デモとディスカッションで体験するOracle DBトラブル対応
プロとしてのOracleアーキテクチャ入門 ~番外編~
Sql server data store data access internals
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
SQL Server 2019 とともに知る Microsoft Data Platform
[C14] ソーシャル ゲーム基盤を支える SQL Server by Takashi Inaba
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
Sql database その裏側に迫る
SQL Server パフォーマンスカウンター
[Oracle Code Tokyo 2017] Live Challenge!! SQLパフォーマンスの高速化の限界を目指せ!
Microsoft Azure SQLマネージド インスタンスのソースとしての利用
Ad

More from Insight Technology, Inc. (20)

PDF
グラフデータベースは如何に自然言語を理解するか?
PDF
Docker and the Oracle Database
PDF
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
PDF
事例を通じて機械学習とは何かを説明する
PDF
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
PDF
MBAAで覚えるDBREの大事なおしごと
PDF
グラフデータベースは如何に自然言語を理解するか?
PDF
DBREから始めるデータベースプラットフォーム
PDF
SQL Server エンジニアのためのコンテナ入門
PDF
Lunch & Learn, AWS NoSQL Services
PDF
db tech showcase2019オープニングセッション @ 森田 俊哉
PDF
db tech showcase2019 オープニングセッション @ 石川 雅也
PDF
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
PPTX
難しいアプリケーション移行、手軽に試してみませんか?
PPTX
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
PPTX
そのデータベース、クラウドで使ってみませんか?
PPTX
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
PDF
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
PPTX
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
PPTX
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
グラフデータベースは如何に自然言語を理解するか?
Docker and the Oracle Database
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
事例を通じて機械学習とは何かを説明する
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
MBAAで覚えるDBREの大事なおしごと
グラフデータベースは如何に自然言語を理解するか?
DBREから始めるデータベースプラットフォーム
SQL Server エンジニアのためのコンテナ入門
Lunch & Learn, AWS NoSQL Services
db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
難しいアプリケーション移行、手軽に試してみませんか?
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
そのデータベース、クラウドで使ってみませんか?
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]

[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStatspack活用術!』

  • 1. Copyright © 2018 K.K. Ashisuto サポートのトップエンジニアが語る ワンランク上のStatspack 活用術! 株式会社アシスト サポートセンター 地宗 幸代 1
  • 2. Copyright © 2018 K.K. Ashisuto 自己紹介 地宗 幸代(ちそう さちよ) サポート歴:15年以上 ・担当製品: Oracle Database、Oracle Real Application Clusters、 WebLogic Server、Oracle Cloud ・Oracle Database トラブル調査テクニック 講師 2
  • 3. Copyright © 2018 K.K. Ashisuto アジェンダ 1. Statspack とは? 2. しきい値の変更 3. SQL全文の確認 4. Snapshot取得レベル変更 5. 領域管理の注意点 6. 便利なレポート出力方法 3
  • 4. Copyright © 2018 K.K. Ashisuto アジェンダ 1. Statspack とは? 2. しきい値の変更 3. SQL全文の確認 4. Snapshot取得レベル変更 5. 領域管理の注意点 6. 便利なレポート出力方法 4
  • 5. Copyright © 2018 K.K. Ashisuto 突然ですが質問です Q:パフォーマンス障害が発生! 障害発生中のパフォーマンス情報が取得できて いなかった場合の問題解決率は? 5 解決 未解決 41.7%
  • 6. Copyright © 2018 K.K. Ashisuto パフォーマンス障害の解決率 Statspackを定期的に取得するとパフォーマンス障害の解決率が 約2倍にアップ! 6 41.7 80 0 25 50 75 100 情報取得なし Statspackの 定期取得あり 解決率(%) ※2015年7月~2016年6月のアシスト サポートセンターの問合せ内での解決率 解決率 2倍 パフォーマンス障害の解決率(%)
  • 7. Copyright © 2018 K.K. Ashisuto Statspackとは? DBの稼働統計をレポートするツール ・DBの稼働情報を snapshot として取得、蓄積 ・取得済 snapshot の範囲内でレポートを出力 ・インストール手順はspdoc.txtに記載 $ORACLE_HOME/rdbms/admin/spdoc.txt 7
  • 8. Copyright © 2018 K.K. Ashisuto Statspackとは? イメージ 8 snapshot 9:00 snapshot 12:00 snapshot 15:00 snapshot 18:00 9:00~12:00 の稼働レポート 15:00~18:00 の稼働レポート 12:00~15:00 の稼働レポート 9:00~18:00 の稼働レポートデータベース
  • 9. Copyright © 2018 K.K. Ashisuto Statspackとは? snapshotの取得方法 9 SQL> execute statspack.snap ※perfstat(statspack用ユーザ)にて実行 DBインスタンス接続して以下のコマンドを実行
  • 10. Copyright © 2018 K.K. Ashisuto Statspackとは? Statspackレポートの出力方法 10 SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql ※perfstat(statspack用ユーザ)にて実行 DBインスタンス接続して以下のスクリプトを実行 ・実行後にレポート対象のsnapshotの範囲指定が求められます。
  • 11. Copyright © 2018 K.K. Ashisuto Statspackとは? 例えばこんなことがレポートされます(1) 11 Instance CPU ~~~~~~~~~~~~ % Time (seconds) -------- -------------- Host: Total time (s): 515,680.1 Host: Busy CPU time (s): 50,494.9 % of time Host is Busy: 9.8 Instance: Total CPU time (s): 79.6 % of Busy CPU used for Instance: 0.2 Instance: Total Database time (s): 145.1 %DB time waiting for CPU (Resource Mgr): 0.0 Memory Statistics Begin End ~~~~~~~~~~~~~~~~~ ------------ ------------ Host Mem (MB): 258,086.2 258,086.2 SGA use (MB): 8,192.0 8,192.0 PGA use (MB): 376.8 374.1 % Host Mem used for SGA+PGA: 3.3 3.3 CPU メモリ 使用状況 DB・ホスト全体
  • 12. Copyright © 2018 K.K. Ashisuto Statspackとは? 例えばこんなことがレポートされます(2) 12 待機 イベント セッションの待機 時間とその種類 Avg %Total %Tim Total Wait wait Waits Call Event Waits out Time (s) (ms) /txn Time ---------------------------- ------------ ---- ---------- ------ -------- ------ db file sequential read 556 0 3 5 2.1 .0 control file sequential read 2,544 0 0 0 9.5 .0 Disk file operations I/O 1,882 0 0 0 7.0 .0 db file scattered read 35 0 0 4 0.1 .0 Disk file Mirror Read 691 0 0 0 2.6 .0 db file parallel read 8 0 0 10 0.0 .0 row cache lock 1,518 0 0 0 5.7 .0 SQL*Net break/reset to clien 1,462 0 0 0 5.5 .0 enq: IV - contention 280 0 0 0 1.0 .0 control file parallel write 20 0 0 0 0.1 .0 log file sync 22 0 0 0 0.1 .0 SQL*Net message from client 3,592 0 15,755 4386 13.5 jobq slave wait 3,786 100 1,894 500 14.2 SQL*Net message to client 3,592 0 0 0 13.5
  • 13. Copyright © 2018 K.K. Ashisuto Statspackとは? 例えばこんなことがレポートされます(3) 13 ディスク 読込みの 多いSQL SQL ordered by Reads DB/Inst: ORCL/orcl1 Snaps: 6457-6459 -> End Disk Reads Threshold: 1000 Total Disk Reads: 5,555 -> Captured SQL accounts for 47.7% of Total Disk Reads -> SQL reported below exceeded 1.0% of Total Disk Reads CPU Elapsd Physical Rds Executions Rds per Exec %Total Time (s) Time (s) Hash Value --------------- ------------ -------------- ------ -------- --------- ---------- select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#,length,piece fr om idl_ub1$ where obj#=:1 and part=:2 and version=:3 order by pi ece# 107 3 35.7 1.9 1.38 1.63 4051972239 Module: DBMS_SCHEDULER DECLARE job BINARY_INTEGER := :job; next_date TIMESTAMP WITH TI ME ZONE := :mydate; broken BOOLEAN := FALSE; job_name VARCHAR2 (30) := :job_name; job_subname VARCHAR2(30) := :job_subname; j ob_owner VARCHAR2(30) := :job_owner; job_start TIMESTAMP WITH T 95 222 0.4 1.7 1.37 1.59 3528632252
  • 14. Copyright © 2018 K.K. Ashisuto Statspackとは? ・Statspackレポートの一般的な見方はWEB上にも 多数公開されています。 ・詳細はそちらに譲るとして、本日はStatspackの さらなる活用方法や実運用上の注意点をご案内します。 14
  • 15. Copyright © 2018 K.K. Ashisuto アジェンダ 1. Statspack とは? 2. しきい値の変更 3. SQL全文の確認 4. Snapshot取得レベル変更 5. 領域管理の注意点 6. 便利なレポート出力方法 15
  • 16. Copyright © 2018 K.K. Ashisuto Statspackとは? 例えばこんなことがレポートされます(3) 16 ディスク 読込みの 多いSQL SQL ordered by Reads DB/Inst: ORCL/orcl1 Snaps: 6457-6459 -> End Disk Reads Threshold: 1000 Total Disk Reads: 5,555 -> Captured SQL accounts for 47.7% of Total Disk Reads -> SQL reported below exceeded 1.0% of Total Disk Reads CPU Elapsd Physical Rds Executions Rds per Exec %Total Time (s) Time (s) Hash Value --------------- ------------ -------------- ------ -------- --------- ---------- select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#,length,piece fr om idl_ub1$ where obj#=:1 and part=:2 and version=:3 order by pi ece# 107 3 35.7 1.9 1.38 1.63 4051972239 Module: DBMS_SCHEDULER DECLARE job BINARY_INTEGER := :job; next_date TIMESTAMP WITH TI ME ZONE := :mydate; broken BOOLEAN := FALSE; job_name VARCHAR2 (30) := :job_name; job_subname VARCHAR2(30) := :job_subname; j ob_owner VARCHAR2(30) := :job_owner; job_start TIMESTAMP WITH T 95 222 0.4 1.7 1.37 1.59 3528632252
  • 17. Copyright © 2018 K.K. Ashisuto Statspackとは? 例えばこんなことがレポートされます(3) 17 ディスク 読込みの 多いSQL SQL ordered by Reads DB/Inst: RACOKAKI/racokaki1 Snaps: 6457-6459 -> End Disk Reads Threshold: 1000 Total Disk Reads: 5,555 -> Captured SQL accounts for 47.7% of Total Disk Reads -> SQL reported below exceeded 1.0% of Total Disk Reads CPU Elapsd Physical Rds Executions Rds per Exec %Total Time (s) Time (s) Hash Value --------------- ------------ -------------- ------ -------- --------- ---------- select /*+ index(idl_ub1$ i_idl_ub11) +*/ piece#,length,piece fr om idl_ub1$ where obj#=:1 and part=:2 and version=:3 order by pi ece# 107 3 35.7 1.9 1.38 1.63 4051972239 Module: DBMS_SCHEDULER DECLARE job BINARY_INTEGER := :job; next_date TIMESTAMP WITH TI ME ZONE := :mydate; broken BOOLEAN := FALSE; job_name VARCHAR2 (30) := :job_name; job_subname VARCHAR2(30) := :job_subname; j ob_owner VARCHAR2(30) := :job_owner; job_start TIMESTAMP WITH T 95 222 0.4 1.7 1.37 1.59 3528632252 多いって どのくらい?
  • 18. Copyright © 2018 K.K. Ashisuto しきい値の変更 Snapshotで情報採取されるSQLはしきい値で決まる しきい値の内容 パラメータ デフォルト値 SQL実行回数 i_executions_th 100 ディスク読込ブロック数 i_disk_reads_th 1000 パース発生回数 i_parse_calls_th 1000 Buffer読込数 i_buffer_gets_th 10000 共有メモリの合計使用量 i_sharable_mem_th 1048576 子カーソルの数 i_version_count_th 20 18
  • 19. Copyright © 2018 K.K. Ashisuto しきい値の変更 しきい値の変更方法 19 SQL> execute statspack.modify_statspack_parameter - (i_disk_reads_th=>500); ※perfstat(statspack用ユーザ)にて実行 例:ディスク読込ブロック数のしきい値を500に設定
  • 20. Copyright © 2018 K.K. Ashisuto しきい値の変更 しきい値の変更を確認 20 SQL> select disk_reads_th from stats$statspack_parameter; DISK_READS_TH ------------- 500
  • 21. Copyright © 2018 K.K. Ashisuto しきい値の変更 レポートに表示されるSQL文の数の変更方法 $ORACLE_HOME/rdbms/admin/sprepcon.sql を編集 ○表示されるSQL文の数を指定するパラメータ (変更前) define top_n_sql = 65; (変更後) define top_n_sql = 500; 21
  • 22. Copyright © 2018 K.K. Ashisuto アジェンダ 1. Statspack とは? 2. しきい値の変更 3. SQL全文の確認 4. Snapshot取得レベル変更 5. 領域管理の注意点 6. 便利なレポート出力方法 22
  • 23. Copyright © 2018 K.K. Ashisuto SQL全文の確認 デフォルトではSQL文は4行分しか表示されない 23 Elapsed Elap per CPU Old Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value ---------- ------------ ---------- ------ ---------- --------------- ---------- 5.15 2,173 0.00 39.1 3.09 0 1367836129 Module: Streams select queue_id, queue_schema, queue_name, subscriber_id, subscr iber_name, inst_id, latency_state, latency, dequeue_re quests, active_shards, active_listener, flags, con_i d from gv$aq_subscribe 2.83 192 0.01 21.5 2.82 0 1297986421 Module: DBMS_SCHEDULER SELECT OWNER, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE, TABLES PACE_NAME, TABLESPACE_ID FROM SYS.SYS_DBA_SEGS WHERE SEGMENT_OBJ D = :B1 AND SEGMENT_TYPE <> 'ROLLBACK' AND SEGMENT_TYPE <> 'TYPE 2 UNDO' AND SEGMENT_TYPE <> 'DEFERRED ROLLBACK' AND SEGMENT_TYPE 1.79 454 0.00 13.6 1.22 1 4288707916 begin dbsnmp.bsln_internal.maintain_thresholds; end; SQL文が途切れて 全文が見えない
  • 24. Copyright © 2018 K.K. Ashisuto SQL全文の確認 表示設定の変更方法 $ORACLE_HOME/rdbms/admin/sprepcon.sql を編集 ○SQLの表示行数を指定するパラメータ (変更前) define num_rows_per_hash = 4; (変更後) define num_rows_per_hash = 100; 24
  • 25. Copyright © 2018 K.K. Ashisuto SQL全文の確認 変更後にレポート再取得でSQL文全文確認可能 25 Elapsed Elap per CPU Old Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value ---------- ------------ ---------- ------ ---------- --------------- ---------- 2.83 192 0.01 21.5 2.82 0 1297986421 Module: DBMS_SCHEDULER SELECT OWNER, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE, TABLES PACE_NAME, TABLESPACE_ID FROM SYS.SYS_DBA_SEGS WHERE SEGMENT_OBJ D = :B1 AND SEGMENT_TYPE <> 'ROLLBACK' AND SEGMENT_TYPE <> 'TYPE 2 UNDO' AND SEGMENT_TYPE <> 'DEFERRED ROLLBACK' AND SEGMENT_TYPE 1.79 454 0.00 13.6 1.22 1 4288707916 Elapsed Elap per CPU Old Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value ---------- ------------ ---------- ------ ---------- --------------- ---------- 2.83 192 0.01 21.5 2.82 0 1297986421 Module: DBMS_SCHEDULER SELECT OWNER, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE, TABLES PACE_NAME, TABLESPACE_ID FROM SYS.SYS_DBA_SEGS WHERE SEGMENT_OBJ D = :B1 AND SEGMENT_TYPE <> 'ROLLBACK' AND SEGMENT_TYPE <> 'TYPE 2 UNDO' AND SEGMENT_TYPE <> 'DEFERRED ROLLBACK' AND SEGMENT_TYPE <> 'TEMPORARY' AND SEGMENT_TYPE <> 'CACHE' AND SEGMENT_TYPE <> 'SPACE HEADER' AND SEGMENT_TYPE <> 'UNDEFINED' AND TABLESPACE_NA ME NOT IN ('SYSAUX' , 'SYSTEM') 1.79 454 0.00 13.6 1.22 1 4288707916 ●設定変更前 ●設定変更後
  • 26. Copyright © 2018 K.K. Ashisuto アジェンダ 1. Statspack とは? 2. しきい値の変更 3. SQL全文の確認 4. Snapshot取得レベル変更 5. 領域管理の注意点 6. 便利なレポート出力方法 26
  • 27. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 Snapshot には取得レベルがある 27 SQL> select snap_id,instance_number,snap_time,snap_level from stats$snapshot order by 1; SNAP_ID INSTANCE_NUMBER SNAP_TIME SNAP_LEVEL ---------- --------------- ------------------- ---------- 16 1 2017/10/17 13:16:17 5 17 1 2017/10/17 13:16:20 5 18 1 2017/10/17 17:29:49 5 19 1 2017/10/17 17:29:52 5 20 1 2017/10/17 17:29:52 5 21 1 2017/10/17 17:29:53 5 22 1 2017/10/17 17:29:54 5 23 1 2017/10/17 17:30:09 5 24 1 2017/10/17 17:30:10 5 9 rows selected. SQL> デフォルトは レベル5 ※取得済みのsnapshotのレベルは stats$snapshotのsnap_level列で確認可能
  • 28. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 Snapshot の取得レベル変更方法 28 SQL> execute statspack.modify_statspack_parameter - (i_snap_level=>6); ※perfstat(statspack用ユーザ)にて実行 例:レベル6に変更する場合
  • 29. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 29 • SQL単位での処理時間統計 • SQLの実行計画とその変化SQLレポート • セグメント別のI/O統計 • セグメント別の行ロック、ITL待機統計セグメント情報 • 親/子ラッチの情報 • サポートから指示があった場合に取得ラッチ情報 レベル6 レベル7 レベル10 取得レベル別の追加情報
  • 30. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 レベル6 SQLレポートの出力方法 30 SQL> @$ORACLE_HOME/rdbms/admin/sprepsql.sql ※perfstat(statspack用ユーザ)にて実行 DBインスタンスに接続して以下スクリプトを実行 ・実行後に対象のSQLが含まれるsnapshotの範囲指定と Hash Value値の入力が求められます。 レベル6 SQLレポート
  • 31. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 Hash Value の確認方法 Statspackレポート内の Old Hash Value列から確認 31 Elapsed Elap per CPU Old Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value ---------- ------------ ---------- ------ ---------- --------------- ---------- 5.15 2,173 0.00 39.1 3.09 0 1367836129 Module: Streams select queue_id, queue_schema, queue_name, subscriber_id, subscr iber_name, inst_id, latency_state, latency, dequeue_re quests, active_shards, active_listener, flags, con_i d from gv$aq_subscribe Hash Value値 レベル6 SQLレポート
  • 32. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 SQLレポートより抜粋 Start Id Start Time End Id End Time Duration(mins) --------- ------------------- --------- ------------------- -------------- 193 10-Nov-17 02:47:05 257 10-Nov-17 13:32:32 645.45 SQL Statistics : : % Snap Statement Total Per Execute Total --------------- --------------- ------ Buffer Gets: 22,386 520.6 1.03 Disk Reads: 0 0.0 .00 Rows processed: 3,873 90.1 CPU Time(s/ms): 0 3.9 Elapsed Time(s/ms): 0 3.9 : : 32 レベル6 SQLレポート
  • 33. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 SQLレポートより抜粋 SQL Text ~~~~~~~~ delete /*+ dynamic_sampling(m 4) dynamic_sampling_est_cdn(m) */ from sys.mon_mods$ m where exists (select /*+ unnest */ * from sys.tab$ t where t.obj# = m.obj#) Known Optimizer Plan(s) for this Old Hash Value : First First Last Plan Snap Id Snap Time Active Time Hash Value Cost --------- --------------- --------------- ------------ ---------- 191 10-Nov-17 02:26 10-Nov-17 13:34 805044450 4 191 10-Nov-17 02:26 05-Nov-17 14:02 3469818654 200 33 レベル6 SQLレポート 複数行の出力 実行計画 に変化あり
  • 34. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 SQLレポートより抜粋(Plans in shared pool between Begin and End Snap Ids) -------------------------------------------------------------------------------- | Operation | PHV/Object Name | Rows | Bytes| Cost | -------------------------------------------------------------------------------- |DELETE STATEMENT |----- 805044450 -----| | | 4 | |DELETE |MON_MODS$ | | | | | FILTER | | | | | | TABLE ACCESS FULL |MON_MODS$ | 187 | 2K| 2 | | TABLE ACCESS CLUSTER |TAB$ | 1 | 5 | 2 | | INDEX UNIQUE SCAN |I_OBJ# | 1 | | 1 | |DELETE STATEMENT |----- 3469818654 ----| | | 200 | |DELETE |MON_MODS$ | | | | | NESTED LOOPS SEMI | | 19 | 114 | 200 | | TABLE ACCESS FULL |MON_MODS$ | 99 | 1K| 2 | | VIEW PUSHED PREDICATE |VW_SQ_1 | 1 | 2 | 2 | | TABLE ACCESS CLUSTER |TAB$ | 1 | 5 | 2 | | INDEX UNIQUE SCAN |I_OBJ# | 1 | | 1 | -------------------------------------------------------------------------------- 34 レベル6 SQLレポート 遅延時は 青字の 実行計画へ 変更を検討
  • 35. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 SQLレポートの活用例 35 レベル6 SQLレポート 1.パフォーマンス遅延が発生 2.該当時間帯のSQLレポートを出力 実行計画の変化を確認 3.統計情報のリストアやヒント句等で 実行計画を戻すことを検討
  • 36. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 レベル7ではセグメント別の情報をレポート ・物理I/O ・バッファ読込 ・アクセス競合(SGA上、ITL、行ロック) ・ブロックの変更数 36 レベル7 セグメント情報
  • 37. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 レベル7 セグメント別統計 Segments by Physical Reads DB/Inst: ORCL/orcl1 Snaps: 108-265 -> End Segment Physical Reads Threshold: 1000 Subobject Obj. Physical Pct Owner Tablespace Object Name Name Type Reads Total ---------- ---------- -------------------- ------------ ----- ------------ ----- TEST USERS TEST_TAB TABLE 1,318 58.8 SYS SYSAUX WRI$_OPTSTAT_HISTGRM SYS_P730 TABLE 187 8.3 SOE USERS SYS_LOB0000008303C00 LOB 156 7.0 SYS SYSAUX WRH$_LATCH_PK 24639_1380 INDEX 130 5.8 SOE SOE SEGV TABLE 78 3.5 ------------------------------------------------------------- 37 レベル7 セグメント情報
  • 38. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 Snapshotで採取されるセグメントはしきい値で決まる しきい値の内容 パラメータ デフォルト値 物理読込発生数 i_seg_phy_reads_th 1000 論理読込発生数 i_seg_log_reads_th 10000 ブロック競合の発生回数 i_seg_buff_busy_th 100 行ロックの発生回数 i_seg_rowlock_w_th 100 ITL待機の発生数 i_seg_itl_waits_th 100 crブロック数(※) i_seg_cr_bks_sd_th 1000 currentブロック数(※) i_seg_cu_bks_sd_th 1000 (※)・・・・・RAC環境でのみ有効 38 レベル7 セグメント情報
  • 39. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 しきい値の変更方法 レポートに表示されるセグメント数の変更方法 ○$ORACLE_HOME/rdbms/admin/sprepcon.sql の以下のパラメータを編集 define top_n_segstat = 5; 39 SQL> execute statspack.modify_statspack_parameter - (i_seg_phy_reads_th=>2000); ※perfstat(statspack用ユーザ)にて実行 レベル7 セグメント情報
  • 40. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 負荷が集中しやすいセグメントを特定 40 レベル7 セグメント情報 1.負荷が集中しやすいセグメントを特定 2.パーティション化やテーブル分離し、 配置する物理ディスクを分散 3.アクセスを分散させる
  • 41. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 レベル10 ラッチ情報 ・ラッチとはDB内の内部処理を順序制御するロック機構 ・このレベルはSnapshot取得にリソースを大量に消費 ・サポートより指示があった場合のみ使用してください 41 レベル10 ラッチ情報
  • 42. Copyright © 2018 K.K. Ashisuto Snapshot取得レベル変更 42 • SQL単位での処理時間統計 • SQLの実行計画とその変化SQLレポート • セグメント別のI/O統計 • セグメント別の行ロック、ITL待機統計セグメント情報 • 親/子ラッチの情報 • サポートから指示があった場合に取得ラッチ情報 レベル6 レベル7 レベル10 どの取得レベルが良い?
  • 43. Copyright © 2018 K.K. Ashisuto アジェンダ 1. Statspack とは? 2. しきい値の変更 3. SQL全文の確認 4. Snapshot取得レベル変更 5. 領域管理の注意点 6. 便利なレポート出力方法 43
  • 44. Copyright © 2018 K.K. Ashisuto 領域管理の注意点 Snapshotは定期的な削除が必要 44 SQL> @$ORACLE_HOME/rdbms/admin/sppurge.sql ※perfstat(statspack用ユーザ)にて実行 DBインスタンス接続後に以下のスクリプトを実行 ・実行後に削除対象のSnapshot ID指定を求められます。
  • 45. Copyright © 2018 K.K. Ashisuto 領域管理の注意点 sppurge.sqlは内部的にdeleteを実行 ・snapshot実体は複数のテーブルデータ(stats$xxxx) ・sppurge はテーブルへのdeleteを実行 45 テーブル(segment) 再利用可能領域 イメージ:snapshot格納テーブル(sppurge.sql 実行後) 削除データ分の 領域は未解放 肥大化した場合 は縮小が必要 使用中領域
  • 46. Copyright © 2018 K.K. Ashisuto 領域管理の注意点 stats$肥大化時のshrink方法 46 SQL> ALTER TABLE STATS$XXXXX ENABLE ROW MOVEMENT; SQL> ALTER TABLE STATS$XXXXX SHRINK SPACE; ※perfstat(statspack用ユーザ)にて実行
  • 47. Copyright © 2018 K.K. Ashisuto 領域管理の注意点 削除時の注意点 ・sppurge.sqlでは一部関連オブジェクトが 削除されない ・statspack.purgeを使用して i_extended_purge =true の付与で 関連オブジェクトを含めて削除 47
  • 48. Copyright © 2018 K.K. Ashisuto 領域管理の注意点 i_extended_purge =true の付与 48 SQL> exec statspack.purge(i_begin_snap=>1,- i_end_snap=>10, i_extended_purge=>TRUE); ※perfstat(statspack用ユーザ)にて実行 i_begin_snap と i_end_snap で削除対象のSnapshot ID 範囲を指定。以下はsnap_id 1~10 を削除する例。
  • 49. Copyright © 2018 K.K. Ashisuto 領域管理の注意点 i_extended_purge =true の付与時の注意点 ・sppurge.sql 実行より多くのリソースを消費 ・負荷の高い時間帯は避けて実行 49
  • 50. Copyright © 2018 K.K. Ashisuto 領域管理の注意点 ・肥大化させないよう定期的な削除を ・削除時には i_extended_purge =true 50
  • 51. Copyright © 2018 K.K. Ashisuto アジェンダ 1. Statspack とは? 2. しきい値の変更 3. SQL全文の確認 4. Snapshot取得レベル変更 5. 領域管理の注意点 6. 便利なレポート出力方法 51
  • 52. Copyright © 2018 K.K. Ashisuto 便利なレポート出力方法 spreport.sqlで一度に出力可能なレポートは一つのみ ・レポートの出力方法は spreport.sql 実行のみ ・細かく刻んで出力させたい場合は手間がかかる 52
  • 53. Copyright © 2018 K.K. Ashisuto 便利なレポート出力方法 日単位の指定でレポートを一括で取得 ・アシスト作成のスクリプト(lump_spreport.sh)をご紹介 ・スクリプト詳細は Linux 版のみ本資料末に補足資料に記載。 ※後日資料ダウンロード後にご利用ください。 ※Windows版はDatabase Support Blogで公開中です。 53 https://www.ashisuto.co.jp/db_blog/article/201712-statspack-report.html
  • 54. Copyright © 2018 K.K. Ashisuto 便利なレポート出力方法 実行例 54 [oracle@support52 work]$ ./lump_spreport.sh レポート期間を確認します。 例)2007-01-25に取得されたsnapshotをレポート化したい場合 開始日付けを2007-01-25と入力、終了日付けを2007-01-26と入力します。 レポート化したい開始日付け(YYYY-MM-DD)を入力してください。>> 2017-11-09 日付を入力 レポート化したい終了日付け(YYYY-MM-DD)を入力してください。>> 2017-11-10 日付を入力 DBインストールユーザでスクリプトを実行 ・実行後にレポートを出力する日付範囲の指定が求められます。
  • 55. Copyright © 2018 K.K. Ashisuto 便利なレポート出力方法 実行例 55 このインスタンス番号は、2 です。 以下のスナップショットをレポート化します。 SNAP_ID SNAP_TIME ---------- ------------------- 108 2017-11-09 11:57:40 109 2017-11-09 11:58:31 110 2017-11-09 12:00:31 (中略) 114 2017-11-09 18:32:55 115 2017-11-09 18:43:00 116 2017-11-09 18:53:05
  • 56. Copyright © 2018 K.K. Ashisuto 便利なレポート出力方法 実行例 56 レポート化には、CPU負荷がかかります。 実行はシステムに影響の少ない時間帯に行ってください。 処理を続行してよろしいですか?[YES/NO] YES  ”YES”を入力し[ENTER]を実行すると処理開始。 ”NO” を入力し[ENTER]を実行すると処理は中断されます。 処理を続行します。 [oracle@support52 work]$ [oracle@support52 work]$ cd ./spreport  カレントディレクトリ下にspreportと いうディレクトリが作成され、レポート [oracle@support52 spreport]$ ls が出力されます。 sp_2_108_109.lst sp_2_110_111.lst sp_2_112_113.lst sp_2_114_115.lst sp_2_109_110.lst sp_2_111_112.lst sp_2_113_114.lst sp_2_115_116.lst [oracle@support52 spreport]$
  • 57. Copyright © 2018 K.K. Ashisuto まとめ Statspackは 57 使い方次第で 便利な 診断ツール 環境や問題 に適した スナップショット 取得で 効果大 サポセンへの 連携で 障害解決率 アップ 使用の際は運用管理の意識も
  • 58. Copyright © 2018 K.K. Ashisuto 58 ※本資料に記載している情報は、2018年9月21日現在のものです。 ※本資料の内容は、今後予告なく変更されることがあります。 ※OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。 ※文中の社名、商品名等は各社の商標または登録商標である場合があります。
  • 59. Copyright © 2018 K.K. Ashisuto 補足資料 59
  • 60. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル README ◆スクリプトの概要 ===================== このスクリプトは、取得したSTATSPACKレポートを指定日付範囲で出力するスクリプトです。 このスクリプトは、インスタンス単位で実行されることを想定しています。 RAC環境では、それぞれのインスタンスで実行してください。 このスクリプト実行には、手の加わっていない(インストール時の) $ORACLE_HOME/rdbms/admin/spreport.sql $ORACLE_HOME/rdbms/admin/sprepins.sql が必要です。 60
  • 61. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル README ◆スクリプトの使い方 ===================== 1. スクリプト内で修正が必要なのは、以下の変数です。 ORACLE_HOME →実行する環境のORACLE_HOMEを指定してください。 STATSUSER →STATSPACK実行ユーザ/パスワードを指定してください。 2. oracleアカウントで本スクリプト(lump_spreport.sh)を実行します。 61
  • 62. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル README ◆免責事項 ===================== ・本スクリプトは、サンプルとして提供されるものであり 本スクリプト使用による損害については一切責任を負いかねます。 ・本スクリプトの修正については、自由に行っていただいてもかまいませんが、 修正したことによって発生する不具合、損害等については、一切責任を負いかねます。 ・本スクリプトの内容は、予告なく修正・変更される可能性があります。 ・本スクリプトは、すべての環境・バージョンでの動作を保障するものではありません。 62
  • 63. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル lump_spreport.sh ソース(1) 63 #!/bin/sh # * ----------------------------------------------------------------------------------------- # * Script Name : lump_spreport.sh # * ----------------------------------------------------------------------------------------- # * Explain : 溜めたSTATSPACKレポートをSNAP_IDの昇順で一括出力するシェルスクリプト # * インスタンス単位で実行してください。 # * # * このスクリプト実行には、手の加わっていない(インストール時の) # * $ORACLE_HOME/rdbms/admin/spreport.sql # * $ORACLE_HOME/rdbms/admin/sprepins.sql # * が必要です。 # * # * Caution : STATSPACKレポートを一括出力する場合、CPUに相応の負荷がかかります。 # * 本番環境にて実行される場合は、STATSPACKレポート一括出力にてかかる負荷を # * 考慮し、システムに影響を与えない時間帯等での実行をお願いします。 # * # * Created : 2007-01-29 by K.K.Ashisuto 新規作成 # * Modified : # * -----------------------------------------------------------------------------------------
  • 64. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル lump_spreport.sh ソース(2) 64 # * ----------------------------------------------------------------------------------------- # * Shell Parameters for this Script # * ----------------------------------------------------------------------------------------- STATSUSER="perfstat/perfstat" # STATSPACK用スキーマ/パスワードを定義します REPORTDIR="./spreport";export REPORTDIR if [ ! -d ${REPORTDIR} ];then mkdir -p ${REPORTDIR} fi echo "" echo "レポート期間を確認します。" echo "例)2007-01-25に取得されたsnapshotをレポート化したい場合" echo " 開始日付けを2007-01-25と入力、終了日付けを2007-01-26と入力します。" echo "" echo "レポート化したい開始日付け(YYYY-MM-DD)を入力してください。>> ";read START_DATE echo "" echo "レポート化したい終了日付け(YYYY-MM-DD)を入力してください。>> ";read END_DATE echo "" # * ----------------------------------------------------------------------------------------- # * Main Processes # * -----------------------------------------------------------------------------------------
  • 65. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル lump_spreport.sh ソース(3) 65 cd ${REPORTDIR} ${ORACLE_HOME}/bin/sqlplus -S ${STATSUSER} <<EOF > /dev/null SET PAGES 0 HEAD OFF FEED OFF TRIMSPOOL ON SPOOL .snap_list.lst SELECT snap_id FROM stats¥$snapshot WHERE instance_number = (SELECT instance_number FROM v¥$instance) AND snap_time BETWEEN TO_DATE('${START_DATE}','YYYY-MM-DD') AND TO_DATE('${END_DATE}','YYYY-MM-DD') ORDER BY snap_time ASC; SPOOL OFF SPOOL .inst_num SELECT instance_number FROM v¥$instance; SPOOL OFF SET HEAD ON PAGES 50 SPOOL .cat_snap_list.lst SELECT snap_id,to_char(snap_time,'YYYY-MM-DD HH24:MI:SS') snap_time FROM stats¥$snapshot WHERE instance_number = (SELECT instance_number FROM v¥$instance) AND snap_time BETWEEN TO_DATE('${START_DATE}','YYYY-MM-DD') AND TO_DATE('${END_DATE}','YYYY-MM-DD') ORDER BY snap_time ASC; SPOOL OFF EOF INST=`cat .inst_num | awk '{print $1}'`;export INST LINE_END=`wc -l .snap_list.lst | awk '{print $1}'`;export LINE_END
  • 66. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル lump_spreport.sh ソース(4) 66 LINE_LAST=`expr ${LINE_END} - 1` LINE_CNT=1;export LINE_CNT echo "" echo "このインスタンス番号は、${INST} です。" echo "以下のスナップショットをレポート化します。" cat .cat_snap_list.lst echo "" echo "レポート化には、CPU負荷がかかります。" echo "実行はシステムに影響の少ない時間帯に行ってください。" echo "処理を続行してよろしいですか?[YES/NO]" ;read CONTINUE_F echo "" #echo "${CONTINUE_F}が選択されました。" if [ -n "${CONTINUE_F}" ];then if [ "${CONTINUE_F}" = "YES" -o "${CONTINUE_F}" = "yes" ];then echo "処理を続行します。" else echo "処理は中断されました。" exit 1 fi else echo "処理は中断されました。" exit 1 fi
  • 67. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル lump_spreport.sh ソース(5) 67 while [ ${LINE_CNT} -le ${LINE_LAST} ] do LINE_NEXT=`expr ${LINE_CNT} + 1`;export LINE_NEXT START_SNAP=`head -${LINE_CNT} .snap_list.lst | tail -1 | awk '{print $1}'`;export START_SNAP END_SNAP=`head -${LINE_NEXT} .snap_list.lst | tail -1 | awk '{print $1}'`;export END_SNAP #echo ${START_SNAP} #echo ${END_SNAP} ${ORACLE_HOME}/bin/sqlplus ${STATSUSER} <<EOF > /dev/null DEFINE begin_snap=${START_SNAP} DEFINE end_snap=${END_SNAP} DEFINE report_name=sp_${INST}_${START_SNAP}_${END_SNAP} @?/rdbms/admin/spreport.sql EOF LINE_CNT=`expr ${LINE_CNT} + 1` done
  • 68. Copyright © 2018 K.K. Ashisuto 日単位レポートを一括取得するシェル lump_spreport.sh ソース(6) 68 LINE_LAST=`expr ${LINE_END} - 1` LINE_CNT=1;export LINE_CNT echo "" echo "このインスタンス番号は、${INST} です。" echo "以下のスナップショットをレポート化します。" cat .cat_snap_list.lst echo "" echo "レポート化には、CPU負荷がかかります。" echo "実行はシステムに影響の少ない時間帯に行ってください。" echo "処理を続行してよろしいですか?[YES/NO]" ;read CONTINUE_F echo "" #echo "${CONTINUE_F}が選択されました。" if [ -n "${CONTINUE_F}" ];then if [ "${CONTINUE_F}" = "YES" -o "${CONTINUE_F}" = "yes" ];then echo "処理を続行します。" else echo "処理は中断されました。" exit 1 fi else echo "処理は中断されました。" exit 1 fi
  • 69. Copyright © 2018 K.K. Ashisuto (参考)解決率のさらなるアップのために Statspackとv$ビューの定期取得を併用いただくと、より解決率がアップします (弊社実績:91.7%)。定期取得をおすすめするV$ビューのバッチ/シェルスクリ プトは弊社の Database Support Blogにアップしております。宜しければご 活用ください。 https://www.ashisuto.co.jp/db_blog/article/20161116_perform_view.html