Программирование >>  Программирование баз данных 

1 ... 95 96 97 [ 98 ] 99 100 101 ... 346


Статистический Описание

показатель

Avg. Bytes free Среднее количество свободных байтов на страницах, считанных в рез-рег page ультате полного просмотра. Этот показатель может принимать неоправ-

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

Avg. Page Средняя плотность страницы (в процентах). При вычислении значения

density (f ul 1) этого показателя учитывается размер строки, поэтому он может служить

более точным индикатором того, насколько полно заполнены страницы.

Чем выше полученное процентное значение, тем лучше

Информация, которая формируется с помощью оператора DBCC SHOWCONTIG, может использоваться по-разному, в зависимости от конкретных требований.

В частности, вывод команды SHOWCONTIG позволяет получить значительный объем сведений о том, являются ли страницы и экстенты базы данных полностью заполненными, в значительной степени фрагментированными, или находятся в каком-то промежуточном состоянии (последний вариант, по-видимому, является наиболее вероятным). Если база данных применяется в системе OLAP, то при высокой плотности заполнения страниц быстродействие системы повышается, а при наличии значительной степени фрагментации система функционирует менее эффективно. В системе OLTP проявляют ся почти противоположные закономерности (хотя и до определенной степени).

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

Команда dbreindex - еще один способ сопровождения индексов

Выше в данной в главе значительное внимание было уделено описанию оператора ALTER INDEX. Этот оператор играет первостепенную роль в обеспечении перестройки индексов и управлении степенями фрагментации. В связи с этим настоятельно рекомендуется все шире применять для сопровождения базы данных оператор ALTER INDEX. Вместе с тем необходимо учитывать, что команда DBREINDEX очень широко использовалась в прошлом и на ее основе создан весьма значительный объем программного обеспечения, поэтому автор не мог обойтись без упоминания этой команды, как и команды DBCC SHOWCONTIG, в своей книге.

Команда DBREINDEX также относится к категории команд DBCC и имеет такую синтаксическую структуру:

DBCC DBREINDEX (<database.owner.table name>[, <index name> [, <fillfactor>]]) [WITH NO INFOMSGS]

После вызова этой команды на выполнение происходит полное восстановление требуемого индекса. Если указано только имя таблицы без имени индекса, < index name >, то восстанавливаются все индексы для требуемой таблицы. Какая-либо отдельно



взятая команда, предназначенная для восстановления всех индексов в базе данных, не предусмотрена.

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

Кроме того, применение оператора DBCC DBREINDEX, как и оператора ALTER INDEX, приводит к воссозданию всех страниц, притом что на каждой странице остаются две свободные строки. Так же как и при использовании оператора CREATE TABLE, во время вызова на выполнение оператора DBCC DBREINDEX может быть задана опция <f illf actor>, аналогичная FILLFACTOR, которая может принимать любое значение от О до 100. Это число определяет процент заполнения страниц, вернее, то значение, которое будет характеризовать степень заполнения страниц после завершения перестройки индексов. Напомним, что после каждого разбиения страницы данные по-прежнему распределяются между двумя страницами поровну; таким образом, единственный способ постоянного поддержания заданного значения процента заполнения состоит в осуществлении регулярного восстановления индексов.

Если в качестве значения процента заполнения будет указан нуль, то заполнение страниц происходит не с учетом заданного процента заполнения, а по другому принципу. А именно, на страницу записывается максимально возможное количество строк за вычетом двух (об этом следует помнить, выбирая значение опции <f illf actor>).

Как уже было сказано, значение опции <f illfactor> (соответственно FILLFACTOR) используется в тех случаях, когда возникает необходимость откорректировать плотность заполнения страниц. Кроме того, более низкие значения плотности заполнения страницы (и поэтому низкие значения FILLFACTOR) идеально подходят для систем OLTP, в которых осуществляется большое количество операций вставки, поскольку это предотвращает разбиение страниц. А более высокие значения плотности страниц применимы для систем OLAP (уменьшается количество считываемых страниц, и вместе с тем почти отсутствует вероятность того, что в базе данных будет происходить разбиение страниц, поскольку количество операций вставки невелико или такие операции вообще не выполняются).

Рассмотрим пример восстановления индекса, определенного на первичном ключе таблицы Order Details, который был создан ранее в этой главе со значением коэффициента заполнения, равным 65. Для этого можно воспользоваться следующей командой DBCC:

DBCC DBREINDEX {Sales.SalesOrderDetail,

PK SalesOrderDetail SalesOrderID SalesOrderDetailID, 65)

После этого снова вызовем на вьшолнение оператор DBCC SHOWCONTIG, чтобы ознакомиться с полученными результатами:

DBCC SHOWCONTIG scanning SalesOrderDetail table...

Table: SalesOrderDetail (610101214); index ID: 1, database ID: 6

TABLE level scan performed.

- Pages Scanned................................: 1883

- Extents Scanned..............................: 236

- Extent Switches..............................: 235



- Avg. Pages per Extent........................: 8.0

- Scan Density [Best CountiActual Count].......: 100.00% [236:236]

- Logical Scan Fragmentation ..................: 0.05%

- Extent Scan Fragmentation ...................: 0.85%

- Avg. Bytes Free per Page.....................: 2809.1

- Avg. Page Density (full).....................: 65.29%

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Наиболее существенное изменение коснулось значения показателя Avg. Page Density. Полученное число немного меньше 65%, поскольку в СУБД SQL Server приходится учитывать размеры страницы и строки, но достигнутая величина является наиболее близкой к требуемой из всех возможных.

При использовании команды DBREIISTOEX и определении значения FILLFACTOR необходимо учитывать приведенные ниже рекомендации.

Если значение опции <fillfactor> в команде DBREINDEX не задано, то при выполнении команды DBREINDEX используется значение этой опции, которое использовалось во время выполнения предыдущей операции создания индекса. Если значение опции <fillfactor> еще ни разу не было задано, то используется такой коэффициент заполнения, при котором происходит полное заполнение страницы за вычетом двух строк (но в большинстве ситуаций такое заполнение является слишком полным).

Если значение опции <f illf actor> задано в команде DBREINDEX, то указанное значение становится применяемым по умолчанию значением опции FILLFACTOR для этого индекса.

Безусловно, комгьнда DBREINDEX может быть вызвана на выполнение во время работы базы данных в оперативном режиме, но автор настоятельно рекомендует не использовать такую возможность, поскольку в связи с восстановлением индекса блокируются ресурсы, а также может возникнуть целый ряд других проблем. По крайней мере, не следует выбирать для проведения такой операции период наибольшей нагрузки. А лучше всего в оперативном режиме использовать оператор ALTER INDEX, осуществлять с его помощью только реорганизацию, а не перестройку.

Следует еще раз подчеркнуть сказанное выше: в настоящее время команда DBREINDEX рассматривается как устаревшая, поэтому следует избегать ее использования в тех ситуациях, когда не нужно обеспечивать обратную совместимость (вместо нее должен применяться оператор ALTER INDEX).

Резюме

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

Основные рекомендации по использованию индексов приведены ниже.

Кластеризованные индексы обычно обеспечивают более высокое быстродействие, чем некластеризованные (следует учитывать, что при определенных



1 ... 95 96 97 [ 98 ] 99 100 101 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика