SQL 2000 (MSDE) зависает при получении ошибочного запроса от классического веб-приложения ASP
У меня есть страница интерфейса SQL в моем классическом веб-приложении ASP, которая позволяет пользователям с правами администратора выполнять запросы к базе данных приложения (MSDE 2000) - она просто состоит из текстовой области, которую пользователь отправляет, и приложение возвращает результирующий список записей, как показано ниже
Dim oRS
Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.ActiveConnection = sConnectionString
// run the query - this is for the admin only so doesnt check for sql safe commands etc.
oRS.Open Request.Form("txtSQL")
If Not oRS.EOF Then
// list the field names from the recordset
For i = 0 to oRS.Fields.Count - 1
Response.Write oRS.Fields(i).name & " "
Next
// show the data for each record in the recordset
While Not oRS.EOF
For i = 0 to oRS.Fields.Count - 1
Response.Write oRS.Fields(i).value & " "
Next
Response.Write "<br />"
oRS.Movenext()
Wend
End If
Проблема заключается в том, что если вы отправляете ему неверный запрос (с орфографической ошибкой, недопустимым соединением и т. Д.) Вместо немедленной выдачи ошибки, происходит зависание IIS (вы можете увидеть это, пытаясь просмотреть приложение с другого компьютера, это не удается) в течение нескольких минут, а затем возвращает ошибку. Я не имею понятия почему! Кто-нибудь может помочь?
1 ответ
Ну, работая в службе поддержки MS, у меня был похожий запрос один раз. Не говорю, что вы делаете то же самое, но мы просим подобные истории, и это может пролить некоторый свет.
Мне позвонили из внешнего центра поддержки, работавшего в Индии, который поддерживал ASP (и он оказал достаточно давления, чтобы его повысили до служб поддержки SQL Server уровня 3 - "последней линии защиты"). На веб-сайте SQL Server перестает отвечать на запросы определенного SQL-запроса. Сервер просто прекратил бы делать что-либо, фактически даже IIS больше не мог использоваться должным образом. Я получил полный случай, документированный от одного энтузиаста, которому даже удалось доказать, что с SQL Server что-то не так, потому что трассировки стека (уровень C++) показывают, что драйвер OleDB зависает при обращении к SQL Server. Впервые в жизни кто-то показал мне, что уровень трассировки стека для проверки SQL Server рухнул.
Так или иначе, некоторые исследования оказались - программист, который первоначально написал сайт и все еще был уволен клиентом, пытающимся исправить беспорядок, должен был не использовать ASP, а вместо этого обслуживать бургеры. У клиента была одна конкретная страница, на которой было много вызовов SQL Compelx, а в базе данных вообще не было индекса. По сути, это связано с "привязкой к десяткам сканирований таблицы" на очень дешевой дисковой системе. После добавления даже НЕКОТОРЫХ индексов система стала пригодной для использования - и заказчик приступил к проверке всей сложной базы данных. Сотрудник службы поддержки, очевидно, немного стыдился того, что не проверил, что на самом деле делает SQL Server (что привело бы к неловкому выполнению и немедленному остановлению ввода-вывода).
И вот история возвращается к вам;)
Вы говорите с неправильным запросом, IIS останавливается на минуты.
Можете ли вы подтвердить, что: * Это происходит в IIS? Делаете пример и проверяете IIS и Enterprise Manager? Если он и висит в Enterprise Manager - это не IIS. * Висит IIS как в приложении. Остальные IIS / другие приложения / статические страницы все еще работают? * Код происходит на странице, а не в центральном элементе / обработчике события / синхронизированном соединении, так что одно зависание доступа приводит к зависанию всего приложения? * Что делает загрузка процессора IIS и загрузка SQL Server во время этого события? * SQL Server не находится на одном компьютере? (таким образом, он перегружает компьютер и, таким образом, также попадает в IIS)?
Я не могу себе представить такое поведение без каких-либо проблем со стороны IIS.
В основном, дайте нам немного больше контекста, и мы должны его найти;) А пока наслаждайтесь моей историей.