Наличие множества открытых соединений против повторного открытия и закрытия - PullRequest
1 голос
/ 03 ноября 2011

Я исследую некоторые проблемы с производительностью нашего продукта. У нас есть несколько потоков (порядка десятков), каждый из которых выполняет некоторую форму опроса каждые пару секунд, и каждый раз, когда мы делаем это, мы открываем соединение с БД, запрашиваем, а затем удаляем.

Так что мне интересно, будет ли эффективнее для каждого потока сохранять открытое соединение с БД, чтобы нам не приходилось проходить через накладные расходы на открытие соединения каждые 2 секунды? Или лучше придерживаться учебника using блоков?

Ответы [ 3 ]

3 голосов
/ 03 ноября 2011

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

Возникает вопрос: сколько подключений требуется в моем конфигурационном файле?
И это легко изменить и измерить.

1 голос
/ 03 ноября 2011

Как уже упоминалось, пул соединений должен позаботиться об этом, но если вы бьетесь по базе данных с помощью сообщений или чего-то подобного, чтобы проверять состояние вещей каждые несколько секунд, то вы могли бы заполнятьпул базы данных очень быстро.Если вы используете SQL Server, выполните SP_WHO2 для базы данных в окне запроса, и вы увидите много информации: количество спидов (количество открытых соединений), блокировка и т. Д.

0 голосов
/ 03 ноября 2011

Как правило, установка и разрыв соединения дорогостоящие;делать это несколько раз в десятках потоков может быть вредно;однако учтите, что используемое вами решение уже может объединять в пул соединения для вас (даже если вы об этом не знаете), поэтому в этом может не быть необходимости (см. ваши руководства и конфигурацию).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...