|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
| Столкнулся с проблемой. Приложение ASP.NET 1.1 медленно работает с БД SQL 2000. Проверка на скорую руку показала, что при достаточно небольшой нагрузке (1-3 хита в сек.) в пуле скапливается штук 30 соединений и все жутко начинает тормозить, на генерацию страницы в частности идет 5-10, а то и более сек. Попытки поэкспериментировать со строкой соединения, например, Max Pool Size, Connect Timeout ничего хорошего не дали - кол-во соединений в пуле (SP_WHO) они помогали снизить, но время выполнения страниц все равно оставалось на уровне 5-10 сек. Выключение пула Pooling=false; дало снижение времени на генерацию страницы практически до 1 сек. В чем все-таки может быть проблема при использовании пула? Дело в том, что приложение (построенное кстати на основе iBuySpy) для генерации страницы использует массу запросов к БД, соединение открывается с каждым запросом, используется в основной массе DataReader, который часто "закрывается" только при помощи CommandBehavior.CloseConnection, что и порождало массу ожидающих соединений в пуле в начале, когда проблема с производительностью была обнаружена. Но получается что частое открытие соединений с БД без использования пула быстрее до 10 раз, чем использование... ???
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Если есть возможность попробуй перекомпилировать сайт под .NET 2.0. Вроде в ADO.NET 1.x есть ошибка которая приводит к такому "зависанию" соединений в пуле. В .NET 2.0 такой проблемы вроде уже нет. Ну и по мере возможности стоит переделать код работы с БД так чтобы вся работа с SqlDataReader обязательно происходила внутри using блока.
|
|
|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
| возможности перекомпиляции на сегодня нет, приложение сделано на VB.NET. про "зависание" соединений в пуле я знаю, даже пробовал заменить все DataReader на DataSet с тем, чтобы иметь возможность сразу же закрыть соединение с БД и иметь возможность вернуть после этого данные в пользовательские контролы, но это помогло только уменьшить число соединений в пуле, но на производительность почти никак не сказалось, такчто сегодня вернул все взад и с просто выключенным пулом имеем гораздо лучший результат (что странно с моей точки зрения)
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Странно не то слово. У меня впечатление что это просто баг в ADO.NET 1.x.
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 10.11.2008 0:08
Сообщ.: 1 298,
Visits: 12 501
|
|
| Сервер случайно не в Debug режиме бежит?
|
|
|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
| а при чем тут баг или не баг? приложение работает, другое дело иногда медленно. ошибки таймаута или конца пула нет. куча соединений в пуле это лишь как одно из следствий включенного пула, и то, что их много еще не значит что это и есть причина. мониторинг perf. counter'ов для БД и сервера ничего особенного не выявил
|
|
|
|