0

Я занимаюсь заменой устаревшего веб-приложения, написанного в ASP.NET 1.0. Мой план состоит в том, чтобы перестроить новый графический интерфейс с использованием MVC5 поверх существующей схемы базы данных. В рамках процесса я перенес всю базу данных с SQL Server 2000 на SQL-Server 2014 и указал тот же веб-экземпляр на новом сервере БД.Почему DataAdapter.Fill() медленнее с SQL-Server-2014, чем с SQL-Server-2000?

Хотя запросы на новом сервере выполняются намного быстрее, обновление базы данных привело к замедлению нашего веб-сайта. Я проследил медленность вызова «DataAdapter.Fill()». При подключении к SQL-серверу 2014 вызов из веб-приложения занимает около 10 секунд вместо 3 секунд со старым сервером БД (~ 3 раза медленнее). Основной sproc очень быстрый, так что это не узкое место.

Новый сервер БД находится в одной сети, поэтому латентность не должна быть проблемой. Веб-сервер может пинговать как старый, так и серверы БД менее чем за 10 мс.

Любая идея, почему обновление БД вызвало бы такое резкое замедление?

+0

Возможно ли, что ваши индексы необходимо перестроить? – Capellan

+0

Индексы не являются проблемой. Даже при «SET ARITHABORT OFF» базовый sproc достаточно быстр. Запуск «DBCC DROPCLEANBUFFERS» и «DBCC FREEPROCCACHE» немного ускорил sproc, но sproc не является узким местом. Моя нынешняя теория заключается в том, что вызов DataAdapter.Fill() медленнее из-за несоответствия между версиями SQL. Поскольку я выполняю вызов через платформу .NET 1.0, он может полагаться на API поддержки устаревания, который работает медленнее. У меня нет никаких доказательств или экспертизы ни на одном из них, хотя именно поэтому я размещаю здесь. – CowboyBebop

ответ

0

Хорошо, проблема решена. Медленность не была в загрузке DataAdapter, а в мирском вызове в БД. При вызове БД из ADO.NET он по умолчанию отключен ARITHABORT, хотя SSMS по умолчанию включен. Было сложно уловить, потому что даже когда я попытался отключить настройку ARITHABORT по умолчанию в SSMS, вызвав «SET ARITHABORT OFF», это не повлияло (не знаю, почему).

Я решил проблему, добавив «SET ARITHABORT ON» в начало sproc, который медленно запускался при вызове моего приложения. Можно включить эту функцию для всего БД, но есть некоторые risks associated with doing that.

Также я нашел this очень полезно.

Смежные вопросы