2016-03-02 2 views
1

У меня есть для каждого цикла, который вытаскивает запросы из таблицы с запросами. Затем цикл выполняет каждый запрос и записывает результаты в таблицу. Это работает как шарм. Я даже выполнил обработку ошибок, когда запрос не мог быть выполнен (если он, например, имеет синтаксические ошибки).продолжить следующую итерацию, если цикл foreach занимает слишком много времени.

Но иногда выполнение запроса будет выполняться навсегда, например запрос с перекрестным соединением без надлежащего затруднительного положения.

Теперь я хотел бы иметь возможность установить максимальную продолжительность выполнения запроса. Так что запрос будет остановлен после x минут (если он не завершится к тому времени). Затем цикл должен продолжить следующий запрос. Иными словами, итерация никогда не должна занимать больше времени, чем X минут, после чего она должна продолжить следующую итерацию.

Любые идеи, предложения?

+0

Пожалуйста, укажите ваш запрос и план выполнения в 'sqlplan' формате ... – Devart

+0

SQL выполняет запросы последовательно, что не могу сделать параллельное выполнение запросов, возможно, придется пойти на C# и выполнять запросы параллельно, Я считаю, что ssis также имеет возможность выполнять дочерние контейнеры параллельно – TheGameiswar

+0

@devart В настоящий момент существует 462 запросов. Запросы могут быть добавлены и удалены. Поэтому мне нужно спланировать запросы, которые технически звучат, но это будет работать вечно. Я не думаю, что sqlplan поможет, поскольку все эти запросы имеют только одну общую черту: SELECT. FROM, WHERE и дополнительные компоненты могут быть разными. – Henrov

ответ

1

Вы CANT установить тайм-аут для запроса на сервере.

Либо вы создаете приложение клиента, где вы можете установить timeout для SQL команды

SqlCommand command = new SqlCommand(queryString, connection); 
     // Setting command timeout to 1 second 
     command.CommandTimeout = 1; 
     try { 
      command.ExecuteNonQuery(); 
     } 

Или попробовать этот External Tool контролировать запрос и убить тех, процесс, когда время истекло. Как уже упоминалось на dba.stackexchange

+0

Карлос, похоже, что ты прав :( – Henrov

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