Проблемы с производительностью хранимого процесса - слишком медленное закрытие соединения - PullRequest
0 голосов
/ 10 апреля 2009

Ранее я задавал вопрос о сохраненном процессе, который выполнялся слишком медленно на сервере sql box, однако, если я запустил sproc в Query Analyzer, он вернется через одну секунду. Клиент - это WinNET-приложение .NET 1.1.

Я смог подключить VNC в ящик пользователя, и, конечно, на нем не было установлено средств SQL, поэтому я включил Excel, перешел на VBA и написал быструю функцию для вызова sproc с точно такими же параметрами.

Оказывается, что sproc действительно возвращает субсекунду, и я могу циклически пройти по всем строкам в кратчайшие сроки. Однако закрытие соединения - это то, что занимает очень много времени, от 5 секунд до 30.

Почему закрытие соединения занимает столько времени?

Ответы [ 3 ]

1 голос
/ 10 апреля 2009

Если вы используете SqlDataReader, вы можете попробовать одну вещь: когда у вас есть все необходимые данные, вызовите Cancel в SqlCommand перед вызовом Close в SqkDataReader. Это предотвратит заполнение выходных параметров и возвращаемых значений, что может быть причиной медленного закрытия соединения. Сделайте это в блоке try catch, потому что он может выдать отмененное пользователем исключение.

1 голос
/ 10 апреля 2009

Пул соединений?

Это, или я бы проверил наличие пакетов обновлений или статей базы знаний для клиентской библиотеки.

1 голос
/ 10 апреля 2009

Симптомы, которые вы описываете, почти всегда связаны с «неправильным» планом кэшированных запросов. Хотя это большая тема (см. параметр sniffing здесь, в SO), вы часто (но не всегда) облегчаете проблему, перестраивая индексы базы данных и гарантируя, что вся статистика актуальна.

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