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

Откуда: 2shanbe
Сообщений: 134
Здравствуйте.

Хотелось бы услышать мнение специалистов.

База достаточно большого размера с очень частым обращением со стороны WEB стал очень ресурсо-потребляемым,
планировал поставить кластер но понял что не этим не смогу помочь только отказоустойчивость подниму.

Сервер довольно таки не плохой работает под базу, с хорошим процессором и оперативной памятью больше 12GB,
в арсенале есть такой же сервер но в описаниях скулья не могу найти распределения нагрузки на несколько серверов.

Если есть решения или мнения прошу поделится.
1 дек 12, 20:16    [13562375]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
komil,

Побольше конкретики: размер базы, интенсивность запросов, версия сиквела (select @@version)
1 дек 12, 20:24    [13562403]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
Crimean
Member

Откуда:
Сообщений: 13148
komil,

балансировки нагрузки в чистом виде в MS SQL нет. однако есть механизмы, при помощи которых можно сделать достаточно похожее решение (в смысле сделать балансировку). однако, без поддержки со стороны вашего приложения ничего не получится
это с одной стороны. с другой может у вас кривенько работа с сервером идет. и достаточно будет подправить, на что коллега alexeyvg "слегка намекает"
1 дек 12, 20:50    [13562527]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
alexeyvg
komil,

Побольше конкретики: размер базы, интенсивность запросов, версия сиквела (select @@version)



Размер - 20GB

Версия - Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Data Center Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Интенсивность запросов - более 10 тыс запросов в мин
1 дек 12, 21:29    [13562648]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Crimean
komil,

балансировки нагрузки в чистом виде в MS SQL нет. однако есть механизмы, при помощи которых можно сделать достаточно похожее решение (в смысле сделать балансировку). однако, без поддержки со стороны вашего приложения ничего не получится
это с одной стороны. с другой может у вас кривенько работа с сервером идет. и достаточно будет подправить, на что коллега alexeyvg "слегка намекает"


Предложите схему, на стороне приложений можно сделать так как приложение сами писали и можем сделать все необходимое.
1 дек 12, 21:30    [13562653]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
Crimean
Member

Откуда:
Сообщений: 13148
какого рода запросы? идея очень простая. делаем копии и читаем с них. пишем в один "главный", который почти не читаем
но, возможно, действительно хватит работы над ошибками. есть несколько архитектурных проблем, которые могут вам жизнь портить
1 дек 12, 21:41    [13562687]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> 10.50.1600.1

патчить вроде как пора давно уже

> Интенсивность запросов - более 10 тыс запросов в мин

10 000 / 60 = 170 / сек? так это фигня. если хотя бы в 10 потоков идет то получаем около 60 ms на 1 запрос - более чем достаточно чтобы сделать почти что угодно (а судя по "Data Center Edition" явно не с 1 потока)

показывайте для начала 2 вещи:
- затыки оборудования, в смысле на чем у вас просадки? сожран проц или диски?
- типовые ресурсоемкие запросы по группам затычных ресурсов
1 дек 12, 21:53    [13562726]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Crimean
> 10.50.1600.1

патчить вроде как пора давно уже

> Интенсивность запросов - более 10 тыс запросов в мин

10 000 / 60 = 170 / сек? так это фигня. если хотя бы в 10 потоков идет то получаем около 60 ms на 1 запрос - более чем достаточно чтобы сделать почти что угодно (а судя по "Data Center Edition" явно не с 1 потока)

показывайте для начала 2 вещи:
- затыки оборудования, в смысле на чем у вас просадки? сожран проц или диски?
- типовые ресурсоемкие запросы по группам затычных ресурсов


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

Вообще запросы ресуремкие известны но по другому не как ведь база на то и база чтобы с нее читать и писать в нее.
1 дек 12, 21:58    [13562751]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Памяти добавьте, датасентер при "больше 12GB" как-то странно выглядит. Минимум чтоб вдвое размер БД превышала, а лучше втрое - навырост.
1 дек 12, 22:10    [13562797]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
Crimean
Member

