c # - извлечь записи из базы данных без тайм-аута - PullRequest
1 голос
/ 04 мая 2010

У меня есть SQL-запрос с несколькими объединениями, и он извлекает данные из базы данных для обработки. Предполагается, что это будет выполняться по расписанию. Таким образом, в первый день это может быть 500, во второй день, скажем, 400.

Теперь, если служба по какой-то причине остановлена, а данные не обработаны, в день 3 может обрабатываться до 1000 записей. Это вызывает тайм-аут в запросе sql.

Как лучше всего справиться с этой ситуацией, не вызывая тайм-аут и постепенно уменьшая рабочую нагрузку для обработки?

ТИА

Ответы [ 3 ]

3 голосов
/ 04 мая 2010

создать пакетный процесс. Разрешить не более, чем сказать n записей для обработки. Допустим, n = 100 ... затем сделайте ваши запросы на выборку, чтобы выбрать только первые 100, пока не останется больше записей для обработки.

YourCommandObject.CommandTimeout = 0;

Это позволит вашей команде работать вечно.

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

3 голосов
/ 04 мая 2010

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

1 голос
/ 04 мая 2010

Одним из практических решений было бы увеличение времени ожидания команды:

var com = yourConnection.CreateCommand();
com.CommandTimeout = 0;
...

Свойство CommandTimeout - это время (в секундах) ожидания для выполнения команды. По умолчанию 30 секунд. Значение 0 указывает на отсутствие ограничения, и его следует избегать в CommandTimeout, поскольку попытка выполнить команду будет ждать бесконечно.

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