2013-05-15 2 views
0

Учитывая высокую активность удаленной базы данных в постоянном использовании; Будет ли 2 или, возможно, более одновременное выполнение запросов, возвращающихся в 30m записей, но используя WITH (NOLOCK) в запросе сделать систему непригодной для использования?несколько запросов, запущенных одновременно с WITH (NOLOCK)

Активность: Около 200 пользователей с различными запросами в диапазоне от 1 записи до максимума, как указано выше.

Constant: 18/7

непригодно: 5-15 минут задержки. Внешние приложения или пользователи не могут получить доступ к БД для запроса.

+3

Определить «непригодным для использования». Определите «очень активный». Определите «постоянное использование». – Oded

+0

Как насчет :) – mechanicum

ответ

1

Вам необходимо исследовать время простоя «непригодным для использования» в качестве подходящего. Угадать не получится. Есть много ситуаций, которые могут сделать сервер 'недоступность', как:

  • рост базы данных
  • рост журнала
  • дамп память
  • планировщиком исчерпание
  • многих других

Других раз сервер может быть просто «медленным» и казаться невосприимчивым. 200 запросов, сканирующих nilly-willy 30 миллионов строк таблицы, могут привести к scheduler exhaustion. Вам нужно будет правильно исследовать. Waits and Queues - хорошая методология для использования (например, это правильно идентифицирует усталость планировщика, упомянутое выше).

Что касается NOLOCK: никогда не будет веской причины использовать NOLOCK. Ваши пользователи see incorrect data right now. Вместо этого используйте вместо этого row versioning.

1

Если вы имеете в виду

сделать систему менее непригодным для других пользователей при выборе 30m записи

нет, WITH(NOLOCK) не имеет никакого эффекта.

Обратите внимание, что выбор 30 м записей сам по себе, вероятно, будет очень чувствительной к операции ввода-вывода, поэтому я бы не стал волей-неволей выбирать столько записей, но WITH(NOLOCK) для всех целей и задач влияет только на производительность тот, кто делает выбор.

+0

Мне было просто интересно, если другие пользователи и приложения, которые используют одну и ту же базу данных, заметят, что запрашиваются 30-миллиметровые записи. Например, если db замедлит так, что приложения получат тайм-ауты, а люди будут реагировать медленнее? Для завершения запроса требуется заметное время (около 10 минут). – mechanicum

+1

Это очень зависит от того, какая аппаратная конфигурация * (читать деньги) * вы готовы бросить на нее, и вам обязательно нужно провести стресс-тестирование, но моя первая реакция будет: да, это будет примечательно. –

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