#c_sharp #sql #производительность
Есть хранимая процедура в MS SQL базе. В SQL Server Managment Studio она выполняется всего за 10 секунд. Но если я запускаю эту же процедуру из C# (ASP.NET), то время выполнения почему-то увеличивается до 180 секунд! Вот такой примерно код используется для вызова этой процедуры: using (SqlConnection connection = new SqlConnection()) { connection.ConnectionString = "XXXX"; string procedure = "dbo.sp_ProcedureName"; using (SqlCommand command = new SqlCommand(procedure, connection)) { command.CommandType = CommandType.StoredProcedure; command.CommandTimeout = XXX; connection.Open(); command.ExecuteNonQuery(); } } В чем может быть причина? Почему так сильно увеличилось время выполнения и как это можно исправить или минимизировать? p.s. База на том же сервере стоит, что и код, при обращении к удаленному, длительность увеличивается секунд на 12.
Ответы
Ответ 1
По совету пользователя Alexander Petrov начал знакомиться со статьей Slow in the Application, Fast in SSMS, внес небольшое изменение в хранимую процедуру и время выполнения стало практическое такое же как во время выполнения в SQL Server Managment Studio, сократившись со 180 сек. до 13. Попробую объяснить, как я это понял, и если ошибаюсь, поправьте пожалуйста. Итак, тормозило все из-за того, что в внутри основной процедуры сначала вычислялся параметр, а потом этот параметр использовался для вызова других 5 процедур. Удалось отказаться от вычисляемого параметра в пользу константы и SQL смог оптимально построить план выполнения для вызываемых процедур. А в Managment Studio это значения вычислялось в процессе выполнения и план так же создавался "на лету", отсюда и более быстрое выполнение. Буду копать дальше, т.к. не всегда будет возможность отказаться от вычисляемого параметра.
Комментариев нет:
Отправить комментарий