{Denodo}ビューの統計情報の収集

https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/optimizing_queries/cost-based_optimization/gathering_the_statistics_of_views

https://community.denodo.com/docs/html/browse/8.0/jp/vdp/vql/stored_procedures/predefined_stored_procedures/get_stats_for_fields#get-stats-for-fields


前提: 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";