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

       

Плавное снижение эффективности


Помимо общего повышения производительности, буферизованные вставки обеспечивают плавное снижение эффективности в случае ошибочных оценок мощности в ходе оптимизации запросов. Сегодня при оптимизации запросов можно выбирать между обработкой операций обновления в режиме "строка-за-строкой" и обработкой в режиме "индекс-за-индексом". При выполнении операции обновления в режиме "строка-за-строкой" обновление всех нужных индексов производится сразу после обновления очередной строки. Обновление в режиме "индекс-за-индексом" означает, что к каждому индексу сразу применяются все обновления, возможно, после расщепления каждой операции модификации на соответствующую пару операций удаления и вставки, сортировки изменений по значениям ключа индекса и рекомбинирования изменений, если это оказывается уместным. Обобщенная версия методов, описанных в [], реализуется Microsoft SQL Server, начиная с выпуска 7.0. Обновления в режиме "строка-за-строкой" наиболее уместны для небольших изменений, например, при оперативной обработке транзакций, в обновления в режиме "индекс-за-индексом" являются более эффективными для крупных обновлений, в особенности таких, которые затрагивают не только листовые страницы индексов, например, массовых вставок или удалений. Для обеспечения плавного снижения эффективности план выполнения может предписывать обработку обновления в режиме "строка-за-строкой" при ожидаемом небольшом множестве обновлений, а при реальном выполнении можно обнаружить, что множество обновлений является гораздо более крупным, и переключиться на режим выполнения "индекс-за-индексом".

Описанные выше буферизованные вставки с использованием разделенных B-деревьев представляют собой третий способ применению обновлений к индексу на основе B-дерева, и тем самым обеспечивают еще один вариант плавного снижения эффективности. Обработка в режиме "строка-за-строкой", нацеленная на новый раздел, сулит лучшие модель ввода/вывода и производительность, чем те, которые обеспечиваются при обработке в режиме индекс-за-индексом, хотя при этом сохраняется недостаток неоптимальности индексов. Для обеспечения плавного снижения эффективности план выполнения операции обновления может предусматривать выполнение обновления в режиме "строка-за-строкой" в главном разделе до тех пор, пока не выяснится реальный размер множества обновлений, а затем переключение на буферизованные или разделенные обновления. Хотя можно реализовать плавное снижение эффективности путем смены режима "строка-за-строкой" на режим "индекс-за-индексом" с использованием условного выполнения в традиционном плане выполнения запроса, назначение индексным изменениям нового идентификатора раздела (искусственного лидирующего столбца ключа) является гораздо более простым действием и содействует повышению эффективности обновлений.



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