Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
Добрый день, уважаемые форумчане!
У меня есть 2-х процессорный сервер Xeon 4 ядра и 16 Гб ОЗУ. Сервер БД MS SQL Server 2008R2 Std+Windows 2008R2 Std.
Пользователей около 100 человек. Одновременно обычно работает около 60 и 70% из них "писатели". База OLTP 1С 8.2. Также у меня есть БД размер полной копии около 50 Гб. Хочу использовать полную модель восстановления. Имеется 6 дисков SAS по 73 Гб и 2 диска SAS по 300 Гб. Думаю как правильно организовать разбивку массивов. Материнская плата поддреживает RAID 0,1,5,10.
Вариант 1
1 массив: 2 диска по 73 в RAID 1 (ОС+ПО SQL Server+служебные базы, кроме tempdb)
2 массив: 2 диска по 73 в RAID1 (первичная файловая группа, в которой исключены "транзакционные" таблицы: бух. проводки, таблицы движений товара и другие высоконагруженные большие таблицы)+8 файлов базы tempdb
3 массив: 2 диска по 300 в RAID 1 (один файл логов)
4 массив 2 диска по 73 в RAID 1 (вторичная файловая группа, в которой содержится "транзакционные" таблицы: бух. проводки, таблицы движений товара и другие высоконагруженные большие таблицы).

Каждые 15 минут делаем копии журнала, каждую ночь полную копию БД. Резервирование происходят сразу на сетевой диск на сервере, расположенном в другом здании.

Вариант 2
1 массив: 2 диска по 73 в RAID 1 (ОС+ПО SQL Server+служебные базы, кроме tempdb)
2 массив: 2 диска по 73 в RAID0 (первичная файловая группа, в которой исключены "транзакционные" таблицы: бух. проводки, таблицы движений товара и другие высоконагруженные большие таблицы)+8 файлов базы tempdb
3 массив: 2 диска по 300 в RAID 1 (один файл логов)
4 массив 2 диска по 73 в RAID 0 (вторичная файловая группа, в которой содержится "транзакционные" таблицы: бух. проводки, таблицы движений товара и другие высоконагруженные большие таблицы).

Каждые 15 минут делаем копии журнала, каждую ночь полную копию БД. Резервирование происходят сразу на сетевой диск на сервере, расположенном в другом здании.
Плюс ставим в другой серверной еще один сервер БД и включаем режим Mirroring. В случае аварии с основным сервером переключаем работу на другую ноду.

Какой вариант предпочтительнее. Или если Вы предложите свой, буду очень признателен. Также у меня в запасе есть еще 4 запасных диска SAS (может есть смысл поставить 2 из них вместо 300 Гб и организовать массивы, как-то по -другому).
Спасибо.
19 мар 12, 13:39    [12273328]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А "горячая замена" вгде?
19 мар 12, 13:55    [12273528]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
tpg
А "горячая замена" вгде?

Имеется.
19 мар 12, 14:02    [12273635]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
beginner_dba
tpg
А "горячая замена" вгде?

Имеется.
Два по 73 и два по 300?
19 мар 12, 14:06    [12273678]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
tpg
beginner_dba
пропущено...

Имеется.
Два по 73 и два по 300?

Именно, так.
19 мар 12, 14:28    [12273870]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ради RAID0 городить зеркалирование... А стоит ли?
К тому же, если у вас резервирование журнала будет каждые 15 минут, не думаю, что вам под него потребуется зеркало из 300 гиговых дисков (хотя, всё зависит от нагрузки и проводимых операций).
Думаю, 1 вариант - самое то. К тому же, если под лог применить 73 гиговые диски, то можно сэкономить на хотспаре - вместо 2-х по 300 добавить 2 по 73 и приторочить их ещё куда-нить, например, оделить темповую базу от данных, ИМХО.
19 мар 12, 14:44    [12274069]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Кстати, зачем вам 8 файлов базы tempdb? Вы меряли уже нагрузку по ним? У вас база tempdb является узким местом?
19 мар 12, 14:46    [12274106]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
0. Я не очень понимаю, как можно говорить о "высокой нагрузке" на машине с таким маленьким объемом памяти. На спичках экономите?
1. Если вы будете делать бэкап журнала каждые 15 минут, то 300 гиг под лог вы не исчерпаете никогда даже близко.
2. Если действительно предполагается значительная дисковая нагрузка в рандомном паттерне (а с таким количеством памяти по-другому и не выйдет), то зеркало для файлов данных вас не спасет, нужно десятку городить.
3. Массив 1 у вас будет простаивать 99,9999% времени после старта системы. У вас вроде не очень много дисков, как мне показалось, чтобы так ими разбрасываться.
4. Бэкапиться в сеть - очень, очень плохо.

Итого, я бы посоветовал:

1. RAID 1 - 2*73. Система, системные базы, tempdb. Я не знаю, насколько активно 1С юзает временные объекты, но у нас на сервере БД (RCSI + XML + table variables + 400 пользователей в пике) такое зеркало без проблем держит суммарную нагрузку порядка 30 Мб/сек и очередь редко поднимается выше 0,5.
2. RAID 10 - 2*300+4*73. Файлы данных. В данном случае акцент не на количество места на диске, а на количество шпинделей в массиве.
3. RAID 1 - 2*73. Журнал транзакций.

Если решите таки бэкапиться локально, то можно убрать из второго тома 2*300 и класть бэкапы туда. Тогда у вас будет локально храниться некоторая история, например с момента последнего фулла, что иногда бывает полезно для разбора полетов на определенную дату в прошлом. Ну и разношерстные диски в одном массиве - тоже не самая лучшая идея.

Дальше все будет зависеть от того, насколько умный у вас рейд-контроллер и есть ли на нем возможность поставить кэш с батарейкой (BBU)...
19 мар 12, 14:52    [12274177]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
tpg
Кстати, зачем вам 8 файлов базы tempdb? Вы меряли уже нагрузку по ним? У вас база tempdb является узким местом?

Где-то прочитал о том, что на каждое ядро процессора нужно создавать один файл данных tempdb. 1C создает очень много временных таблиц, практически вся работа 1С это сплошное использование временных таблиц.
19 мар 12, 15:22    [12274470]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
tpg
Ради RAID0 городить зеркалирование... А стоит ли?
К тому же, если у вас резервирование журнала будет каждые 15 минут, не думаю, что вам под него потребуется зеркало из 300 гиговых дисков (хотя, всё зависит от нагрузки и проводимых операций).
Думаю, 1 вариант - самое то. К тому же, если под лог применить 73 гиговые диски, то можно сэкономить на хотспаре - вместо 2-х по 300 добавить 2 по 73 и приторочить их ещё куда-нить, например, оделить темповую базу от данных, ИМХО.

У меня только 8 "посадочных мест" на сервере. То есть Вы предлагаете сделать вариант 1: 4 зеркальных массива по 73Гб каждый полезной емкости.
19 мар 12, 15:26    [12274503]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
Ennor Tiegael
0. Я не очень понимаю, как можно говорить о "высокой нагрузке" на машине с таким маленьким объемом памяти. На спичках экономите?
1. Если вы будете делать бэкап журнала каждые 15 минут, то 300 гиг под лог вы не исчерпаете никогда даже близко.
2. Если действительно предполагается значительная дисковая нагрузка в рандомном паттерне (а с таким количеством памяти по-другому и не выйдет), то зеркало для файлов данных вас не спасет, нужно десятку городить.
3. Массив 1 у вас будет простаивать 99,9999% времени после старта системы. У вас вроде не очень много дисков, как мне показалось, чтобы так ими разбрасываться.
4. Бэкапиться в сеть - очень, очень плохо.

Итого, я бы посоветовал:

