2009-08-19 4 views
1

мое приложение разработано на классическом asp, но также использует asp.net, когда я переношу приложение на .Net. Его использование SQL-сервера в качестве базы данных и размещение на сервере Windows 2003.SQL Server timeout

Теперь проблема в том, что приложение продолжает работать отлично в течение длительного времени, но через некоторое время SQL-сервер дает ошибку тайм-аута и может выполнять любой из выполненных запросов. Он не фиксируется, даже когда я перезапускаю свой SQL-сервер или даже IIS, в конечном счете, я должен перезапускать свой сервер каждый раз, когда только исправляет проблему.

Любая идея, что может вызвать проблемы? Просто, чтобы дать грубую идею, сайт используется примерно 300 человек в разное время.

Любая идея, что может вызвать проблемы? Просто, чтобы дать грубую идею, сайт используется примерно 300 человек в разное время. Я уверен, что закрываю соединение повсюду, мой конечный код на каждой странице закрывает соединение. Если перед конечной страницей возникает ошибка, обработчик завершения закрывает соединение. Поэтому я уверен, что закрытие соединения не является проблемой. И что нет открытого соединения, если я вижу журналы sql. Наш сервер, только один ящик, имеет SQL Server, IIS, iMail (наш почтовый сервер). После перезагрузки SQL Server это не решило проблему. Он только перезапустил Windows Server. С самого начала использование IO довольно велико. Есть ли предложения?

Спасибо,

ответ

1

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

Мой первый инстинкт - это соединения с базой данных, за исключением того, что перезапуск перезапуска сервера SQL Server должен исправить его, если это так. Далее в списке находятся дескрипторы файлов и потоки, поэтому, если вы выполняете многопоточную работу или дополнительный файл io, на который можно было бы взглянуть. Помните, что в ASP.Net оператор using (не директива) является вашим другом.

2

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

EDIT: Я видел ваши комментарии. Есть ли ожидающие рассмотрения транзакции?

0

Во-первых, вам нужно поговорить с DBA ... они могут проверить количество открытых соединений, таблицы блокировок, медленных запросов, выполнение и т.д.

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

0

Вы регулярно занимаетесь обслуживанием базы данных? Восстановление/дефрагментация индексов, пересчет статистики (если это не сделано автоматически). Проверьте размер журнала транзакций и т. Д.