Откуда:
Сообщений: 13148
если ЦП не жрет значит у вас там "накурено" сверх меры. имхо проще свет включить чем балансировку городить. разные порядки затрат
1 дек 12, 23:03    [13562921]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Ennor Tiegael
Памяти добавьте, датасентер при "больше 12GB" как-то странно выглядит. Минимум чтоб вдвое размер БД превышала, а лучше втрое - навырост.


Перепроверил сейчас стоит 16GB, думаю этого достаточно или?
2 дек 12, 00:34    [13563226]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
Crimean
если ЦП не жрет значит у вас там "накурено" сверх меры. имхо проще свет включить чем балансировку городить. разные порядки затрат



Возможно Вы правы, но система работает да и запросы говорится не первый день пишем, но если дадите дельный совет о том как еще оптимизировать то буду очень рад.
2 дек 12, 00:36    [13563230]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Я тут недвано статейку набросал. О проблемах при построении кластеров.
http://softpoint.ru/article_id4221.htm
Но общий вывод такой - не для каждого приложения можно построить кластер.
В SQL 2012 появился always on, но и там не все идеально,недавно нашли пару багов. Надеюсь в ближайших сервиспаках исправят.
2 дек 12, 13:05    [13563946]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
komil
ЦП практический не жрет но вот оперативки явно не хватает почти под 95% работает да и диски тоже очень загружены, но система уже работает да и патчи на накатываю а то мало ли ожидать от них можно все.
Так тогда лучше нарастить память, если просто нагрузка только на диски на чтение. Быстрее и проще.
komil
Перепроверил сейчас стоит 16GB, думаю этого достаточно или?
Поставьте хотя бы 64, если затык не в обновленниях и блокировках, а именно в чтениях, то проблему решите.

Если проблема в блокировках на обновлениях, которые ещё усугубляются тяжёлыми, большими запросами на чтение, то поможет вынос этих запросов на второй сервер. Инфу на него можно дублировать например репликациями. Если версия была бы 2012, то можно использовать always on, как уже сказал МуМу, это проще.
2 дек 12, 13:27    [13563992]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
МуМу
Я тут недвано статейку набросал. О проблемах при построении кластеров.
http://softpoint.ru/article_id4221.htm
Но общий вывод такой - не для каждого приложения можно построить кластер.
В SQL 2012 появился always on, но и там не все идеально,недавно нашли пару багов. Надеюсь в ближайших сервиспаках исправят.


Прочитал про указанное вами решение, очень интересно но политика компании не позволяет внедрять сторонние решения.
2 дек 12, 14:31    [13564155]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
alexeyvg
komil
ЦП практический не жрет но вот оперативки явно не хватает почти под 95% работает да и диски тоже очень загружены, но система уже работает да и патчи на накатываю а то мало ли ожидать от них можно все.
Так тогда лучше нарастить память, если просто нагрузка только на диски на чтение. Быстрее и проще.
komil
Перепроверил сейчас стоит 16GB, думаю этого достаточно или?
Поставьте хотя бы 64, если затык не в обновленниях и блокировках, а именно в чтениях, то проблему решите.

Если проблема в блокировках на обновлениях, которые ещё усугубляются тяжёлыми, большими запросами на чтение, то поможет вынос этих запросов на второй сервер. Инфу на него можно дублировать например репликациями. Если версия была бы 2012, то можно использовать always on, как уже сказал МуМу, это проще.


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

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

Версия базы указал выше и она не позволяет пока использовать технологию Always On, есть ли еще решения от MS чтобы распределять хотя бы чтение и запись на две базы?

