Мы запускаем приложения Oracle 12.2.4 в базе данных 12.1.0.2.0. Когда я делаю следующий запрос:
select DBMS_STATS.GET_PREFS('AUTOSTATS_TARGET') as autostats_target,
DBMS_STATS.GET_PREFS('CASCADE') as cascade,
DBMS_STATS.GET_PREFS('DEGREE') as degree,
DBMS_STATS.GET_PREFS('ESTIMATE_PERCENT') as estimate_percent,
DBMS_STATS.GET_PREFS('METHOD_OPT') as method_opt,
DBMS_STATS.GET_PREFS('NO_INVALIDATE') as no_invalidate,
DBMS_STATS.GET_PREFS('GRANULARITY') as granularity,
DBMS_STATS.GET_PREFS('PUBLISH') as publish,
DBMS_STATS.GET_PREFS('INCREMENTAL') as incremental,
DBMS_STATS.GET_PREFS('STALE_PERCENT') as stale_percent
from dual
Я получил:
"AUTOSTATS_TARGET","CASCADE","DEGREE","ESTIMATE_PERCENT","METHOD_OPT","NO_INVALIDATE","GRANULARITY","PUBLISH","INCREMENTAL","STALE_PERCENT"
"AUTO","DBMS_STATS.AUTO_CASCADE","NULL","DBMS_STATS.AUTO_SAMPLE_SIZE","FOR ALL COLUMNS SIZE AUTO","DBMS_STATS.AUTO_INVALIDATE","AUTO","TRUE","FALSE","10"
Однако, когда я бегу:
select distinct histogram
from user_tab_col_statistics
Я получаю только NONE
Как возможно, что в экземпляре приложения Oracle не может быть таблиц с перекосами, для которых нужны гистограммы? Или я не понимаю настроек?
Также, если вам нужна гистограмма в столбце, вам нужно использовать method_opt => 'for all columns size skewonly'
? Как вы можете указать auto для всех столбцов и skew для одного столбца?
Мне бы очень хотелось потенциального огромного увеличения скорости, которое могут принести гистограммы, и я удивлен, что приложения Oracle не обеспечивают этого по умолчанию. Существует процесс сбора статистики схемы, который запускается каждую ночь, может быть, код в нем очень старый и он убивает все вызовы dbms_stats? Я специально создал следующий индекс, который должен иметь гистограмму.
create index xxpqh_ss_trans_history_idx1 on hr.pqh_ss_transaction_history (process_name, nvl(selected_person_id, -1)) compress 1 tablespace apps_ts_tx_idx;
exec dbms_stats.gather_table_stats(ownname => 'HR', tabname => 'PQH_SS_TRANSACTION_HISTORY', cascade => true, method_opt => 'for all columns size skewonly');