Программирование баз данных MS SQL Server (1084479), страница 94
Текст из файла (страница 94)
Напомним, что речь идет о кластеризованном индексе, а на нижнем уровне кластеризованного индекса находятся данные. Данные хранятся в последовательности, определяемой индексом. Это означает, что после перемещения строки индекса на новую страницу происходит также перемещение строки данных. А теперь предположим, что рассматриваемая бухгалтерская система эксплуатируется в типичной среде ОЕТР (трудно найти систему, в большей степени соответствующую определению среды ОЕТР чем бухгалтерская система) и что огромный коллектив специалистов по обработке данных вводят в ней с максимально возможной скоростью счета-фактуры поставщиков или заказы заказчиков.
А это означает, что постоянно происходят разбиения страниц, и при этом каждый раз пользователям таблицы приходится на время приостанавливать свою работу, пока система переносит данные с одной страницы на другую. К счастью, как описано ниже, может быть предусмотрен ряд способов предотвращения возникновения подобной ситуации. О Выбрать такой кластеризованный ключ, значения которого во время операций вставки будут возрастать последовательно. Для этого можно создать столбец идентификации, применить другой столбец, значения в котором возрастают последовательно при вводе данных о любой транзакции, независимо от системы, или, в условиях рассматриваемого примера, просто перенести обозначение типа в конец. С3 Отказаться от определения кластеризованного индекса на таблице. Если имеет место ситуация, подобная описанной в данном примере, то указанный вариант часто является наилучшим, поскольку вставка данных с помощью некластеризованного индекса, заданного на неупорядоченной таблице, обычно происходит быстрее, чем вставка данных с помощью кластеризованного ключа.
Как уже было сказано, п)гименение посюдовательно нафащивоеиых класлге)гизованных клю. чей лозвозхет улшньшить от)гиггалгельное влияние)гозбиения от~анну, но необходимо также учитывать, что за зто п)гиходится платить. Одним из недостатков способа ввода данных с п)глсменением последовательно на)гащиваемых власте)гизованных ключейг является то, что зпют способ не позволяет добиться высокой степени Расла)галееливания 1п~ш кото)гой два или несколько пользовалгелей пытаются получить доступ к одному и тому же обьекту одное)глненно). П~инимоя Решение о том, какой способ достугга к данным должен использовать ся, необходимо учитывать, каковыми являются пгедьявляемже тугебования. Приведенный выше пример, по-видимому, наиболее отчетливо демонстрирует причины, по которым автор стремится так подробно описать действия, выполняемые в базе данных в связи с применением индексов тех или других типов, Чтобы получить полное представление о том, при каких обстоятельствах индекс определенного типа становится наиболее подходящим (или неподходящим), необходимо 370 Глава 9 полностью разобраться в том, какие операции фактически выполняются в процессе обработки данных с помощью индексов.
Выбор правильного расположения столбцов в индексе Наличие индекса, заданного на нескольких столбцах, не обеспечивает применения этого индекса для выполнения запросов, которые обращаются к отдельным столбцам, охваченным индексом. Индекс рассматривается как применимый, только если в запросе используется первый столбец, перечисленный в индексе. Преимуществом указанного условия применения индексов является то, что не нужно добиваться точного взаимно однозначного согласования всех столбцов, указанных в запросе и охваченных индексом. Безусловно, чем больше количество последовательно согласованных столбцов в запросе и индексе (начиная от первых), тем лучше, но полный отказ от использования индекса происходит только в том случае, если в запросе не указан первый столбец индекса.
Указанный подход является вполне оправданным. Например, в телефонном справочнике данные об абонентах отсортированы в первую очередь по фамилиям, а затем по именам. Разве можно найти в таком справочнике абонента, если известно только имя, скажем, Фред? С другой стороны, если известно лишь то, что абонент имеет фамилию Блейк, то такой справочник поможет по крайней мере сузить область поиска. Одна из наиболее распространенных ошибок в создании индексов, которая обнаруживается на практике, обусловлена тем, что, по мнению многих разработчиков, достаточно включить все столбцы в один индекс и использовать его во всех ситуациях.
Но в действительности применение такого подхода приводит лишь к дублированию хранимых данных. Если в конструкции 101И, ОКРЕК ВХ или ИИЕКЕ запроса не упоминается первый столбец индекса, то индекс полностью игнорируется. Удаление индексов В процессе эксплуатации базы данных необходимо время от времени проверять, какие запросы выполняются в ней чаще всего, и в случае необходимости вводить дополнительные индексы. Но не следует также забывать о том, что иногда бывает целесообразно удалить некоторые индексы. Необходимо помнить о том, что для сопровождения индексов при выполнении операций вставки требуются определенные издержки. Это означает, что нельзя руководствоваться стремлением вводить в действие все новые н новые необходимые для работы индексы, но не стремиться при этом удалять такие индексы, необходимость в использовании которых уже отпала.
Следует всегда проверять, не нужно ли избавиться от каких-либо индексов. Для удаления индекса применяется в основном такой же синтаксис, как и для удаления таблицы. Единственное отличие состоит в том, что имя удаляемого индекса должно быть уточнено путем указания имени таблицы (или представления), на которой он определен: пкоР 1ипех <саые ог еьее паве>.<ьпбех паве> После выполнения оператора удаления индекс становится недоступным. Структуры памяти и индексные структуры БЯЕ Бегчег 371 Использование программы-мастера 1пбех Тип1 п9 %яагер Программисты, которые достаточно полно изучили все сведения, касающиеся использования индексов, фактически не ощущают потребности в применении программы 1пйех Тпп1пк Ъг1вагд, но эта программа все равно может оказаться весьма полезной.
Функционирование программы 1пйех Тцшпк Ч'1аагд основано на том, что берется файл регистрации рабочей нагрузки, созданный с использованием программы ЗЯ1. $еггег Ргой!ег (которая будет. описана в главе 19), и осуществляется поиск информации, на основании которой может быть принято решение о том, какие индексы являются наиболее приемлемыми в конкретной системе.
Программа 1пдех Тип|пК %1загс1 входит в состав инструментальных средств, доступ к которым предоставляется с помощью меню Тоо1з программы Б(1Ь Ьеггег Мапаяешепг Бгпс11о. Кроме того, программа 1пдех Тошни Ът'1гагс1 может быть вызвана на выполнение с помощью отдельного элемента меню программ в меню ясагс операционной системы %шс1оиз. Как и в отношении большинства других инструментальных средств настройки, автор не рекомендует использовать это инструментальное средство в качестве единственного способа принятия решения о том, какие индексы должны быть созданы, но эта программа может оказаться весьма удобной с той точки зрения, что некоторые предлагаемые ею рекомендации могут просто оказаться не вполне очевидными. Сопровождение индексов Разработчики часто грешат тем, что полностью забывают о существовании выпущенного ими программного продукта после передачи заказчику.
Применительно к программному обеспечению многих типов такое поведение вполне оправдано — работа закончена, поставка выполнена, можно переходить к разработке следующего программного продукта или приступать к подготовке очередного выпуска программы. Тем не менее от дальнейшего сопровождения проектов, основанных на использовании базы данных, избавиться практически невозможно.
Разработчик продолжает нести ответственность за исправное функционирование созданного им программного продукта даже по истечении даты доставки. Сказанное выше вовсе не означает, что автор предлагает разработчику занять какую-то должность в отделе технического сопровождения заказчика. Речь идет о чемто гораздо более важном — о планировании сопровождения. При сопровождении индексов приходится решать две проблемы: устранять последствия разбиения страниц; 0 устранять фрагментацию. Влияние этих двух проблем на функционирование базы данных выражается в том, что снижается плотность заполнения страниц индекса. Безусловно, симптомы этих двух нарушений существенно различаются, но инструментальные средства устранения этих нарушений в работе являются одинаковыми, как и методы их устранения.