Пул соединений ADO.NET и SQLServer

  • Что это?
  • Как реализовать пул соединений с MS SQL?
  • Каковы последствия производительности, когда
    • Выполнять много запросов один за другим (то есть, используя цикл с 30K+ итерациями, вызывающими хранимую процедуру)?
    • Выполнение нескольких запросов, которые занимают много времени (более 10 минут)?
  • Есть ли лучшие практики?

4 ответа

Решение

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

Если вы используете строку подключения MSSQL и System.Data.SqlClient, то вы уже используете ее - в.Net это все время скрыто.

Цикл из 30 000 итераций может быть лучше в качестве курсора на стороне сервера (ищите операторы курсора T-SQL), в зависимости от того, что вы делаете с каждым шагом за пределами sproc.

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

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

Вы можете использовать приложение Performance Monitor с XP/Vista для наблюдения за соединениями SQL, и вы очень быстро увидите, используется ли пул или нет. Посмотрите на категорию ".NET CLR Data" в системном мониторе.

Я второй Кит; если вы вызываете хранимую процедуру 30000 раз, у вас гораздо большие проблемы, чем пул соединений.

На ваш вопрос также частично ответила эта тема. Поиск показал бы это.. Определение пула подключений, на которое Google ответил бы первым попаданием, это

Что оставило бы только лучшие практики, что, я думаю, было бы хорошим вопросом:)

+1 к ответу Кита. Он ударил гвоздь прямо в голову.

Просто вежливое напоминание из FAQ:

Вы искали в Интернете, прежде чем задать свой вопрос, и вы пришли к нам, вооруженные исследованиями и информацией о вашем вопросе... верно?

Другие вопросы по тегам