Oracle mechanics

15.05.2013

Новое в статистике

Filed under: Oracle,statistics — Игорь Усольцев @ 23:20
Tags: , ,

1. Выпуск патча Bug 13262857 Enh: provide some control over DBMS_STATS index clustering factor computation типа enhancement not a bug, допускающего более реалистичный (по описанию — «оптимистичный») метод расчёта Clustering Factor (CF) индекса, с учётом кэширования недавно прочитанных блоков таблицы

С описанием и тестами патча можно ознакомиться в блоге Richard Foote Important !! Clustering Factor Calculation Improvement (Fix You) и Clustering Factor Calculation Improvement Part II (Blocks On Blocks):

«Традиционно, CF вычисляется методом последовательного сравнения номеров блоков (получаемых из rowid) индексированных строк таблицы в процессе выполнения Full Index Scan. В случае если номер блока следующей в индексе строки отличается от номера блока предыдущей индексированной строки, CF увеличивается на 1. Если номер блока не изменился — CF не увеличивается…
Чем меньше значение CF, тем более эффективным (предпочтительным для оптимизатора) будет использование индекса, поскольку для упорядоченного доступа к данным таблицы (в процессе Index Scan) потребуется прочитать меньше блоков бд…»

Однако, при таком упрощённом расчёте не учитывается, что в буферном кэше уже могут находиться блоки таблицы в количестве большем, чем один последний блок, содержащий предыдущую индексированную запись

Проблема решается добавлением модифицируемого на уровнях таблицы / схемы / бд параметра TABLE_CACHED_BLOCKS в процедуры DBMS_STATS.SET_TABLE_PREFS, DBMS_STATS.SET_SCHEMA_PREFS, DBMS_STATS.SET_DATABASE_PREFS — предполагаемое количество предыдущих блоков таблицы, доступных в буферном кэше при индексном сканировании и учитываемое при расчёте CF, с диапазоном значений от 1 (по умолчанию) до 255, либо AUTO. Соответствующий патч 15830250 доступен для Oracle versions 11.1.0.7, 11.2.0.2 and 11.2.0.3

2. В комментариях к первому посту (которые очень стоит посмотреть / почитать) Тимур Ахмадеев указывает на важную особенность процедуры DBMS_STATS.SET_SCHEMA_PREFS, которая, начиная с 11.2.0.2, «… в действительности вызывает серию процедур SET_TABLE_PREFS для всех таблиц указанной схемы. При этом установка параметров статистики с использованием SET_SCHEMA_PREFS не влияет на новые объекты той же схемы, созданные после запуска SET_SCHEMA_PREFS, и все новые объекты будут использовать глобально установленные значения параметров статистики — GLOBAL_PREF» — After Setting DBMS_STATS.SET_SCHEMA_PREFS, GET_PREFS does not Return the Current Configuration Values [ID 1338709.1]

Блог на WordPress.com.