# 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;
```

### スキーマの統計情報をリストアする
```
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