Есть хранимая процедура в 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.
По совету пользователя Alexander Petrov начал знакомиться со статьей Slow in the Application, Fast in SSMS, внес небольшое изменение в хранимую процедуру и время выполнения стало практическое такое же как во время выполнения в SQL Server Managment Studio, сократившись со 180 сек. до 13.
Попробую объяснить, как я это понял, и если ошибаюсь, поправьте пожалуйста. Итак, тормозило все из-за того, что в внутри основной процедуры сначала вычислялся параметр, а потом этот параметр использовался для вызова других 5 процедур. Удалось отказаться от вычисляемого параметра в пользу константы и SQL смог оптимально построить план выполнения для вызываемых процедур. А в Managment Studio это значения вычислялось в процессе выполнения и план так же создавался "на лету", отсюда и более быстрое выполнение. Буду копать дальше, т.к. не всегда будет возможность отказаться от вычисляемого параметра.
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
при вызове метода ApplicationQuit - зависает игра на 3-4 секунды и только потом закрывается, иногда у некоторых перезапускается
игра на Android, допустим есть некий метод, его необходимо привести в действие начиная с определенной даты, допустим сегодня 0202
Прочитал несколько источников про async/await, где писалось, что якобы никаких дополнительных потоков эти конструкции не создают
здравствуйте, пытаюсь понять что такое шина данных/шина сообщений(message bus) в распределенных системах