[Oracle Database] システム統計を削除する方法

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で再取得される。

 

削除する方法?

一度取得したシステム統計を削除するには、どうしたらよいか?

(取得していない状態には出来ないけど)手動で取得する際に、取得前の状態に戻す方法としては以下が利用できそう。

  1. SET_SYSTEM_STATSを利用する。
  2. 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

 

取得前の状態を確認しておけば、元に戻すことは出来る。

スポンサードリンク

Be the first to comment

Leave a Reply

Your email address will not be published.


*