Программирование баз данных MS SQL Server (1084479), страница 96
Текст из файла (страница 96)
При вычислении значения этого показателя учитывается размер строки, поэтому он может служить более точным индикатором того, насколько полно заполнены страницы. Чем выше полученное процентное значение, тем лучше Таблица 9.2. Статистические показатели, применяемые в выводе оператора ОВОС ЕНОИССатее Структуры памяти и индексные структуры БЯЕ Яегчег 375 КОИВНДВ ЭВВЕ1ИЭЕХ и ООЦий Г151 ГАСТОЯ Как уже было сказано выше, программное обеспечение 80) Веггег поддерживает опцию, позволяющую управлять тем, насколько высокой должна быть степень заполнения страниц листового уровня, а также, при желании, еще одну опцию, от которой зависят показатели заполнения страниц нелистового уровня. К сожалению, эти две опции являются превентивными, поскольку применяются лишь во время создания индекса. Поэтому в процессе эксплуатации базы данных приходится повторно применять опции, регламентирующие степень заполнения, выполняя перестройку индекса и снова вводя в действие указанные опции.
Для перестройки индексов применяются два способа: уничтожение и повторное создание индекса (при использовании этого способа настоятельно рекомендуется задавать в операторе создания индекса опцию РВОВ ЕХ1ЯТ1ИЯ) или восстановление иидекса с помощью команды РВВЕ1ИРЕХ. Команда РВВЕ1ИРЕХ также относится к категории команд ПВСС и имеет такую синтаксическую структуру: РВСС РВВЕ1МРЕХ ~<'йасаьазе.овпег.саЬ1е папе' >(, <1поех папе> (, <11111ассог>))) (К1тн НО 1МГОМЯОЯ) После вызова этой команды на выполнение происходит полное восстановление требуемого индекса. Если указано только имя таблицы без имени индекса, <Тпбех пава>, то восстанавливаются все индексы для требуемой таблицы.
Какая-либо отдельно взятая команда, предназначенная для восстановления всех индексов в базе данных, не предусмотрена. В результате восстановления индексов с применением оператора РВСС РВВЕ1ИРЕХ происходит реструктуризация всей информации, содержащейся в индексах, а также вновь устанавливаются базовые показатели заполнения страниц. Если рассматриваемый индекс является кластеризованным, то происходит также реорганизация физических данных. По умолчанию воссоздание страниц индекса происходит с учетом того условия, чтобы на каждой странице находилось максимальное количество строк за вычетом двух. Тэк же как и при использовании оператора СВЕАТЕ ТАВРЕ, во время вызова на выполнение оператора РВСС РВВЕ1ИРЕХ может быть задана опция <11111ассог>, аналогичная РТРРРАСТОВ, которая может принимать любое значение от 0 до 100.
Это число определяет процент заполнения страниц, вернее, то значение, которое будет характеризовать степень заполнения страниц после завершения перестройки индексов. Напомним,что после каждого разбиения страницы данные по-прежнему распределяются между двумя страницами поровну; таким образом, единственный способ постоянного поддержания заданного значения процента заполнения состоит в осуществлении регулярного восстановления индексов. Как уже было сказано, значение опции <11111ассог> (соответственно ГТРРРАСТОК) используется в тех случаях, когда возникает необходимость откорректировать плотность заполнения страниц. Кроме того, более низкие значения плотности заполнения 376 Глава 9 страницы (и поэтому низкие значения Г1ЕЕГАСТОЕ) идеально подходят для систем ОЕТР, в которых осуществляется большое количество операций вставки, поскольку это способствует предотвращению разбиений страниц.
А более высокие значения плотности страниц применимы для систем ОТАР (уменьшается количество считываемых страниц, и вместе с тем почти отсутствует вероятность того, что в базе данных будет происходить разбиение страниц, поскольку количество операций вставки невелико или такие операции вообще не выполняются). Рассмотрим пример восстановления индекса, определенного на первичном ключе таблицы Огбег Оега11я, который был создан ранее в этой главе со значением коэффициента заполнения, равным бб. Для можно воспользоваться следующей командой [)ВСС: ВВСС ВВВЕ1МОЕХ ([Огбег Вега11я], РК Огбег Вега11я, 65) После этого снова вызовем на выполнение оператор ОВСС БВОИСОВТ1О, чтобы ознакомиться с полученными результатами: ВВСС БНОНСОИТ10 ясаппгпд 'Огбег пеСаг1я' СаЬ1е...
ТаЬ1е: 'Огбег Оега11я' (325576198); Тпбех 10: 1, багаЬаяе 10: 6 ТАВЬЕ 1ече1 ясап реггогтеб. Радея Ясаппеб. 13 Ехгепгя Бсаппеб 2 Ехпепг Бч1гспея 1 Ачд. Радея рег ЕхСепС. 6.5 Ясап пепясгу [Веяг Соопг:Асгпа1 Соопг]........: 100.00Ь [2:2] Ьод1са1 Ясап Ггадтепгагсоп 0.006 ЕхСепг Бсап Ггадв1Епгаггоп 50.00- Ачд. ВуСея Ггее рег Раде. 2о57 2 Ачд. Раде Оепяспу (Го11). 63.466 ВВСС ехесосгоп сотр1еСеб. 11 ВВСС рг1ппеб еггог яеяяадея, сопгасС уоог яуяпет абв1псяггагог. Наиболее существенное изменение коснулось значения показателя Ачд.
Раде Оепязсу. Полученное число немного меньше 65%, поскольку в СУБД БО] Бе(чег приходится учитывать размеры страницы и строки, но достигнутая величина является наиболее близкой к требуемой из всех возможных. При использовании команды ОВЕЕ1)(ОЕХ и определении значения Г1ЕЕГАСТОЕ необходимо учитывать приведенные ниже рекомендации. [3 Если значение опции <11111асСог> в команде ОВЕЕ1)(РЕХ не задано, то при выполнении команды ОВВЕ1Г)ОЕХ используется значение этой опции, которое использовалось во время выполнения предыдущей операции создания индекса. Если значение опции <11111ассог> еще ни разу не было задано, то используется такой коэффициент заполнения, при котором происходит полное заполнение страницы за вычетом двух строк (но в большинстве ситуаций такое заполнение является слишком полным). (3 Если значение опции <11111асгог> задано в команде ОВЕЕ1)(РЕХ, то указанное значение становится применяемым по умолчанию значением опции ГТЕЕГАСТОЕ для этого индекса.
[3 Безусловно, команда ЭВВЕ1ИРЕХ может быть вызвана на выполнение во время работы базы данных в оперативном режиме, но автор настоятельно рекомендует не использовать такую возможность, поскольку в связи с восстановлени- Структуры памяти и индексные структуры БЯ1. Бегтег 377 ем индекса блокируются ресурсы, а также может возникнуть целый ряд других проблем.
По крайней мере, не следует выбирать для проведения такой операции период наибольшей нагрузки. Резюме Индексы играют чрезвычайно важную роль в организации функционирования 8Я1. Бегтег или любой другой среды баз данных, поэтому необходимо тщательно планировать их использование. Применение правильно выбранных индексов способствует повышению производительности, а при неправильном выборе индексов производительность может заметно снизиться.
Основные рекомендации по использованию индексов приведены ниже. 0 Кластеризованные индексы обычно обеспечивают более высокое быстродействие, чем некластеризованные (следует учитывать, что при определенных условиях применение кластеризованных индексов приводит к снижению производительности). О Некластеризованные индексы следует задавать только на таких столбцах, которые позволяют достичь высокого уровня избирательности (т.е.
на столбцах, в которых 95% строк или больше являются уникальными). О Применение индексов способствует ускоренному выполнению всех операторов языка манипулирования данными (Пага Магйрп!агюп 1лпяпаяе — ВМ1.), в том числе 1ЕБект, УРВАте, пеняете и Безвест, но в целом в связи с необходимостью сопровождения индексов может происходить замедление при выполнении операций вставки, удаления и обновления (напомним, что операция обновления выполняется как две операции — удаления и вставки).
Та часть процедуры выполнения запроса, которая связана с поиском, благодаря использованию индекса осуществляется быстрее, а другая часть запроса, при осуществлении которой происходит модификация данных, требует дополнительных издержек (в связи с необходимостью сопровождения индекса, а не только фактических данных). 0 Индексы занимают определенную часть пространства в базе данных. О Индексы используются, только если в условии запроса в первую очередь упоминается первый столбец индекса. Е1 Применение индексов может повлечь за собой не только повышение, но и снижение производительности, поэтому необходимо тщательно обосновывать необходимость создания каждого индекса и не формировать индексы, которые в действительности не требуются.
С1 Индексы ХМ1. позволяют достичь такой же производительности операций доступа к данным ХМ1., имеющим сложную структуру, как и при обеспечении с помощью обычных индексов доступа к реляционным данным, характеризующимся гораздо более простой структурой, но следует учитывать, что применение индексов ХМ1., как и всех прочих индексов, связано с возникновением дополнительных издержек. В табл. 9З приведены контрольные вопросы, с помощью которых можно проще определить необходимые условия применения индексов. 378 Глава 9 Таблица 9.3. Контрольные вопросы, позволяющие определить условия применения индексов Вопрос Рекоиендация Много ли операций вставки или обновления применяется к рассматриваемой таблице? Являются ли данные таковыми, что определен- ный на них индекс характеризуется высо~ой степенью избирательности? Если ответ на этот вопрос является положительным и столбец с этими данными часто упоминается в кон- струкциях ннхвк, то задайте на нем индекс.
Уничтожены ли все индексы, которые больше не требуются? Если ответ на этот вопрос является отрицательным, почему это не сделано? Предусмотрена ли утвержденная стратегия со- провождения индексов? Если ответ на этот вопрос является отрицательным, почему это не сделано? Упражнения 9.1. Назовите по меньшей мере два способа определения индексов, заданных на таблице Нцюапнезоцксез.Етр1оуее в базе данных Аг(тгепсцкеиот)гз. 9.2. Создайте некластеризованный индекс на столбце мос(1йфес(Овсе таблицы Рког(цскфоп.