OracleDB

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

2018年8月11日

こんにちは!土門大貴(daikidomon)です。

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

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

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

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

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

こんにちは!土門大貴(daikidomon)です。 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マニュアル

関連記事

-OracleDB

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.