Серверная (www.it-simple.ru)

Windows 2003, 1С, MS SQL и фрагментация файлов


Показательный пример.
База использовалась около месяца. Всё это время с ней активно работали.

Как заметно из рисунка, файловая система NTFS замечательна.
Оптимизация данных MS SQL превосходна.
Дефрагментацию надо ставить в планировщик, хотя бы на раз в месяц.

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

Как делать дефрагментацию?

Файл базы данных используется MS SQL, который, в свою очередь, получает команды от сервера 1С. Чтобы сделать файл доступным для дефрагментации и избежать сбоев, нужно правильно погасить связанные службы.

Порядок операций:

1. Останавливаем службу сервера 1С
2. Останавливаем службу сервера MS SQL
3. Делаем дефрагментацию раздела
4. Запускаем службу сервера MS SQL
5. Запускаем службу сервера 1С

Желательно сделать скрипт и поставить в планировщик на время, когда база точно не будет использоваться — например, ночь выходного дня.
Промежуток для планировщика проще всего выбирать опытным путём.

Можно ли поставить базу на SSD-диск?

Нет, ни в коем случае.

SSD очень шустрые. И доступ к данным внутри SSD-дисков устроен так, что понятие "фрагментации" практически отсутствует. То, что данные будут идти не "по порядку" — никак не скажется на скорости.

Вот только технология SSD всё ещё остаётся ненадёжной, и диски летят очень быстро даже при умеренной нагрузке. Что будет происходить с ними при полной нагрузке — догадаться совсем несложно.

Для достижения оптимального баланса между производительностью и надёжностью надо использовать RAID 5 на обычных дисках.

Нужно ли делать дефрагментацию, если база находится на рейде?

Да, обязательно.

В RAID данные бьются на блоки размером chunk_size (по умолчанию 64КБ), которые перераспределяются по элементам рейда.
Файловая система создаётся на массиве, то есть — внутри этой структуры. (Именно поэтому для производительности рекомендуют делать размер кластера ФС равным chunk_size и выравнивать её относительно рейда).

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

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