Спасибо за обсуждение вопроса, надеюсь наше обсуждение поможет еще кому то в будущем.
2 дек 12, 14:38    [13564176]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Есть еще сферический конь в вакуме PWD. У меня лично нет знакомых которые его бы использовали. То есть концептуально это решение для очень больших БД. Так что думаю это не ваш случай.
2 дек 12, 16:39    [13564438]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Насчет логшипинга - почему бы и нельзя его использовать? В статье я уже описывал, если вы умеете управлять подключениями в вашем приложении - вы можете перенаправлять запросы на другой сервер. А в момент востановления БД ставить семафор по которому система будет понимать что сейчас нужно направлять только на основной серер. Сложнее написать правильный балансировщик. Насчет востановления - если у вас нет длинных по времени запросов, эта схема может работать достаточно эффективно. Проблема правда в том что не все запросы можно направлять на устаревшую(пускай и 5-ть минут) копию БД. Соответсвенно , нужно явно в коде прописывать какие запросы можно перенаправлять а какие нельзя.
2 дек 12, 16:45    [13564447]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34023
Блог
МуМу
Есть еще сферический конь в вакуме PWD. У меня лично нет знакомых которые его бы использовали. То есть концептуально это решение для очень больших БД. Так что думаю это не ваш случай.


я спрашивал на какой-то конференции у лектора, есть ли внедрения PWD в России?
он ответил, что о таком не слышал,

