Классика баз данных - статьи

       

Статистика и показатели фильтрации


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

В DB2 для MVS также вычисляется статистика неравномерного распределения для каждого столбца, являющегося первым столбцом индекса. Сохраняются десять старших значений и относительная частота их появления, что является очень важным для точного вычисления селективности предикатов. В DB2/* с использованием Starburst также будет иметься возможность сбора статистики о неравномерном распределении. Эта статистика будет собираться для всех столбцов таблицы, и у пользователя будет иметься возможность указывать число значений, которые нужно собирать; более тонкая гранулярность обеспечивает лучшие показатели фильтрации, но их сбор обходится дороже.

Важная статистика, поддерживаемая для индексов, включает мощность первого столбца и мощность ключа целиком, число листовых страниц и уровней дерева и показатель того, как физически хранятся данные, соответствующие ключам индекса. В семействе продуктов DB2 этот показатель, называемый «коэффициентом кластеризации», вычисляется для того, чтобы предсказывать требования к вводу-выводу при доступе к таблице с использованием индекса.

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

В DB2 для MVS статистика может обновляться пользователем с использованием операторов SQL UPDATE. Возможность обновлять статистику вручную является очень полезной, особенно в модельных производственных приложениях над тестовыми базами данных.
В DB2/* с использованием Starburst также будет поддерживаться эта возможность.

В DB2 для MVS и в DB2/* используются одни и те же основные формулы для оценки показателя фильтрации [DB293c]. Значения по умолчанию, используемые в выражениях, переменных основного языка и параметрах, настроены в соответствии с паттернами использования типичных заказчиков и, по существу, одни и те же во всех продуктах.

Во всех продуктах используются классические формулы для составных предикатов, в которых предполагается независимость конъюнктов, и поэтому их показатели фильтрации перемножаются [SAC+79]. Иногда точная оценка показателей фильтрации затрудняется наличием корреляции предикатов. Для уменьшения этой в проблемы в DB2 для MVS, как правило, для вычисления размера результата используется наиболее селективный предикат на каком либо заданном столбце.

Для отслеживания потенциальной корреляции между предикатами также используется статистика на индексах. Например, комбинированный (перемноженный) показатель фильтрации для предикатов, которые полностью уточняют индекс для получения ровно одного ключа, не может быть более селективным, чем показатель селективности, полученный путем инверсии числа различных значений ключа. Предикаты вида

C1 > :hv1 OR (C1= :hv1 AND C2 >= :hv2) OR (C1= :hv1 AND C2 = :hv2 AND C3 >= hv3)

(где :hv1, :hv2 и :hv3 – переменные основной программы) анализировать трудно, поскольку они часто используются для позиционирования курсора на индексе при выполнении операции открытия курсора, или после COMMIT, ROLLBACK WORK, или другого прерывания пакетной обработки (заметим, что COMMIT WITH HOLD не решает эту проблему полностью, поскольку для курсора по-прежнему требуется начальное открытие, а удержание курсора не работает при использовании логики рестарта). В DB2 для MVS используются специальные формулы для попытки оценить эффект корреляции между AND-предикатами, обнаруживаемыми в OR-предикатах.

В модель для оценки размера результата соединения в DB2/* с использованием Starburst будет внедрен улучшенный алгоритм определения показателей фильтрации, в котором учитываются избыточные предикаты на том же столбце [SSar].Поскольку при перезаписи запроса добавляются и выводятся предикаты, появление избыточных предикатов вполне вероятно.


Содержание раздела