# Oracle統計情報の更新 ###### tags: `oracle` ## 統計情報の収集 参考記事 https://ameblo.jp/keshi0414/entry-12249532525.html ### AUTOで集める ```sql EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME=>'BESS',OPTIONS=>'GATHER AUTO'); ``` ``` EXECUTE DBMS_STATS.GATHER_SYSTEM_STATS; ``` テーブル単位 ```sql BEGIN DBMS_STATS.GATHER_TABLE_STATS( OWNNAME => 'BESS' ,TABNAME => 'DELI_PDT' ,METHOD_OPT => 'FOR ALL INDEXED' ,CASCADE => FALSE ); END; / ``` ## 統計情報をリストアしてロックする 統計情報についての参考記事 https://www.oracle.com/jp/technical-resources/articles/chapter4.html ### 統計表のバックアップ ```sql --統計表TEST_STATTABをTESTスキーマに作成 exec dbms_stats.CREATE_STAT_TABLE('BESS','BESS_STATTAB') --統計表TEST_STATTABにTESTスキーマのすべてのオブジェクト統計をエクスポート exec dbms_stats.EXPORT_SCHEMA_STATS('BESS','BESS_STATTAB') --統計表にエクスポートされた統計値のタイムスタンプを確認 select distinct d1 from BESS_STATTAB; D1 ----------------- 04/11/23 22:00:49 04/11/23 22:00:50 04/11/23 22:00:51 ``` ### 統計情報の履歴を表示する ```sql SELECT table_name, stats_update_time FROM user_tab_stats_history ORDER BY stats_update_time; ``` ![](https://i.imgur.com/cndzvOs.png) ### スキーマの統計情報をリストアする ``` exec dbms_stats.RESTORE_SCHEMA_STATS('BESS', '20-10-24.123454 +90:00') ``` ### スキーマの統計情報をロックする ``` DBMS_STATS.LOCK_SCHEMA_STATS('BESS') ``` ## Oracle12 Release2 公式ベストプラクティス https://www.oracle.com/technetwork/jp/database/bi-datawarehousing/twp-bp-for-stats-gather-12c-1967354-ja.pdf