в любом случае, при базе в 20Гб это было бы весьма странным решением, тем более, что PDW предполагает покупку спецоборудования и ПО
2 дек 12, 17:11    [13564506]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
komil
Версия базы указал выше и она не позволяет пока использовать технологию Always On, есть ли еще решения от MS чтобы распределять хотя бы чтение и запись на две базы?
Нет, в предыдущих версиях только репликация и лог-шипинг (с недоступностью базы время от времени) :-(
МуМу
Есть еще сферический конь в вакуме PWD.
Наверное, не PWD, а PDW?

Понятно, что это совсем не тот случай (он используется во первых для хранилищ, во вторых для больших объёмов - для 20 тб ещё можно было бы подумать, если экономия имеет меньший приоритет, нежели достижение результата).

И вообще, при возможности таких глобальных изменений проще и дешевле просто перейти на SQL Server 2012
2 дек 12, 19:10    [13564918]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
МуМу
Насчет логшипинга - почему бы и нельзя его использовать? В статье я уже описывал, если вы умеете управлять подключениями в вашем приложении - вы можете перенаправлять запросы на другой сервер. А в момент востановления БД ставить семафор по которому система будет понимать что сейчас нужно направлять только на основной серер. Сложнее написать правильный балансировщик. Насчет востановления - если у вас нет длинных по времени запросов, эта схема может работать достаточно эффективно. Проблема правда в том что не все запросы можно направлять на устаревшую(пускай и 5-ть минут) копию БД. Соответсвенно , нужно явно в коде прописывать какие запросы можно перенаправлять а какие нельзя.


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

Код переписать можно в случаи использования нескольких серверов с решением лог-шипинга, но обычно тратим на транзакции секунду максимум а в случаи добавления условия типа

if datasource1=0
then datasource2

потребует больше времени обработки и обычно долгой (был опыт)

P.S. код не относится не к какому либо языку программирования так что камнями не кидаться :)
2 дек 12, 21:18    [13565423]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
alexeyvg
komil
Версия базы указал выше и она не позволяет пока использовать технологию Always On, есть ли еще решения от MS чтобы распределять хотя бы чтение и запись на две базы?
Нет, в предыдущих версиях только репликация и лог-шипинг (с недоступностью базы время от времени) :-(
МуМу
Есть еще сферический конь в вакуме PWD.
Наверное, не PWD, а PDW?

Понятно, что это совсем не тот случай (он используется во первых для хранилищ, во вторых для больших объёмов - для 20 тб ещё можно было бы подумать, если экономия имеет меньший приоритет, нежели достижение результата).

И вообще, при возможности таких глобальных изменений проще и дешевле просто перейти на SQL Server 2012


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

Спасибо за предложение о переходе на 2012, но нет ли там подводных камней типа лог-шипинка когда вторая база восстанавливает данные с нее не возможно читать?
2 дек 12, 21:22    [13565444]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
komil
Спасибо за предложение о переходе на 2012, но нет ли там подводных камней типа лог-шипинка когда вторая база восстанавливает данные с нее не возможно читать?
Нет, вторая база будет доступна непрерывно. Вопрос только в стоимости лицензий и в обычных рисках любого апгрейда (возможные несовместимости и прочее).
komil
Думаю PWD самое крайнее решения MS в случаи разруливания большого объема данных это такой же миф как и RAC у Oracle
Ну, в случае PDW это не миф, но это действительно дорогое решение и для действительно больших объёмов и нагрузок.
И конечно, есть определённые ограничения по применимости, но они выясняются в начале внедрения, поскольку PDW это не покупка лицензии и железа, а весь комплекс вплоть до внедрения, соответственно Microsoft и его хардварный партнёр отвечают за конечный результат.
komil
Код переписать можно в случаи использования нескольких серверов с решением лог-шипинга, но обычно тратим на транзакции секунду максимум а в случаи добавления условия типа

if datasource1=0
then datasource2

потребует больше времени обработки и обычно долгой (был опыт)
Ну вообще даже если тратить на транзакцию в 1000 раз меньше (1 мс), то затраты на "if datasource1=0..." всё равно не должны быть как то заметны. Это же просто проверка бита, таких операций процессор выполняет миллиарды в секунду.
2 дек 12, 22:03    [13565573]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
komil
Member

Откуда: 2shanbe
Сообщений: 134
alexeyvg
komil
Спасибо за предложение о переходе на 2012, но нет ли там подводных камней типа лог-шипинка когда вторая база восстанавливает данные с нее не возможно читать?
Нет, вторая база будет доступна непрерывно. Вопрос только в стоимости лицензий и в обычных рисках любого апгрейда (возможные несовместимости и прочее).
komil
Думаю PWD самое крайнее решения MS в случаи разруливания большого объема данных это такой же миф как и RAC у Oracle
Ну, в случае PDW это не миф, но это действительно дорогое решение и для действительно больших объёмов и нагрузок.
И конечно, есть определённые ограничения по применимости, но они выясняются в начале внедрения, поскольку PDW это не покупка лицензии и железа, а весь комплекс вплоть до внедрения, соответственно Microsoft и его хардварный партнёр отвечают за конечный результат.
komil
Код переписать можно в случаи использования нескольких серверов с решением лог-шипинга, но обычно тратим на транзакции секунду максимум а в случаи добавления условия типа

if datasource1=0
then datasource2

потребует больше времени обработки и обычно долгой (был опыт)
Ну вообще даже если тратить на транзакцию в 1000 раз меньше (1 мс), то затраты на "if datasource1=0..." всё равно не должны быть как то заметны. Это же просто проверка бита, таких операций процессор выполняет миллиарды в секунду.


Приложения которые работают с базой реализованы в WEB/WIN решениях и допустим тот же драйвер подключения в БД пока проверить и будет ждать ответа от БД пройдет не мало времени.

Решение Always On реально заинтересовало, сегодня потратил выходной на изучение данного решение и судя по написаному в блогах MS, решение довольно таки хорошее. Мне это решение напомнило зеркалирование только здесь база будет доступной, да и метод синхронизации данных довольно таки похож на зеркалирование, все запросы с праймари сервера будут в асинхронном режиме выполняться на втором сервере.

Спасибо огромное за помощь, думаю я уже выбрал направление однозначно сделаю Always On но вот вопрос лицензирования не рассматривал еще.

Вообще можем дискуссию переключить на обсуждение Always On, или же открыт новый пост?
2 дек 12, 22:18    [13565622]     Ответить | Цитировать Сообщить модератору
 Re: Распределение нагрузки на два БД  [new]
МуМу
Member

Откуда:
Сообщений: 1134
if datasource1=0
then datasource2
Эта конструкция отрабатывает настолько ничтожно мало что она не может рассматриваться на полном серьезе.При правильной реализации эта проверка делается в оперативной памяти а не считыванием каждый раз с БД. Там много других подводных камней,запросы в транзакциях не факт что вообще можно перенаправлять, потому что изменения транзакции не будут учитываться, да и задержка синхронизации будет. А вот условно аналитические запросы перенаправлять можно. Если вы знаете что запрос отрабатывает в среднем хотя бы несколько секунд и ему можно прочитать устаревшие данные, проверка на миллисекунды роли не сыграет.
2 дек 12, 22:20    [13565632]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить