Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции1-4.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
707 Кб
Скачать
☆

4.2.2Группы файлов — до 20 мин.

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

Имеются три типа групп файлов со следующими основными свойствами:

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

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

  • Стандартная группа файлов. Содержит все страницы для таблиц и индексов, у которых при создании не была задана конкретная группа файлов. По умолчанию, стандартной группой файлов является первичная группа файлов. Члены роли db_owner могут менять стандартную группу файлов, делая стандартной ту либо иную группу файлов. В каждый момент времени стандартной может быть лишь какая-то одна группа файлов, и, повторим, если стандартная группа файлов не была задана явно, то первичная группа файлов автоматически будет стандартной. Чтобы изменить стандартную группу файлов, воспользуйтесь следующей командой Transact SQL (T-SQL):

ALTER DATABASE имя_базы_данных MODIFY FILEGROUP имя_группы_файлов DEFAULT

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

Чтобы повысить производительность, вы можете управлять размещением данных, создавая таблицы и индексы в разных группах файлов. Так, вы можете пожелать поместить таблицу, доступ к которой бывает часто, в группу файлов на большом массиве дисков (например, составленным из 10 дисков), а другую таблицу, доступ к которой бывает реже, поместить в другую группу файлов, расположенную на отдельном, меньшем массиве дисков (например, из 4 дисков). Таким образом, можно размещать таблицы, доступ к которым происходит чаще, по большему количеству дисков, позволяя этим дискам осуществлять параллельный ввод-вывод. Если вы не применяете массивы RAID и у вас имеется несколько дисковых накопителей, то у вас остается возможность применения групп файлов. Например, вы можете создать по отдельному файлу для каждого дискового накопителя, разместив каждый файл в отдельную пользовательскую группу файлов. Тогда вы сможете поместить каждую таблицу или индекс в отдельный файл (и на отдельный диск), назначив группу файлов при создании этой таблицы или индекса. Пример размещения файлов показан на Рисунок 4.1: один первичный файл данных размещен в первичной группе файлов на диске C, по одному вторичному файлу данных размещено в каждой из пользовательских групп файлов (FG1 и FG2) на дисках E и F и один файл-журнал размещен на диске G. После этого вы можете создавать таблицы и индексы в каждой из пользовательских групп файлов – FG1 или FG2.

Рисунок 4.1 — Применение групп файлов для управления размещением данных

Применение групп файлов для управления размещением данных

А может быть, вы будете применять пользовательскую группу файлов для распределения данных по нескольким дискам. На рисунке 4.2 показана пользовательская группа файлов FG1, состоящая из двух вторичных файлов данных, один из которых находится на диске E, а другой – на диске F (диске G размещен файл-журнал, а на C – первичный файл). В этом примере мы снова предполагаем, что каждый файл базы данных создан на отдельном физическом дисковом накопителе, и у нас нет аппаратной реализации RAID. Таблицы и индексы, созданные в этой пользовательской группе файлов, будут размещены сразу на двух дисках, потому что SQL Server применяет стратегию пропорционального расходования ресурсов.

Рисунок 4.2 — Применение одной группы файлов для распределения данных по нескольким дискам

Применение одной группы файлов для распределения данных по нескольким дискам

Если вы применяете RAID-систему, то вам может потребоваться распределить данные из большой таблицы по нескольким логическим дискам-массивам, сконфигурированным на двух или на нескольких RAID-контроллерах. Для этого вам надо будет создать пользовательскую группу файлов, с файлами, соответствующими каждому из этих контроллеров. Допустим, вы создали два вторичных файла данных, каждый – на своем массиве дисков, а каждый логический массив состоит из восьми физических дисков и сконфигурирован как RAID 5. Эти два массива обслуживаются двумя отдельными RAID-контроллерами. Чтобы создать таблицу или индекс, располагающуюся на обоих этих контроллерах (т.е. на всех 16 дисковых накопителях), создайте одну пользовательскую группу файлов, в которую поместите оба файла, а затем создайте таблицу или индекс в этой группе файлов. Пользовательская группа файлов FG1 распределена по 16 физическим дискам (двум логическим дискам – RAID-массивам) (см. рисунок 4.3). Там также показаны первичный файл данных на другом контроллере (с RAID 1) и файл журнала еще на одном контроллере (с RAID 10).

SQL Server позволяет оптимизировать распределение ваших данных по дисковым накопителям, за счет автоматического пропорционального расслоения (распределения) данных по всем файлам группы файлов. "Расслоение" (striping) – это термин, применяемый для описания распределения данных по нескольким файлам базы данных. Расслоение файлов SQL Server работает независимо от расслоения дисков RAID-массивов и, как вы видели из наших примеров, может применяться как в сочетании с RAID, так и самостоятельно.

Чтобы обеспечить расслоение данных, SQL Server записывает данные в файлы в объемах, пропорциональных свободному месту, остающемуся в файлах (относительно свободному месту в других файлах). Место для таблиц и индексов распределяется в виде экстентов (extents). Экстент – это единица для измерения места на диске, один экстент состоит из 8 страниц, а одна страница состоит из 8 Кб, так что один экстент состоит из 64 Кб. Допустим, нужно распределить 5 экстентов на файл F1, в котором свободно 400 Мб, и на файл F2, в котором свободно 100 Мб; тогда 4 экстента будут распределены на файл F1 и один экстент распределен на файл F2. Оба файла заполнятся до конца примерно одновременно, благодаря чему операции ввода-вывода будут распределяться по дискам более равномерно. Пропорциональное заполнение будет применяться и для пользовательских, и для первичных групп файлов. Если задать все файлы в группе файлов имеющими одинаковый начальный размер, то данные, по мере их загрузки, будут распределяться по файлам равномерно. Этот метод, когда в группах создаются файлы одинакового начального размера, можно порекомендовать для равномерного распределения данных по дисковым накопителям и, одновременно с этим, для равномерного распределения операций ввода-вывода.

Рисунок 4.3 — Распределение пользовательской группы файлов по нескольким RAID-контроллерам

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

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

  • Файлы и группы файлов не могут использоваться более чем одной базой данных.

  • Каждый файл может быть членом только одной группы файлов.

  • Данные и информация из журнала транзакций не могут размещаться в одном и том же файле. Работа с дисковой памятью для журнала транзакций и с дисковой памятью для данных производится по-разному.

  • Журнал транзакций никогда не является частью группы файлов.

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

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

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

  • Всегда размещайте файлы журналов на отдельных физических дисках, а не на дисках, содержащих файлы данных.

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

  • Создавайте файлы и группы файлов так, чтобы они охватывали как можно больше физических дисков – это повысит возможности параллельной работы ввода-вывода для дисков и максимизирует производительность.

  • Размещайте некластеризованные индексы интенсивно используемых таблиц в отдельных группах файлов не на тех же самых физических дисках, в которых содержатся сами данные из таблиц. Эта методика тоже позволяет осуществлять параллельный ввод-вывод для дисков.

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

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