前提: Oracle 19c
-- 1. 使用できる統計収集モードの確認
select * from GET_AVAILABLE_STATS_MODES('db02','b_TAB27', false)
order by stats_mode
;
ATCACHE_THROUGH_VDP_ONLY
→キャッシュからクエリで統計取得
ATSOURCE_THROUGH_VDP_ONLY
→ソースからクエリで統計取得
SMART_CACHE_ONLY
→キャッシュのシステムテーブルから統計取得
SMART_CACHE_THEN_ATCACHE_THROUGH_VDP
→キャッシュのシステムテーブルとクエリで統計取得
SMART_ONLY
→ソースのシステムテーブルから統計取得
SMART_THEN_ATSOURCE_THROUGH_VDP
→ソースのシステムテーブルとクエリで統計取得
-- 2. キャッシュモード FULLの場合の例
select * from GET_STATS_FOR_FIELDS()
where input_mode = 'ATCACHE_THROUGH_VDP_ONLY'
and input_database_name = 'db02'
and input_view_name = 'b_TAB27'
and input_table_stats = true
and input_save = true
;
※ input_save = falseの場合、取得はするが、保存はされない模様
-- 3. キャッシュモード OFFの場合の例
select * from GET_STATS_FOR_FIELDS()
where input_mode = 'SMART_ONLY'
and input_database_name = 'db02'
and input_view_name = 'b_TAB27'
and input_table_stats = true
and input_save = true
;
-- 4. 検証作業用クエリ
select * from user_tab_statistics
where table_name = 'TAB27'
;
exec dbms_stats.gather_table_stats(user, 'TAB27');
exec dbms_stats.delete_table_stats(user, 'TAB27');
SELECT *
FROM db02."b_TAB27"
CONTEXT (
'cache_preload' = 'true'
, 'cache_invalidate' = 'all_rows'
, 'cache_wait_for_load' = 'true'
, 'cache_return_query_results' = 'false')
;
※VQLシェルから実行時はRetrieve all rowsにチェック必要
select count(*) from db02."b_TAB27";