powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверка доступности SqlConnection
20 сообщений из 20, страница 1 из 1
Проверка доступности SqlConnection
    #38109251
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция, которая из массива строк Connection String выбирает первую доступную коннекцию и возвращает ее.
Там наверчено больше, но типа такого:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private SqlConnection getConnection()
{
SqlConnection sqlConnectionSelected = null;
//...
                           try
                           {
                                sconnection = searchConnections[nReturn];
                                sqlConnectionSelected = new SqlConnection(sconnection.ConnectionString);
                                sqlConnectionSelected.Open(); <----------- ! Timeout
                                break;
                            }
                            catch (Exception x)
                            {
                               ;//
                            }
return sqlConnectionSelected ;
}




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

Если же юзер скажем ошибсся в имени сервера, то опен() ьорчит весь таймаут, а это плохо для определения доступности данных.
Хотелось бы быстро определять. Если уменьшить таймаут, то эта коннекция уйдет для дальнейшей работы и это не хорошо, будет часто рваться по таймауту.
Пока вижу такой вариант: делать еще одну коннекцию для проверки с небольшим таймаутом, и если прошло, то закрывать и открывать реальную с большим таймаутом.
Но открытие двух коннектов как-то некрасиво и накладно...

Как можно еще решить, ваше мнение?
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109321
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh, класс SqlConnection и так реализует pooling. Зачем ты поверх этого еще что-то делаешь?
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109466
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileWinnipuh, класс SqlConnection и так реализует pooling. Зачем ты поверх этого еще что-то делаешь?

ну, пока я ничего специального не делаю, нарвался на ситуацию, когда торчит на опене() и спросил ...
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109589
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Winnipuh,

А зачем вам тогда интервал соединения 5-10 минут для дальнейшей работы? Вы же уже соединились. Что потом требуется?
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109733
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey TSVWinnipuh,

А зачем вам тогда интервал соединения 5-10 минут для дальнейшей работы? Вы же уже соединились. Что потом требуется?

Это сервис, он делает:

1. забрать массив Connecton String[]
2. взять очередную строку из массива, если есть, иначе гоуту 9.
3. (попытаться) открыть коннекцию используя строку из массива
4. если не открывается, то гоуту на п.2.,
5. выполнить процедуру (она может выполняться 10-60 сек)
6. забрать результат
7. закрыть
8. отдать результат клиенту
9. ретурн


в п.5. если таймаут будет маленький обломается
Но если он будет большой в п. 3, то придется торчать весь таймаут в некоторых случаях
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109755
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh5. выполнить процедуру (она может выполняться 10 -60 сек )что ж за мешки вы ворочаете?
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109770
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh, о каком, блин, таймауте вообще речь?
Есть свойство SqlCommand.CommandTimeout (время ожидания выполнения команды (в секундах), по умолчанию используется значение 30 секунд), что относится к Вашему пункту 5: выполнить процедуру.
При чём тут SqlConnection?
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109775
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuhв п.5. если таймаут будет маленький обломается
Но если он будет большой в п. 3, то придется торчать весь таймаут в некоторых случаяхВсё-таки Вы путаете CommandTimeout и ConnectionTimeout
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109780
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странная конструкция конечно получается

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


Если N - большое число, можно оптимизировать алгоритм случайной выборкой M (M подмножество N) строк из списка
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109788
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAWinnipuhв п.5. если таймаут будет маленький обломается
Но если он будет большой в п. 3, то придется торчать весь таймаут в некоторых случаяхВсё-таки Вы путаете CommandTimeout и ConnectionTimeout

закрутился... извините....
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109800
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erWinnipuh5. выполнить процедуру (она может выполняться 10 -60 сек )что ж за мешки вы ворочаете?

выборки из базы, бывает и дольше...
Для больших баз нормально.
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109825
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Arm79поднимаете N таксов и берете первый же отработавший
а в таксе соответственно попытка открыть соедиение
Я бы тоже так сделал
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109897
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79странная конструкция конечно получается

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


Если N - большое число, можно оптимизировать алгоритм случайной выборкой M (M подмножество N) строк из списка

алгоритм не странный, там все сложнее, чем я описал.

В реале: я выбираю случайный индекс из массива случайным образом, т.е. мне надо распределять нагрузку.
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38109947
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
WinnipuhВ реале: я выбираю случайный индекс из массива случайным образом, т.е. мне надо распределять нагрузку.
И как случайный индекс помогает равномерно ее распределить?
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38110030
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

вы явно что-то путаете, но что именно - пока не понял

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

Далее, непонятно, какого рода у вас процедуры. Если у вас OLTP - то процедура, отрабатывающая свыше 30 секунд и, что очень важно, за это время не выдавшая клиенту ни одной строчки резалтсета - это хардкор. Если же она возвращает миллионы записей, то таймаут совершенно не при чем, по таймауту процедура не срубится.
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38110125
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Winnipuh,

вы явно что-то путаете...skyANACommandTimeout и ConnectionTimeout
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38114256
Kasper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

Вам, как я понял, нужна простая проверка доступности сервера из выбранной строки коннекта. Её и реализуйте, а затем откроете коннекцию.
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38114306
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял, имеются N одинаковых БД (копии). и используются только на чтение?

Так может посмотреть в сторону NLB какого-нибудь? Они и "здоровье" серверов отслеживают и имеют разные алгоритмы распределения нагрузки (если у вас простой сценарий - read only и копии баз), также имеют возможность балансировки PerSession и PerRequest. Вам я так понимаю подойдет PerSession.
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38114360
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuhbeg-in-erпропущено...
что ж за мешки вы ворочаете?

выборки из базы, бывает и дольше...
Для больших баз нормально.

А как клиентское ПО, ждет и ждет все время? А когда все инстансы под завязку, ждут еще больше? Если у вас очень много пользователей и вы уверены что заоптимизировали все уже по самые не могу. Можно рассмотреть что-то такое в первом приближении:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
                            БД ответов ----------------Ответы----------------------------->Клиенты
                                  ^
                                  |
                             Ответы
                                  |
(N копий БД) <------(Служба координатор)<----задачи---(Очередь)<---задачи---Клиенты
                                 



Координатор на основе некоторых метрик следит за загрузкой серверов и не позволяет перегружать их больше чем надо, очередь сглаживает всплески активности пользователей или случаи выхода серверов из строя. На координатор можно много повесить чего. Не зная вашу специфику трудно предлагать что-то.
...
Рейтинг: 0 / 0
Проверка доступности SqlConnection
    #38114363
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо БД ответов может быть очередь из которой другая служба берет сообщения и занимается рассылкой на почту отчетов тем кто их заказал.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверка доступности SqlConnection
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]