SQL 2000 (MSDE) зависает при получении ошибочного запроса от классического веб-приложения ASP - PullRequest
2 голосов
/ 26 марта 2010

У меня есть классическая страница 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 Ответ

2 голосов
/ 26 марта 2010

Ну, работая в службе поддержки 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.

Basicalle, дай нам немного больше контекста, и мы должны его найти;) А пока наслаждайся моей историей.

...