Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Прога открывает два соединения на SQL Server ??? Добавлено: 22.03.04 10:07  

Автор вопроса:  Oleg K

При запуске программы (VB.NET 2003) на SQL Server (2000) открывается два соединения.

Кто знает, подскажите - это так должно быть или это ошибка?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Oleg K



Вопросов: 15
Ответов: 72
 Профиль | | #1 Добавлено: 24.03.04 16:10
Разобрался я с этой ситуацией, а получается два соединения из-за автоматического создания SQLDataProvider, пула соединений. По умолчанию у него в строке подключения - poolling=true.
И вот что еще удалось узнать:
1. В SQLDataProvider, пул создается автоматически (вернее по умолчанию = True).
2. Пул очень хорош для использования, когда от имени одного компьютера и одного пользователя, много пользователей ходят на один сервер базы данных, это может быть актуально для Web-приложений, когда с одной странички сайта ломится на сервер "чумовое" количество пользователей, но для сервера баз данных скорее всего есть одна строка подключения для них всех, которая и организует пул скажем с максимумом 100 юзеров... и т.д.
3. Как работают пулы? Предположим в какой-то момент времени несколько пользователей установили соединение с базой данных и для них всех соединение было установлено в одном пуле. И если один из них "ушел", то его соединение еще некоторое время (указанный таймаут) не прерывается и это время находится в ожидании, на случай если какой-либо другой пользователь запросит соединение (по окончанию тайм аута и отсутствии нового запроса - соединение закрывается автоматически).
4. Такая ситуация должна сэкономить время на установку соединения и если с одним сайтом (Web-приложением) может работать очень большое количество пользователей и в определенный момент времени не известно их количество - организовывать пуллы соединений очень выгодно.
5. Новый пул может быть создан автоматически, в случае, если строка подключения отличается от строки уже созданного пула (даже если будет просто пробел в любом месте строки - создается новый пул). Исходя из этого виндовое приложение при работе в сети в любом случае с каждого компьютера - различная строка подключения, значит новый пул, т.е. не реально (по крайней мере в моем случае), чтобы с одного компьютера с одного приложения пыталось установить соединение несколько пользователей от имени одного пользователя. Вот и получается, что в большинстве случаев, для виндового приложения на один экземпляр приложения в сети достаточно одного соединения - выходит pooling=false предостаточно.
6. Кроме того, на сколько мне известно, для каждого пула соединений, SQL Server откушивает оперативной памяти (не уверен 2-4 Mb). Исходя из этого в виндовом приложении в некоторых случаях использование пулов - не оправданное расточительство памяти. Если учесть, что сеть может быть достаточно крупной, то математика простая...
7. Кроме того, лично я не вижу необходимости для одного экземпляра виндового приложения больше одного соединения в любой момент времени работы программы. Ну разве что, если это приложение не крутится на терминалсервере.

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 24.03.04 16:47
Спасибо за информацию :)
Насколько эффективен пул соединений для веб-приложений?

Ответить

Номер ответа: 3
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #3 Добавлено: 25.03.04 09:14

Чего-то я не понял. Ты что думаешь, что данный пол создается на SQL Server'е?

Ответить

Номер ответа: 4
Автор ответа:
 Oleg K



Вопросов: 15
Ответов: 72
 Профиль | | #4 Добавлено: 25.03.04 23:56

2Павел

Я опыта с Web-приложениями не имею, но вот тут (http://www.relib.com/forums/topic.asp?id=813930) эта тема обсуждалась и есть мнение человека. который работает с Web-ом....

Цитата:

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

2 ALEX3

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

В строке подключения поставишь ...; polling=True - при установке соединения получишь два подключения (процесса) - уберешь (поставишь False) будет одно соединение.

Я проверял все именно так и работает. Проверь сколько в настройках ODBC драйвера установлен для пула таймаут и подожди. Правда у меня стоит значение 120, а процес "закрылся" минут через 5-6. Только дернул к данным - опять новый процесс.

Ответить

Номер ответа: 5
Автор ответа:
 Oleg K



Вопросов: 15
Ответов: 72
 Профиль | | #5 Добавлено: 26.03.04 00:37

*** -

Создание пула соединений

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

Такие технологии доступа к данным, как ODBC и OLE DB, поддерживают свои разновидности пулов соединений, в той или иной мере допускающих конфигурирование. Оба подхода практически прозрачны для клиентского приложения, работающего с базой данных. Пул соединений OLE DB часто называют сеансовым (session pooling) или ресурсным (resource pooling).

Общее описание создания пулов соединений в MDAC (Microsoft Data Access Components) см. по ссылке msdn.microsoft.com/library/en-us/dnmdac/html/pooling2.asp (EN).

Провайдеры данных ADO.NET обеспечивают незаметное для пользователя создание пула соединений, точный механизм которого зависит от провайдера. В этом разделе рассматривается создание пула соединений для следующих провайдеров:

- *** -  Из статьи

Руководство по архитектуре доступа к данным на платформе .NET

Алекс Макмен (Alex Mackman), Крис Брукс (Chris Brooks), Стив Басби (Steve Busby), Эд Джезирски (Ed Jezierski)
Microsoft Corporation
Октябрь 2001 г.

********************************8

Полный вариант статьи возможно скоро появится на страницах данного сайта.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам