SQL Server ARITHABORT
Я работаю с клиентом, который только что обновился с SQL 2000 до SQL 2008, и их время запроса просмотров значительно выросло.
Я взглянул на взгляды и не мог видеть с ними ничего плохого. Когда я запускал представление непосредственно на сервере, время было в порядке. Когда я запускался через Management Studio удаленно, время от 2 секунд до 30 секунд.
Итак, я попробовал эксперимент над тестовой копией, установив ARITHABORT в ON (на основе некоторых статей), а также время и вниз.
Итак, установка ARITHABORT кажется ответом, но перед тем, как обратиться к живой БД, я хотел бы понять, почему. Я получаю, что это связано с уровнем серьезности нулевого деления, но почему это должно помочь с просмотром времени запроса?
Ответы
Ответ 1
Тим,
Я думаю, что в SQL Server 2000, если бы вы установили ARITHABORT OFF, оптимизатор запросов не рассматривал индексированные индексы представления при разработке плана выполнения запроса. Поэтому, если в лучшем плане используется индекс просмотра, это имеет значение. Я не знаю, все ли так, но когда вы смотрите на планы запросов, вы можете конкретно посмотреть, ссылается ли более быстрый план на индекс.
Я не знаю конкретной причины, по которой ARITHABORT имеет отношение к индексированным представлениям, но опции SET влияют на ряд вещей, и ситуация с ARITHABORT вряд ли стабильна. Вы можете проверить эту ссылку.
Также не исключено, что на уровень такого поведения влияет уровень совместимости. Если какая-либо из обновленных баз данных была установлена на уровне 80 или 90, вы можете увидеть, действительно ли это необходимо.
Ответ 2
Пожалуйста, прочитайте это сообщение
http://www.sommarskog.se/query-plan-mysteries.html
Ответ 3
Я склонен думать, что настройка ARITHABORT - это красная селедка. Отличаются ли ваши планы запросов между тестом и производственными системами? Являются ли ваши таблицы IDENTICAL в данных, которые они содержат, и ваша статистика обновлена на обоих серверах с одинаковыми индексами? Сначала я проверил бы.
Ответ 4
[Это не очень хороший ответ.] Я также просто столкнулся с этим, но еще более странно, что я не могу воспроизвести ранее плохую производительность! Даже после того, как эта опция вернется к OFF, соответствующий SQL теперь работает так же быстро, как и раньше. [Я подозреваю, что кэширование теперь устраняет любые различия, которые могут быть присвоены.]
Ответ 5
Вы всегда должны включать ArithAbort ON в сеанс входа в систему по соображениям производительности. Я просто испытываю эту проблему с несколькими процессами в базе данных 2008 R2 и обнаружил, что Microsoft обновила документацию SQL Server на 2012 год, чтобы заявить как таковой.
http://msdn.microsoft.com/en-us/library/ms190306.aspx
Ответ 6
Если ARITHABORT
OFF
, индексы в (постоянных) вычисленных столбцах не используются. Обычно Microsoft рекомендует всегда включать его ON
. Единственная причина, по которой он OFF
по умолчанию (в некоторых случаях) является обратной совместимостью.