SQL Server – Как разделить один файл MDF на несколько и разделить данные таблицы на них?

В надежде повысить производительность SQL Server я хотел бы взять мою простую базу данных из одного файла (1 mdf и 1 ldf) и разделить файлы mdf (и, возможно, файлы ldf) на несколько дисков. Я думаю, что наиболее эффективный способ сделать это — разделить большие таблицы на несколько файлов MDF. (Я планирую просто использовать функцию секционирования, которая представляет собой модуль первичного ключа (который является int или bigint), например (MyTable.Id % 8), где 8 — количество имеющихся у меня дисков).

Какой самый быстрый/лучший/правильный способ сделать это? Например, какие команды SQL или операции SSMS мне нужно выполнить, чтобы добраться оттуда, где я сейчас нахожусь, туда, куда я хочу.

Любые другие предложения также будут оценены по достоинству. (Объединение дисков через дисковые пространства просто не похоже на вариант, потому что по какой-то причине я просто не получаю хорошей производительности при записи IOPS, когда делаю это.)

1 ответ

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

Процесс восстановления будет выглядеть примерно так. Допустим, текущий индекс имеет следующее определение:

      create clustered index [CIX_foo] on dbo.foo (FooID) on [PRIMARY];

Вы можете восстановить его следующим образом:

      create clustered index [CIX_foo] on dbo.foo (FooID) with (drop_existing = on) on [NewFileGroup];

Используйте любые другие параметры, которые вы обычно используете при создании этого индекса (например, sort_in_tempdb, Pad_index, онлайн, возобновляемый и т. д.). Также подумайте, имеет ли смысл изменение настроек сжатия существующего индекса — вы переписываете весь индекс, так что сейчас самое время!

Наконец, в качестве рекомендации я бы создал в новой файловой группе как минимум два файла на диск. Почему? Если вашего SWAG из 8 файлов (и, предположительно, 8 дисков) недостаточно для вашего варианта использования, вам придется снова пройти описанный выше процесс перестроения индекса. Но если вы это сделаете, скажем, по два файла на диске (всего шестнадцать), вы можете выделить новое хранилище и просто выполнить либо копирование файлов файловой системы (пока база данных находится в автономном режиме), либо восстановление с указанием новых местоположений. Любой из этих способов должен быть быстрее, чем восстановление индексов.

Другие вопросы по тегам