Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
14.01.2013, 14:30
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Есть функция, которая из массива строк Connection String выбирает первую доступную коннекцию и возвращает ее. Там наверчено больше, но типа такого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Таймаут в коннекции нужен приличный, минут 5-10 для дальнейшей работы. Массив строк берется из базы, и бывают случаи когда сервер доступен, база нет, начиная от ошибки в имени заканчивая ее каким-то состоянием, такое ловится довольно быстро и берется следующий эелемент. Если же юзер скажем ошибсся в имени сервера, то опен() ьорчит весь таймаут, а это плохо для определения доступности данных. Хотелось бы быстро определять. Если уменьшить таймаут, то эта коннекция уйдет для дальнейшей работы и это не хорошо, будет часто рваться по таймауту. Пока вижу такой вариант: делать еще одну коннекцию для проверки с небольшим таймаутом, и если прошло, то закрывать и открывать реальную с большим таймаутом. Но открытие двух коннектов как-то некрасиво и накладно... Как можно еще решить, ваше мнение? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 14:55
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Winnipuh, класс SqlConnection и так реализует pooling. Зачем ты поверх этого еще что-то делаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 15:44
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
bazileWinnipuh, класс SqlConnection и так реализует pooling. Зачем ты поверх этого еще что-то делаешь? ну, пока я ничего специального не делаю, нарвался на ситуацию, когда торчит на опене() и спросил ... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 16:37
|
|||
---|---|---|---|
|
|||
Проверка доступности SqlConnection |
|||
#18+
Winnipuh, А зачем вам тогда интервал соединения 5-10 минут для дальнейшей работы? Вы же уже соединились. Что потом требуется? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 17:54
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Sergey TSVWinnipuh, А зачем вам тогда интервал соединения 5-10 минут для дальнейшей работы? Вы же уже соединились. Что потом требуется? Это сервис, он делает: 1. забрать массив Connecton String[] 2. взять очередную строку из массива, если есть, иначе гоуту 9. 3. (попытаться) открыть коннекцию используя строку из массива 4. если не открывается, то гоуту на п.2., 5. выполнить процедуру (она может выполняться 10-60 сек) 6. забрать результат 7. закрыть 8. отдать результат клиенту 9. ретурн в п.5. если таймаут будет маленький обломается Но если он будет большой в п. 3, то придется торчать весь таймаут в некоторых случаях ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 18:01
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Winnipuh5. выполнить процедуру (она может выполняться 10 -60 сек )что ж за мешки вы ворочаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 18:10
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Winnipuh, о каком, блин, таймауте вообще речь? Есть свойство SqlCommand.CommandTimeout (время ожидания выполнения команды (в секундах), по умолчанию используется значение 30 секунд), что относится к Вашему пункту 5: выполнить процедуру. При чём тут SqlConnection? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 18:12
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Winnipuhв п.5. если таймаут будет маленький обломается Но если он будет большой в п. 3, то придется торчать весь таймаут в некоторых случаяхВсё-таки Вы путаете CommandTimeout и ConnectionTimeout ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 18:14
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
странная конструкция конечно получается я бы сделал по другому: у вас N коннекшнстрингов поднимаете N таксов и берете первый же отработавший а в таксе соответственно попытка открыть соедиение закрытие всех остальных отработавших соединение должно идти после того, как получите актуальное Если N - большое число, можно оптимизировать алгоритм случайной выборкой M (M подмножество N) строк из списка ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 18:20
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
skyANAWinnipuhв п.5. если таймаут будет маленький обломается Но если он будет большой в п. 3, то придется торчать весь таймаут в некоторых случаяхВсё-таки Вы путаете CommandTimeout и ConnectionTimeout закрутился... извините.... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 18:23
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
beg-in-erWinnipuh5. выполнить процедуру (она может выполняться 10 -60 сек )что ж за мешки вы ворочаете? выборки из базы, бывает и дольше... Для больших баз нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 18:38
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Arm79поднимаете N таксов и берете первый же отработавший а в таксе соответственно попытка открыть соедиение Я бы тоже так сделал ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 19:34
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Arm79странная конструкция конечно получается я бы сделал по другому: у вас N коннекшнстрингов поднимаете N таксов и берете первый же отработавший а в таксе соответственно попытка открыть соедиение закрытие всех остальных отработавших соединение должно идти после того, как получите актуальное Если N - большое число, можно оптимизировать алгоритм случайной выборкой M (M подмножество N) строк из списка алгоритм не странный, там все сложнее, чем я описал. В реале: я выбираю случайный индекс из массива случайным образом, т.е. мне надо распределять нагрузку. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 20:21
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
WinnipuhВ реале: я выбираю случайный индекс из массива случайным образом, т.е. мне надо распределять нагрузку. И как случайный индекс помогает равномерно ее распределить? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 22:06
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Winnipuh, вы явно что-то путаете, но что именно - пока не понял для того, чтобы получить открытое соединение, 30 секунд - это жуть как много. Все, что больше - это либо физически связь с сервером отвратна до ужаса, либо он очень сильно занят. Поэтому я считаю, что заморачиваться со случайным индексом строки соединения не нужно; отсортируйте ваш список в порядке предпочтительности и берите первый же отработавший коннект Далее, непонятно, какого рода у вас процедуры. Если у вас OLTP - то процедура, отрабатывающая свыше 30 секунд и, что очень важно, за это время не выдавшая клиенту ни одной строчки резалтсета - это хардкор. Если же она возвращает миллионы записей, то таймаут совершенно не при чем, по таймауту процедура не срубится. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 23:57
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Arm79Winnipuh, вы явно что-то путаете...skyANACommandTimeout и ConnectionTimeout ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.01.2013, 16:37
|
|||
---|---|---|---|
Проверка доступности SqlConnection |
|||
#18+
Winnipuh, Вам, как я понял, нужна простая проверка доступности сервера из выбранной строки коннекта. Её и реализуйте, а затем откроете коннекцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.01.2013, 17:07
|
|||
---|---|---|---|
|
|||
Проверка доступности SqlConnection |
|||
#18+
Я правильно понял, имеются N одинаковых БД (копии). и используются только на чтение? Так может посмотреть в сторону NLB какого-нибудь? Они и "здоровье" серверов отслеживают и имеют разные алгоритмы распределения нагрузки (если у вас простой сценарий - read only и копии баз), также имеют возможность балансировки PerSession и PerRequest. Вам я так понимаю подойдет PerSession. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.01.2013, 17:37
|
|||
---|---|---|---|
|
|||
Проверка доступности SqlConnection |
|||
#18+
Winnipuhbeg-in-erпропущено... что ж за мешки вы ворочаете? выборки из базы, бывает и дольше... Для больших баз нормально. А как клиентское ПО, ждет и ждет все время? А когда все инстансы под завязку, ждут еще больше? Если у вас очень много пользователей и вы уверены что заоптимизировали все уже по самые не могу. Можно рассмотреть что-то такое в первом приближении: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Координатор на основе некоторых метрик следит за загрузкой серверов и не позволяет перегружать их больше чем надо, очередь сглаживает всплески активности пользователей или случаи выхода серверов из строя. На координатор можно много повесить чего. Не зная вашу специфику трудно предлагать что-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/search_topic.php?author=DBCreator&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
9ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 1175ms |
total: | 1387ms |
0 / 0 |