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

Откуда: Rostov-on-Don
Сообщений: 488
Есть база данных, в ней есть справочники, информацию из которых надо быстро выдать пользователю, есть набор постоянно обрабатываемых данных, которые можно выдавать не моментально, есть сами процедуры обработки этих данных, которые могут работать и 20 минут, и 40 и час. Вообщем одни операции мешают другим, в частности в момент обработки сервер явно тормозит.
Теперь задача распределить это на несколько серверов.
Собственно я раньше вообще с распределением не связывался, поэтому не знаю с какой стороны подойти. Толи разбить все на несколько баз данных и обращаться к данным из разных баз, толи можно как-то одну базу каким-то образом разместить на нескольких серверах, но чтоб работать с ней как с единой базой (это более привлекательно).
Вообщем я даже не знаю, что конкретно спрашивать. Знаю только что одна база данных на одном сервере не справится. Какие есть варианты решения этой проблемы?
3 июн 04, 16:42    [720289]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Underking
Вообщем одни операции мешают другим, в частности в момент обработки сервер явно тормозит.

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

Соответственно и способы решения проблемы будут различаться. Радикально.
3 июн 04, 16:49    [720330]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
GreenSunrise
Что означает "тормозит"?

Проблема в том, что реальные эксперементы с базой поставить нельзя, ибо она еще не сделана и нет самих данных. Но предварительные опыты просто показывают, что сервер в процессе обработки возвращает информацию заметно медленней.
Ожидаются частые обращения к базе, в частности сайт работает на процедурах и данных из этой базы. Администраторы должны работать с данными из базы. Т.е. требуется быстро выдавать результат.
Но при этом есть процедуры, которые делают очень зверские расчеты. Все что касается данных, обрабатываемых этими расчетами, там можно подождать завершения. Но сайт и администрирование должны работать моментально.
Т.е. вроде как получаются две части базы, где работа одной части не должна сказываться на другую. Так и просится рассадить их на два сервера.
3 июн 04, 17:10    [720424]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
GreenSunrise
Member

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

Данные, используемые для долгих расчетов и в системе моментального отклика, пересекаются? Или это совершенно разные таблицы?

Насколько важна их актуальность, если будет необходимость сделать дублирование (лог шиппингом, репликацией и т.д.) - реальные данные на моментальный отклик, копию - на долгую обработку.
3 июн 04, 17:20    [720476]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
GreenSunrise
Отлично. Вот и выясните, в чем именно тормоза - в недостатке ресурсов или же в блокировках.

Недостаток ресурсов. С блокировками я как-нибудь разберусь, возможно продублирую некоторые данные. Но запускаю расчет и тормозит работа с другой базой на этом сервере. Сервер двухпроцессорный Xeon 2.4, 1Гб, 4 IDE Barracuda 60Гб.

GreenSunrise
Данные, используемые для долгих расчетов и в системе моментального отклика, пересекаются? Или это совершенно разные таблицы?

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

GreenSunrise
Насколько важна их актуальность, если будет необходимость сделать дублирование (лог шиппингом, репликацией и т.д.) - реальные данные на моментальный отклик, копию - на долгую обработку.

Это один из вариантов. Конечно я не в восторге от него, но если понадобится возможно придется воспользоваться.
Просто те данные, которые не участвуют в расчете, дублировать не хотелось бы.
3 июн 04, 17:35    [720552]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
С блокировками хорошо бы попытаться сначала разобраться по-другому. Дублирование данных использовать только в случае, когда это действительно необходимо.

Если не хватает ресурсов, то стоит ли разносить на разные сервера? Может, нарастить один-единственный? Памяти ему додать, процов несколько поставить - пущай параллелит?

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

Безусловно, также возможно использование distributed queries (см. хелп). Когда данные разнесены именно на несколько серверов, в разные базы. Это усложнит проектирование системы и программирование, добавит головной боли с администрированием, но в чем-то может быть и поможет.
3 июн 04, 17:43    [720587]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
автор
С блокировками хорошо бы попытаться сначала разобраться по-другому.

Тут просто надо будет смотреть, в какой момент и кому потребуется информация.

автор
Если не хватает ресурсов, то стоит ли разносить на разные сервера? Может, нарастить один-единственный? Памяти ему додать, процов несколько поставить - пущай параллелит?

После определенного предела стоимость более производительной техники резко возрастает. Есть шанс что как не крути, добиться нужнй производительности не получится.
Взять наш расчет. Если он будет работать час, это допустимо, два часа тоже допустимо, даже при желании можно и 10 часов ему дать на эту операцию. Но если данные для сайта будут долго выдаваться, это будет плохо. Пытаться производительностью выятнуть обе эти задачи, мне кажется неоправданным. Тормозит обработчик, пусть, это допустимо. Боюсь там и так понадобится приличный сервер, база (главным образом обрабатываемые таблицы) может занять и 10 и 20 гб.

автор
Но вот обработкой данных заниматься все равно будет один сервак.

Почему? Одни запросы может отрабатывать один сервер, другие запросы другой.

автор
Безусловно, также возможно использование distributed queries (см. хелп).

Честно говоря я теории сегодня начитался, но вот никаких примеров работы толком не видел.
Например вопрос, можно ли установить связь (Relationships) между двумя таблицами на разных серверах? Чтоб еще и каскадное удаление поддерживалось.
3 июн 04, 18:15    [720689]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Почему? Одни запросы может отрабатывать один сервер, другие запросы другой
В том примере имелось в виду физическое разделение одной базы одного сервера по файл-группам.

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

Что касается распределенных запросов
можно ли установить связь (Relationships) между двумя таблицами на разных серверах? Чтоб еще и каскадное удаление поддерживалось.
Нет, нельзя. Это придется делать триггерами.
3 июн 04, 18:31    [720750]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
автор
в частности сайт работает на процедурах и данных из этой базы. Администраторы должны работать с данными из базы.


А вот сайт и бэк нужно разнести по возможности - если конечно у них разные задачи. Что сайт делает? То же, что и администраторы?

-- Tygra's --
3 июн 04, 18:52    [720816]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
GreenSunrise
Почему? Одни запросы может отрабатывать один сервер, другие запросы другой
В том примере имелось в виду физическое разделение одной базы одного сервера по файл-группам.

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

GreenSunrise
Пока что на основании вашего описания мне кажется, что неплохим решением является лог шиппинг/репликация. Основной сервер занимается быстрой обработкой запросов. Второй считает долгие обработки, а актуальные данные ему скидываются с некоторой периодичностью.

Да, возможно это подходящий вариант. А сам сбос данных будет перед запускам процедуры расчета. Собственно эта процедура должна раз в час/два часа/сутки (как получится) произвадить перерасчет данных.


tygra
А вот сайт и бэк нужно разнести по возможности - если конечно у них разные задачи. Что сайт делает? То же, что и администраторы?

Сайт использует информацию из тех же таблиц, с которыми работают администраторы.
3 июн 04, 19:02    [720832]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Slava
Member

Откуда: Сибирь, Новосибирск
Сообщений: 794
А может стоит провести эксперимент, коли Вы все-равно их ставите, с группами файлов на разных дисках? Главное чтобы оба диска были на разных контроллерах.
4 июн 04, 07:30    [721343]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
Slava
А может стоит провести эксперимент, коли Вы все-равно их ставите, с группами файлов на разных дисках? Главное чтобы оба диска были на разных контроллерах.

На сервере 4 винта IDE 60Гб 0+1, т.е. страйп и зеркало. По факту работ идет с одним винтом на 120гб, который зазеркален.

Кроме того, основной недостаток нынешних эксперементов - отсутствие полноценной базы и практически нет рабочих объемов данных.
4 июн 04, 09:51    [721527]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Slava
Member

Откуда: Сибирь, Новосибирск
Сообщений: 794
автор
На сервере 4 винта IDE 60Гб 0+1, т.е. страйп и зеркало. По факту работ идет с одним винтом на 120гб, который зазеркален.

Это Вы к чему?
4 июн 04, 10:14    [721581]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Slava
Member

Откуда: Сибирь, Новосибирск
Сообщений: 794
Т.е. все контроллеры заняты?
4 июн 04, 10:21    [721605]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
Slava
Т.е. все контроллеры заняты?

Конкретно сейчас на этом сервере, да.
Но база пишется для другого сервера.
4 июн 04, 11:00    [721767]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Slava
Member

Откуда: Сибирь, Новосибирск
Сообщений: 794
Ну Вы если все же будете пробовать напишите плиз о результатах.
7 июн 04, 06:51    [724908]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
Собственно вопрос, где взять описание работы с распределенными базами, описание синтаксиса команд, описание возможностей? Крайне желательно на русском языке. Может есть книга, где подобная работа описывается? А то в моей не очень много внимания уделено этой проблеме.
7 июн 04, 11:44    [725435]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Поиск в BOL на словосочетание "distributed queries".
7 июн 04, 12:03    [725502]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
BOL там в основном все словестно описано, да еще и на английском.
7 июн 04, 13:05    [725767]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Ну за английский уж извините. Русскоязычного ничего предложить не могу.

А вот насчет "словесно" вы неправы. Все необходимое там есть - архитектура, подключение linked servers, получение данных через four-part имена, использование OPENROWSET, OPENDATASOURCE, OPENQUERY, получение метаданных, распределенные транзакции и т.д. Т.е. вся практика.

В BOL как раз отсутствуют "словесные" описания типа "как бы мне по уму построить распределенную систему". Ну дык это хелп. Сугубо прикладного назначения. К сожалению, из книг описательного типа ничего посоветовать не могу.
7 июн 04, 13:55    [726015]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
а можно хоть приблизительно определить узкое место?
если проблема в процессорах, то я бы попробовал запретить распараллеливание одного запроса - тогда один проц будет загружен на все 100 долгоиграющим запросом, а второй - будет обслуживать мелкие и быстрые. Таким образом наращивание числа процессоров даст возможность масштабировать количество одновременно выполняемых тяжелых запросов.

И еще как-то сомнительно мне кажется применение в таком сервере жестких дисков IDE... Посмотрите счетчики - может узкое место в подсистеме ввода-вывода все-таки?
7 июн 04, 15:01    [726261]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
автор
А вот насчет "словесно" вы неправы. Все необходимое там есть

Да есть, просто переберать все сслки не очень хороший способ поиска.
Просто очень хотелось бы найти приличное рускоязычное описание, хоть в инете, хоть книгу купить.

автор
И еще как-то сомнительно мне кажется применение в таком сервере жестких дисков IDE...

Как я уже писал, сама база еще не написана. Тот сервер, на котором сейчас гоняю базу, это сервер другой задачи. Для этой задачи будет отдельный сервер, и если действительно будет проблема с IDE, тогда придется обратить внимание на SCSI.
Проблема в том, что финальной базы еще нет, железа на котором будет работать нет, зато сейчас надо решить, как дальше писать базу.
7 июн 04, 16:48    [726793]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
Вообщем одни операции мешают другим, в частности в момент обработки сервер явно тормозит

даже если БД нет, но сервер "явно тормозит", то наверняка можно посмотреть почему он тормозит - в чем узкое место, а потом уже думать как с этим бороться - диапазон решений достаточно широк.
7 июн 04, 16:52    [726809]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
автор
даже если БД нет, но сервер "явно тормозит", то наверняка можно посмотреть почему он тормозит - в чем узкое место, а потом уже думать как с этим бороться - диапазон решений достаточно широк.

С одной стороны я с этим согласен. Поэтому хотел бы узнать, на что именно, где и в какой момент обратить внимание?
Но есть и другая сторона. Одна из обрабатывемых таблиц посепенно должна дорости до 10гб. Она практически вася будет апдейтиться при каждой обработке. А кроме нее есть и еще обрабатываемые таблицы. Что будет с памятью сервера при такой обработке?
7 июн 04, 17:10    [726880]     Ответить | Цитировать Сообщить модератору
 Re: Распределить базу на несколько серверов  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
Поэтому хотел бы узнать, на что именно, где и в какой момент обратить внимание
вот так удаленно трудно что-либо сказать. почитайте здесь о счетчиках производительности - может поможет.

Одна из обрабатывемых таблиц посепенно должна дорости до 10гб. Она практически вася будет апдейтиться при каждой обработке.

На таких объемах я Вам не помощник - не сталкивался с такими размерами еще пока.
8 июн 04, 10:20    [727898]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить