Тайм-аут при вызове хранимой процедуры в SQL Server 2008 - PullRequest
6 голосов
/ 27 октября 2010

Из C # с EF я вызываю длинную хранимую процедуру с ExecuteStoreCommand

30 секунд после начала процедуры, у меня есть исключение тайм-аута.

Как настроить время ожидания? На сервере или в моем клиенте C #?

Спасибо

Ответы [ 5 ]

16 голосов
/ 27 октября 2010

Вы могли бы установить CommandTimeout для базового соединения, но гораздо, гораздо, гораздо лучшая идея состояла бы в том, чтобы потратить время и усилия на диагностику, почему время ожидания происходит в первую очередь.

Даже если вы «решите» проблему, подняв значение CommandTimeout, вы можете вызвать другие проблемы с блокировкой в ​​вашей базе данных.Ищите блокирующие запросы или плохие планы запросов, или плохо разработанные таблицы и индексы.

4 голосов
/ 27 июня 2011
        using (var context = new MyDbEntities())
        {
            context.CommandTimeout = 600;
            context.MyLongRunningStoredProc();
        }
3 голосов
/ 27 октября 2010
using (var conn = new SqlConnection(ConnectionStrings.toMyDB))
{
    conn.Open();
    using (var cmd = new SqlCommand("myProc", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandTimeout = 30; // Increase this to allow the proc longer to run
        cmd.Parameters.AddWithValue("@Param", myParam);
        cmd.ExecuteNonQuery();
    }
}
1 голос
/ 27 октября 2010

Все, что вы делаете, кроме исправления SQL в хранимой процедуре, просто маскирует реальную проблему (SQL).

Вам нужно задать вопрос об ускорении вашей процедуры, где вы публикуете свои таблицы и код хранимой процедуры, чтобы его можно было исправить раз и навсегда.

0 голосов
/ 12 сентября 2015

Использование индексов решило мою проблему, я обнаружил, что выполнение хранимой процедуры с помощью ExecuteStoreCommand происходит не так же, как в SQL.

Вы можете использовать SQL Management Studio, чтобы найти нужный вам индекс, выбрать код sql для хранимой процедуры, щелкнуть правой кнопкой мыши и «Показать примерный план выполнения» взять предложенный индекс.Это должно оптимизировать вашу хранимую процедуру.

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