1. RAID 1 - 2*73. Система, системные базы, tempdb. Я не знаю, насколько активно 1С юзает временные объекты, но у нас на сервере БД (RCSI + XML + table variables + 400 пользователей в пике) такое зеркало без проблем держит суммарную нагрузку порядка 30 Мб/сек и очередь редко поднимается выше 0,5.
2. RAID 10 - 2*300+4*73. Файлы данных. В данном случае акцент не на количество места на диске, а на количество шпинделей в массиве.
3. RAID 1 - 2*73. Журнал транзакций.

Если решите таки бэкапиться локально, то можно убрать из второго тома 2*300 и класть бэкапы туда. Тогда у вас будет локально храниться некоторая история, например с момента последнего фулла, что иногда бывает полезно для разбора полетов на определенную дату в прошлом. Ну и разношерстные диски в одном массиве - тоже не самая лучшая идея.

Дальше все будет зависеть от того, насколько умный у вас рейд-контроллер и есть ли на нем возможность поставить кэш с батарейкой (BBU)...


Может быть сделать так

2 диска в RAID 1 для системы и системных БД и для файла данных tempdb
4 диска 73 Гб в 10 RAID для файлов данных (стоит ли разносить БД по разным файлам?)
2 диска в 1 RAID 73 Гб для логов БД и (логов tempdb?)

Также увеличить память до 32 Гб (предел редакции Windows). Также приторочить где-нибудь сбоку (может корзиной какой-нибудь) массив RAID 0 2*300Гб=600 Гб для локальных копий.

В случае аварии:
1. Сгорела материнка или контроллер -здесь RAID не поможет. Решение: имею еще один слабый сервер, в другой серверной другого здания (с установленным всем хозяйством Windows, SQL Server), такой есть у меня, на который еженочно копирую фулл копию и каждые 15 минут копии журналов с локально сохраненных бэкапов. Вынуть последние 15 минут tail backup c массива логов не получится ибо RAID. Значит потеряли последние 15 минут. Это не есть проблема. Накатываю на фулл копию все доступные копии журналов. Меняю IP адрес и вперед.
2. Затопление серверной или пожар в ней. Тот же, что и пункт 2
3. Отказ носителя. Просто горячо меняю и все.

Верно?
19 мар 12, 15:39    [12274612]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
beginner_dba
Может быть сделать так

2 диска в RAID 1 для системы и системных БД и для файла данных tempdb
4 диска 73 Гб в 10 RAID для файлов данных (стоит ли разносить БД по разным файлам?)
2 диска в 1 RAID 73 Гб для логов БД и (логов tempdb?)
Нормальный вариант.

Можно ещё сделать вместо "4 диска 73 Гб в 10 RAID для файлов данных " 2 Х 2 диска в RAID 1, праймари группу создать из 2-х файлов равного размера, положить на эти зеркала.

Может быть эффективнее (хуже точно не будет).
19 мар 12, 16:26    [12275054]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
alexeyvg
beginner_dba
Может быть сделать так

2 диска в RAID 1 для системы и системных БД и для файла данных tempdb
4 диска 73 Гб в 10 RAID для файлов данных (стоит ли разносить БД по разным файлам?)
2 диска в 1 RAID 73 Гб для логов БД и (логов tempdb?)
Нормальный вариант.

Можно ещё сделать вместо "4 диска 73 Гб в 10 RAID для файлов данных " 2 Х 2 диска в RAID 1, праймари группу создать из 2-х файлов равного размера, положить на эти зеркала.

Может быть эффективнее (хуже точно не будет).


Спасибо огромное. Разделять данные нужно по размеру или по интенсивности использования? И как насчет tempdb? Нужно ли ее разделять на файловые группы и класть на одном массиве эти группы?
19 мар 12, 16:54    [12275368]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
beginner_dba
Спасибо огромное. Разделять данные нужно по размеру или по интенсивности использования?
Нет, не надо разделать данные. Это скользкий путь; он в принципе самый точный, но требует очень хорошего знания работы конкретно вашей системы. Так что это можно делать опытному DBA после длительной работы с приложением.

