
DELETE_SYSTEM_STATSプロシージャの仕様
このプロシージャは、stattabが指定されていない場合、ワークロード統計(‘INTERVAL’または’START’および’STOP’オプションを使用して収集)を削除し、デフォルトをnoworkload統計(‘NOWORKLOAD’オプションを使用して収集)にリセットします。
他のDELETE_XXX_STATSと違って、システム統計の場合はnoworkload統計にリセット(再収集)するという動作になる。
・Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス 12c リリース1 (12.1) DELETE_SYSTEM_STATS
検証してみた
・状態確認 SQL> col sname form a30 SQL> col pname for a30 SQL> col pval2 for a30 SQL> set line 200 SQL> set pagesize 1000 SQL> select * from aux_stats$; SNAME PNAME PVAL1 PVAL2 ------------------------------ ------------------------------ ---------- ------------------------------ SYSSTATS_INFO STATUS COMPLETED SYSSTATS_INFO DSTART 01-26-2017 15:28 SYSSTATS_INFO DSTOP 01-26-2017 15:28 SYSSTATS_INFO FLAGS 1 SYSSTATS_MAIN CPUSPEEDNW 3137.71377 SYSSTATS_MAIN IOSEEKTIM 10 SYSSTATS_MAIN IOTFRSPEED 4096 SYSSTATS_MAIN SREADTIM SYSSTATS_MAIN MREADTIM SYSSTATS_MAIN CPUSPEED SYSSTATS_MAIN MBRC SYSSTATS_MAIN MAXTHR SYSSTATS_MAIN SLAVETHR 13行が選択されました。 ⇒2017/1/26に取得されている。 SQL> exec dbms_stats.gather_system_stats() PL/SQLプロシージャが正常に完了しました。 経過: 00:00:01.11 SQL> select * from aux_stats$; SNAME PNAME PVAL1 PVAL2 ------------------------------ ------------------------------ ---------- ------------------------------ SYSSTATS_INFO STATUS COMPLETED SYSSTATS_INFO DSTART 07-02-2018 11:57★ SYSSTATS_INFO DSTOP 07-02-2018 11:57★ SYSSTATS_INFO FLAGS 1 SYSSTATS_MAIN CPUSPEEDNW 1096★ SYSSTATS_MAIN IOSEEKTIM 10 SYSSTATS_MAIN IOTFRSPEED 4096 SYSSTATS_MAIN SREADTIM SYSSTATS_MAIN MREADTIM SYSSTATS_MAIN CPUSPEED SYSSTATS_MAIN MBRC SYSSTATS_MAIN MAXTHR SYSSTATS_MAIN SLAVETHR 13行が選択されました。 経過: 00:00:00.00 ⇒更新された。 ・削除 SQL> exec dbms_stats.delete_system_stats() PL/SQLプロシージャが正常に完了しました。 経過: 00:00:00.04 SQL> select * from aux_stats$; SNAME PNAME PVAL1 PVAL2 ------------------------------ ------------------------------ ---------- ------------------------------ SYSSTATS_INFO STATUS COMPLETED SYSSTATS_INFO DSTART 07-02-2018 11:59★ SYSSTATS_INFO DSTOP 07-02-2018 11:59 SYSSTATS_INFO FLAGS 0 SYSSTATS_MAIN CPUSPEEDNW 1096 SYSSTATS_MAIN IOSEEKTIM 10 SYSSTATS_MAIN IOTFRSPEED 4096 SYSSTATS_MAIN SREADTIM SYSSTATS_MAIN MREADTIM SYSSTATS_MAIN CPUSPEED SYSSTATS_MAIN MBRC SYSSTATS_MAIN MAXTHR SYSSTATS_MAIN SLAVETHR 13行が選択されました。
dbms_stats.delete_system_statsプロシージャを実行しても、統計は削除されるわけではなくNOWORKLOADで再取得される。
削除する方法?
一度取得したシステム統計を削除するには、どうしたらよいか?
(取得していない状態には出来ないけど)手動で取得する際に、取得前の状態に戻す方法としては以下が利用できそう。
- SET_SYSTEM_STATSを利用する。
- EXPORT_SYSTEM_STATSで取得前にバックアップをとっておき、IMPORT_SYSTEM_STATSで戻す。
SET_SYSTEM_STATSで試してみた。
・手動で更新 SQL> execute DBMS_STATS.SET_SYSTEM_STATS(pname=>'CPUSPEEDNW', pvalue=> 3137.71377) PL/SQLプロシージャが正常に完了しました。 経過: 00:00:00.10 SQL> select * from aux_stats$; SNAME PNAME PVAL1 PVAL2 ------------------------------ ------------------------------ ---------- ------------------------------ SYSSTATS_INFO STATUS COMPLETED SYSSTATS_INFO DSTART 07-02-2018 12:19 SYSSTATS_INFO DSTOP 07-02-2018 12:19 SYSSTATS_INFO FLAGS 1 SYSSTATS_MAIN CPUSPEEDNW 3137.71377★ SYSSTATS_MAIN IOSEEKTIM 10 SYSSTATS_MAIN IOTFRSPEED 4096 SYSSTATS_MAIN SREADTIM SYSSTATS_MAIN MREADTIM SYSSTATS_MAIN CPUSPEED SYSSTATS_MAIN MBRC SYSSTATS_MAIN MAXTHR SYSSTATS_MAIN SLAVETHR 13行が選択されました。 経過: 00:00:00.01
取得前の状態を確認しておけば、元に戻すことは出来る。
Leave a Reply