Database OracleDB インフラ

OracleDBの統計情報の削除方法「DBMS_STATS.DELETE_XXXX_STATS」を紹介

2018年8月11日

こんにちは!シミダイ(@shimidai2100)です。

OracleDatabaseの「統計情報」の手動削除方法を紹介します。

OracleDatabaseを運用して上で最も重要な要素の1つです。

この記事でOracleDatabase初心者でも分かりやすく統計情報の削除方法を紹介しています。

統計情報となにか?については以下のページでまとめてますので、まずは下の参照ください。

OracleDBの統計情報とは?なぜ取得?取得しないことの影響は?

こんにちは!シミダイ(@shimidai2100)です。 OracleDatabaseの「統計情報」とは何か?なぜ取得す ...

続きを見る


表統計の削除:DBMS_STATS.DELETE_TABLE_STATS

表統計の削除は「DBMS_STATS.DELETE_TABLE_STATS」で行えます。

BEGIN
	DBMS_STATS.DELETE_TABLE_STATS (
	 	 OWNNAME          => '<スキーマ名>'
		,TABNAME          => '<表名>'
		,PARTNAME         => '<パーティション名>'
	);
END;
/

以下サンプルになります。

  > BEGIN
 2    DBMS_STATS.DELETE_TABLE_STATS (
 3             OWNNAME          => 'TEST001'
 4            ,TABNAME          => 'TAB001'
 5    );
 6  END;
 7  /

PL/SQLプロシージャが正常に完了しました。

  > col OWNER for a10
  > col TABLE_NAME for a20
  > col LAST_ANALYZED for a30
  > select OWNER
 2        ,TABLE_NAME
 3        ,LAST_ANALYZED
 4    from DBA_TABLES
 5   where OWNER = 'TEST001';

OWNER      TABLE_NAME           LAST_ANALYZED
---------- -------------------- ------------------------------
TEST001    TAB001

列統計の削除:DBMS_STATS.DELETE_COLUMN_STATS

列統計の削除は「DBMS_STATS.DELETE_COLUMN_STATS」で行います。

BEGIN
	DBMS_STATS.DELETE_COLUMN_STATS (
	 	 OWNNAME          => '<スキーマ名>'
		,TABNAME          => '<表名>'
		,COLNAME          => '<列名>'
		,PARTNAME         => '<パーティション名>'
	);
END;
/

以下サンプルになります。

  > BEGIN
 2    DBMS_STATS.DELETE_COLUMN_STATS (
 3             OWNNAME          => 'TEST001'
 4            ,TABNAME          => 'TAB001'
 5            ,COLNAME          => 'COL01'
 6    );
 7  END;
 8  /

PL/SQLプロシージャが正常に完了しました。


  > col TABLE_NAME for a20
  > col COLUMN_NAME for a20
  > col LAST_ANALYZED for a20
  > select TABLE_NAME
 2        ,COLUMN_NAME
 3      ,LAST_ANALYZED
 4  from DBA_TAB_COLUMNS
 5  where TABLE_NAME = 'TAB001';

TABLE_NAME           COLUMN_NAME          LAST_ANALYZED
-------------------- -------------------- --------------------
TAB001               COL01
TAB001               COL02                2018-07-30 19:27:00

索引統計の削除:DBMS_STATS.DELETE_INDEX_STATS

索引統計の削除は「DBMS_STATS.DELETE_TABLE_STATS」で行います。

BEGIN
	DBMS_STATS.DELETE_INDEX_STATS (
	 	 OWNNAME          => '<スキーマ名>'
		,INDNAME          => '<索引名>'
		,PARTNAME         => '<パーティション名>'
	);
END;
/

以下サンプルになります。

   > BEGIN
 2    DBMS_STATS.DELETE_INDEX_STATS (
 3             OWNNAME          => 'TEST001'
 4            ,INDNAME          => 'TAB001_IDX'
 5    );
 6  END;
 7  /

PL/SQLプロシージャが正常に完了しました。

  > col TABLE_NAME for a20
  > col INDEX_NAME for a20
  > col LAST_ANALYZED for a20
  > select TABLE_NAME
 2        ,INDEX_NAME
 3      ,LAST_ANALYZED
 4  from DBA_INDEXES
 5  where INDEX_NAME = 'TAB001_IDX';

TABLE_NAME           INDEX_NAME           LAST_ANALYZED
-------------------- -------------------- --------------------
TAB001               TAB001_IDX

スキーマ全体の統計情報削除:DBMS_STATS.GATHER_SCHEMA_STATS

スキーマ全体の統計情報び削除は「DBMS_STATS.DELETE_SCHEMA_STATS 」で行えます。

BEGIN
	DBMS_STATS.DELETE_SCHEMA_STATS (
	 	 OWNNAME          => '<スキーマ名>'
	);
END;
/

以下サンプルになります。

  > BEGIN
 2    DBMS_STATS.DELETE_SCHEMA_STATS (
 3             OWNNAME          => 'TEST001'
 4    );
 5  END;
 6  /

PL/SQLプロシージャが正常に完了しました。

データベース統計の削除方法:DBMS_STATS.GATHER_DATABASE_STATS

データベース全体の統計情報の削除は「DBMS_STATS.DELETE_DATABASE_STATS 」で行えます。

BEGIN
	DBMS_STATS.GATHER_DATABASE_STATS;
END;
/

以下サンプルになります。

  > BEGIN
 2    DBMS_STATS.GATHER_DATABASE_STATS;
 3  END;
 4  /

PL/SQLプロシージャが正常に完了しました。

システム統計の削除:DBMS_STATS.DELETE_SYSTEM_STATS

システム統計情報の削除は「DBMS_STATS.DELETE_SYSTEM_STATS 」で行えます。

BEGIN
	DBMS_STATS.DELETE_SYSTEM_STATS ;
END;
/

以下サンプルになります。

  > BEGIN
 2    DBMS_STATS.DELETE_SYSTEM_STATS ;
 3  END;
 4  /

PL/SQLプロシージャが正常に完了しました。

ディクショナリ統計の削除方法:DBMS_STATS.DELETE_DICTIONARY_STATS

ディクショナリ統計の取得は「DBMS_STATS.GATHER_DICTIONARY_STATS」で行えます。

BEGIN
	DBMS_STATS.DELETE_FIXED_OBJECTS_STATS ;
END;
/

以下サンプルになります。

   > BEGIN
 2    DBMS_STATS.DELETE_DICTIONARY_STATS;
 3  END;
 4  /

PL/SQLプロシージャが正常に完了しました。

固定表統計の取得方法:DBMS_STATS.DELETE_FIXED_OBJECTS_STATS

固定表統計の削除は「DBMS_STATS.DELETE_FIXED_OBJECTS_STATS」で行えます。

BEGIN
	DBMS_STATS.GATHER_FIXED_OBJECTS_STATS ;
END;
/

 

以下サンプルになります。

  > BEGIN
 2    DBMS_STATS.DELETE_FIXED_OBJECTS_STATS ;
 3  END;
 4  /

PL/SQLプロシージャが正常に完了しました。

参考マニュアル

「DBMS_STATS」は指定できるオプション数が多いので本記事は重要な部分のみ記載しました。

必要に応じてマニュアルを確認して最適な設定を行いましょう。

参考12c DBMS_STATSマニュアル

 

関連記事

-Database, OracleDB, インフラ

Copyright© shimidai2100 , 2020 All Rights Reserved.