Как пул соединений с базой данных влияет на производительность? - PullRequest
3 голосов
/ 29 октября 2009

Я использую .Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C # + ADO.Net для разработки веб-приложения ASP.Net. Веб-приложение ASP.Net ориентировано на базу данных. Я хочу знать, существуют ли какие-либо справочные данные о производительности, о том, каковы различия в производительности, когда мы включаем / выключаем параметр пула потоков в настройке соединительной строки ADO.Net? Производительность Я имею в виду как одновременное соединение, которое может поддерживаться, так и время выполнения определенной команды SQL, выполняемой со стороны клиента ADO.Net?

спасибо в avdance, George

Ответы [ 4 ]

4 голосов
/ 29 октября 2009

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

ADO.NET создаст новый пул соединений для

  • каждая строка подключения; это тоже очень требовательно - если у вас есть две строки подключения, которые отличаются даже одним пробелом или чем-то еще, они считаются двумя отдельными строками подключения и приведут к созданию отдельных пулов соединений

  • для всех учетных данных Windows, если используется параметр «встроенная безопасность» (доверенное соединение)

Так что, если у вас есть строка подключения, что-то вроде

server=MyDBServer;database=MyDatabase;integrated security=SSPI;

Будет создан один пул соединений для каждого различимого пользователя - это довольно нелогично, но так оно и есть (и на него нельзя влиять / отключить).

Ознакомьтесь с документами MSDN о пуле соединений ADO.NET для получения подробной информации:

Когда соединение впервые открывается, пул соединений создается на основе алгоритм точного соответствия, который связывает бассейн с Строка соединения в соединении. Каждый пул подключений связан с отдельной строкой подключения. Когда открывается новое соединение, если строка подключения не является точной соответствует существующему пулу, новому пулу создано. Соединения объединяются в соответствии процесс, на домен приложения, на строка подключения и при интеграции используется безопасность, для Windows identity. Строки подключения также должны быть точным совпадением; ключевые слова предоставлены в другом порядке для того же соединение будет объединено отдельно.

Кроме того, если у вас есть две строки подключения:

server=MyDBServer;database=MyDatabase;user id=tom;pwd=top$secret

и

server=MyDBServer;database=MyDatabase;user id=tom; pwd=top$secret;

это считается различными строками соединения, и, таким образом, будут созданы два отдельных пула соединения.

При попытке измерить эффект от пула подключений, об этом следует знать!

Марк

4 голосов
/ 29 октября 2009

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

Наилучший способ действий для того, чтобы вы взяли его на измерьте , выполнив стресс-тесты для своего приложения с его настройкой в ​​/ без объединения в пул и посмотрите, как оно работает.

WCAT - это один из видов инструментов для снятия стресса, который можно использовать для загрузки приложения ASP.NET.

Вы также можете попробовать профилировщик (которых много) для мониторинга вашего приложения, чтобы увидеть, как оно работает под нагрузкой.

Некоторые профилировщики: ANTS , dotTrace

2 голосов
/ 29 октября 2009

Вы говорите «пул потоков», но, очевидно, говорите о пуле соединений, как показывает ваш заголовок.

Снижение производительности при создании новых подключений к базе данных. Это ресурсоемкая операция, поэтому у нас есть пул соединений ADO.NET. Фактически соединения не закрываются, а просто возвращаются в пул, где они остаются активными, и могут быть повторно использованы другими частями той же кодовой базы (внутри AppDomain).

Один пул приложений ADO.NET создается В ПЕРИ уникальной строке соединения, поэтому стоит отметить, что при использовании Integrated Security вы потеряете преимущества пула соединений, поскольку у вас будет фактически один пул соединений на пользователя, прошедшего проверку БД. 1005 *

2 голосов
/ 29 октября 2009

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

  1. Отслеживайте время, необходимое для получения данных каждый раз.
  2. Мониторинг соединений на стороне сервера с помощью команды netstat -a
  3. с / без объединения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...