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, вы можете увидеть, действительно ли это необходимо.

Ответ 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 по умолчанию (в некоторых случаях) является обратной совместимостью.