Если бы был общий правильный алгоритм (типа по размеру или по интенсивности использования), то он бы использовался самим SQL Server-ом сразу :-)

Просто создайте в файловой группе PRIMARY 2 файла одинакового размера, по одному на зеркало, и всё.

beginner_dba
И как насчет tempdb? Нужно ли ее разделять на файловые группы и класть на одном массиве эти группы?
Да, это рекомендуется, хотя это хуже, чем расположение файлов на разных массивах. Но у вас массивов всего то 3-4...
19 мар 12, 17:03    [12275482]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
Просто создайте в файловой группе PRIMARY 2 файла одинакового размера, по одному на зеркало, и всё.


Так сейчас есть 2 файловые группы. Сначала наверное нужно все "слить" в одну. А затем просто добавить в группу PRIMARY еще один файл. И SQL Server сам перераспределить как разбросать объекты между файлами?
19 мар 12, 17:23    [12275704]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
alexeyvg
Можно ещё сделать вместо "4 диска 73 Гб в 10 RAID для файлов данных " 2 Х 2 диска в RAID 1, праймари группу создать из 2-х файлов равного размера, положить на эти зеркала.

Может быть эффективнее (хуже точно не будет).
Согласен, хуже не будет, скорее всего будет лучше (если контроллер дешевый и/или встроенный в материнку).

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

Также нет большого смысла выносить отдельно файл лога tempdb - там же simple recovery, поэтому полноценного sequenced write access pattern вы не получите, будет примерно тот же random access, что и для файлов данных. Вынос же лога tempdb на диск с логами основной базы, наоборот, может ухудшить ситуацию, т.к. головкам придется постоянно мотаться между файлами логов разных баз, а поиск дорожки - это самая долгая часть дисковой операции.
19 мар 12, 19:58    [12276805]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Ennor Tiegael
А вот резать tempdb на файлы и класть их на один диск, имхо - бульон из-под яиц. Все равно диски те же, дополнительной параллелизации доступа это не даст.
Это верно для файлов данных обычных баз.

А вот для tempdb, по моему, как раз исключение - хоть нарезка не даёт выйгрыша по скорости дисков, она устраняет конфликты в борьбе за доступ к файлам. То есть процессорам как бы не надо будет согласовывать между собой этот доступ.
19 мар 12, 21:25    [12277194]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
beginner_dba
Просто создайте в файловой группе PRIMARY 2 файла одинакового размера, по одному на зеркало, и всё.


Так сейчас есть 2 файловые группы. Сначала наверное нужно все "слить" в одну.
Можно сделать по 2 файла в каждой файловой группе, и разместить их попарно на дисках. Получится то же самое, даже немного лучьше.

beginner_dba
А затем просто добавить в группу PRIMARY еще один файл. И SQL Server сам перераспределить как разбросать объекты между файлами?
С существующими данными немного сложнее. При создании файловой группы и файлов сервер не перемещает данные в новые файлы.

Нужно это делать самостоятельно, накпример, пересоздав кластерные индексы. За это нужно браться, будучи уверенным, что вы ничего не испортите и ппредварительно сделав бакапы :-)

Если это напрягает, можно оставить ваш последний вариант, он тоже нормальный - думаю, с raid10 из 4-х дисков даже простенький контроллер справится...
19 мар 12, 21:32    [12277243]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
alexeyvg
beginner_dba
пропущено...


Так сейчас есть 2 файловые группы. Сначала наверное нужно все "слить" в одну.
Можно сделать по 2 файла в каждой файловой группе, и разместить их попарно на дисках. Получится то же самое, даже немного лучьше.

beginner_dba
А затем просто добавить в группу PRIMARY еще один файл. И SQL Server сам перераспределить как разбросать объекты между файлами?
С существующими данными немного сложнее. При создании файловой группы и файлов сервер не перемещает данные в новые файлы.

