Почему выполнение хранимой процедуры с использованием ado.net / EF 6 занимает так много времени? - PullRequest
0 голосов
/ 26 октября 2018

Окружающая среда:

  • ASP.NET MVC 5.2.3.0
  • SQL Server 2014 (v12.0.2000.8)
  • Entity Framework 6

размещено на Azure

У нас есть одна страница, которая получает данные из базы данных с помощью хранимой процедуры.

В последнее время мы заметили, что некоторое время эта страница загружается около 20 секунд. Итак, мы начали исследовать проблему. Я пытался выполнить эту хранимую процедуру прямо из Management Studio, и это заняло 150 мс + -:

enter image description here

Итак, следующее, что я сделал, - это создание консольного приложения, которое подключается к базе данных SQL Azure и выполняет эту хранимую процедуру:

enter image description here

Я также пытался использовать SqlQuery из EF 6:

enter image description here

То же самое.

Важная вещь: это не постоянная проблема. Иногда такая проблема возникает, иногда работает просто отлично - 50/50.

Я проверил загрузку базы данных на портале Azure - она ​​составляет около 50% использования dtu (во время этой проблемы с производительностью). Но я не думаю, что это связано с загрузкой базы данных, потому что она быстро выполняется из Management Studio.

В настоящее время я понятия не имею, в чем проблема, поэтому мне нужна помощь. Я хотел бы заметить, что многие сотрудники используют эту страницу (которая выполняет хранимую процедуру) все время. Может быть, это как-то связано с проблемой.

Итак, вопрос: почему так долго выполняется эта хранимая процедура с использованием ado.net / EF?

1 Ответ

0 голосов
/ 26 октября 2018

Выполнить некоторую отладку.

Потенциальные преступники включают, в основном:

  • Блокировка на стороне базы данных, которая не освобождается быстро, заставляя SP ждать.
  • Обнаружение параметров, когда путь запроса не является оптимальным для определенного набора параметров (что может привести к блокировке блокировки). Это проблема SP - кто-то не пишет правильный SQL для таких случаев.

Информация, которую вы предоставляете, не имеет значения. Смотрите ... SP не выполняются в EF6 - EF6 направляет их в ADO.NET, который отправляет их в базу данных. Как вы говорите, они работают медленно, В БАЗЕ ДАННЫХ любая отладка на уровне C # столь же бесполезна, как и меню из моей местной пиццерии для этого конкретного вопроса. Вы должны пойти вниз, отладить и проанализировать, что происходит с базой данных.

Предоставляемый вами скриншот SSMS совершенно бесполезен - вам нужно запустить SP в SSMS, на случай, если это произойдет, а затем использовать .... план запроса и правильные трассировки налайса, чтобы увидеть, что происходит.

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