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

       

В DB2 для MVS пользователю


В DB2 для MVS пользователю разрешается задавать на любом запросе раздел OPTIMIZE FOR N ROWS, чтобы указать, что по курсору будут прочитаны только N строк до его закрытия [DB293c]. В этом случае DB2 для MVS разделяет общую стоимость на затраты, ассоциируемые с открытием курсора, и затраты на каждое чтение строки. Выбирается план, который будет меньше всего стоить для открытия и N чтений, и этот план может существенно отличаться от плана, оптимального при отсутствии такого раздела.

Если выбирается план «N строк», то DB2 для MVS может отключить упреждающее чтение (обсуждаемое в разд. 7.2), если устанавливается, что для возврата N строк потребуется всего несколько страниц данных. Упреждающее чтение может привести к чтению 64 индексных страниц и 64 страниц данных при выборке всего одной строки. Это составляет около 0.5 Мб данных, которые потребуется прочитать с диска и поместить в буферный пул, и большая часть которых не требуется. Такая дополнительная работа будет стоить заказчику десятки тысяч долларов в год за счет расходов на ввод-вывод, память и ЦП. По причине неизбежной неточности в показателях фильтрации и статистики для случая OPTIMIZE FOR 1 ROWS был написан специальный код для выбора плана, в котором, по возможности, избегается сортировка (данных или RID’ов), независимо от того, будет ли запрос, по оценке оптимизатора, выдавать ровно одну строку.


Содержание  Назад  Вперед