Нужно это делать самостоятельно, накпример, пересоздав кластерные индексы. За это нужно браться, будучи уверенным, что вы ничего не испортите и ппредварительно сделав бакапы :-)

Если это напрягает, можно оставить ваш последний вариант, он тоже нормальный - думаю, с raid10 из 4-х дисков даже простенький контроллер справится...


А если просто сделать 2 файла равного размера и с одинаковым приращением в одной файловой группе в пустой БД, то будет ли сам SQL Server их равномерно наполнять?
20 мар 12, 11:05    [12279406]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
beginner_dba
Member

Откуда: Киев
Сообщений: 331
alexeyvg,

Если добавить файл такого же максимального размера в файловой группе, какой указан в первом файле файловой группы, будет ли сам SQL Server потихоньку наполнять этот второй файл новыми данными?
20 мар 12, 11:08    [12279420]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
beginner_dba
alexeyvg,

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

BOL
В файловых группах для каждого файла используется стратегия пропорционального заполнения. При записи данных в файловую группу компонент SQL Server Database Engine записывает в каждый файл количество данных, пропорциональное свободному пространству этого файла, вместо записи всех данных в первый файл до его заполнения. Затем запись производится в следующий файл. Например, если в файле f1 свободно 100 МБ, а в файле f2 — 200 МБ, то в файл f1 записывается одна часть данных, а в файл f2 — две части. Таким образом, оба файла будут заполнены примерно в одно и то же время, и достигается простейшее распределение данных между хранилищами.
20 мар 12, 11:16    [12279463]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
pt12pt
Member

Откуда:
Сообщений: 183
tpg
beginner_dba
alexeyvg,

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

BOL
В файловых группах для каждого файла используется стратегия пропорционального заполнения. При записи данных в файловую группу компонент SQL Server Database Engine записывает в каждый файл количество данных, пропорциональное свободному пространству этого файла, вместо записи всех данных в первый файл до его заполнения. Затем запись производится в следующий файл. Например, если в файле f1 свободно 100 МБ, а в файле f2 — 200 МБ, то в файл f1 записывается одна часть данных, а в файл f2 — две части. Таким образом, оба файла будут заполнены примерно в одно и то же время, и достигается простейшее распределение данных между хранилищами.

Спасибо огромное.
Значит в моем случае, лучше всего пересоздать кластерный индекс для таблиц второй файловый группы на первичную. После этого создать в первичной еще один файл, указав местоположение в качестве второго массива (4 диска делим на 2*2). Верно?
20 мар 12, 12:53    [12280298]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
pt12pt
tpg
пропущено...

пропущено...

Спасибо огромное.
Значит в моем случае, лучше всего пересоздать кластерный индекс для таблиц второй файловый группы на первичную. После этого создать в первичной еще один файл, указав местоположение в качестве второго массива (4 диска делим на 2*2). Верно?
Только сначала создать в первичной еще один файл, а потом уже пересоздать кластерный индекс для таблиц второй файловый группы на первичную.
20 мар 12, 16:25    [12282518]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
pt12pt
Member

Откуда:
Сообщений: 183
alexeyvg
pt12pt
пропущено...

Спасибо огромное.
Значит в моем случае, лучше всего пересоздать кластерный индекс для таблиц второй файловый группы на первичную. После этого создать в первичной еще один файл, указав местоположение в качестве второго массива (4 диска делим на 2*2). Верно?
Только сначала создать в первичной еще один файл, а потом уже пересоздать кластерный индекс для таблиц второй файловый группы на первичную.


Спасибо, все толково разъяснили.
20 мар 12, 20:15    [12284001]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно распределить диски?  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
6 по 73 - RAID5 под данные. D:
и 2 по 300 зеркало - под логи. С: И на них же - загрузка и системный своп.

И как бы пусть остальные спорят с этой конфигурацией.
21 мар 12, 06:36    [12285316]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить