Понимание окончательного решения - это бизнес-решение, каковы соображения точности между NOLOCK & READPAST работает в SQL 2008 R2? Прежде чем обсуждать изменения в бизнес-сфере, я хотел бы получить лучшее понимание.SQL 2008+ NOLOCK vs READPAST Соображения для точности отчетности
Я унаследовал несколько запросов, используемых для создания представлений данных для управленческой отчетности. 'WITH (NOLOCK)' используется либерально, но непоследовательно. Чтение данных происходит с производственного сервера широко используемого приложения, которое постоянно обновляется. Мы переносимся с сервера SQL 2005 на сервер SQL 2008 R2. Эти отчеты требуют, чтобы данные были более свежими, чем 24-часовые данные на сервере архива. Использование NOLOCK предполагает прошлое решение; существует вероятность конфликта, и это может привести к потере точности. Данные используются для заполнения информационных панелей для осознания человеком/принятия решений.
Все запросы являются SELECT, с доступом для чтения только для входа в режим просмотра данных. Большинство запросов - это одна таблица с несколькими объединениями по 2 и 3 таблицы. Учитывая низкий уровень соединений WITH(), кажется лучшим выбором, чем УРОВЕНЬ УРОВНЯ ИЗОБРАЖЕНИЯ СТАВКИ {}
Табличные подсказки (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms187373.aspx (а также несколько вопросов о SO) говорят, что NOLOCK и/или READUNCOMMITTED вероятны чтобы иметь дублированные проблемы чтения, в дополнение к отсутствию заблокированных записей.
READPAST выглядит более точно, поскольку он будет пропускать только заблокированные записи без возможности дублирования. Но я не уверен, что уровень отсутствия заблокированных записей согласован между ним и NOLOCK.
Существует хорошая статья Тима Chapman сравнивая два, но это было написано в 2007 году, большинство комментариев вращаются вокруг 2000 & 2005, с одним комментарием, указывающей READPAST является проблематичным в 2008 R2
Ссылки
Effect of NOLOCK hint in SELECT statements
When should you use "with (nolock)"
Using NOLOCK and READPAST table hints in SQL Server (By Tim Chapman)
Редакция:
Изоляция снимков предлагается в двух ответах ниже. Изоляция моментальных снимков зависит от настройки БД, этот Q/A https://serverfault.com/questions/117104/how-can-i-tell-if-snapshot-isolation-is-turned-on описывает, как определить, какие настройки установлены в базе данных. Теперь я знаю, что он отключен, я читаю отчеты из основной базы данных приложений. Изменение настройки не является опцией. + - допустимая погрешность в пару процентов допустима, воздействие приложения (OLTP) неприемлемо. Большинство простых запросов не требуют блокировки, но в некоторых крайних случаях требуется блокировка. С появлением выделения Snapshot для SQL 2005 в NOLOCK & мало информации о поведении READPAST в SQL 2008 или выше. Но они остаются моим единственным выбором.
Следует рассмотреть вопрос о том, сколько времени потребуется для запуска отчета и сколько других процессов будет задерживаться в отчете, если оно блокирует таблицы. Если вы беспокоитесь о том, что данные не точны, потому что они точны из-за NOLOCK & READPAST, тогда разумно рассмотреть, какое влияние они не окажут на систему. –
Первой проблемой является не воздействие на основное приложение. Это полностью набор данных отчетов, скорость передачи данных всегда является вторичной для первичных обновлений. Отчеты приборной панели похожи на спидометр в вашем автомобиле, дайте или возьмите пару процентов точности в порядке, пока мы не влияем на производительность автомобилей. –