Ризики зміни на ARITHABORT ON


12

Я працюю з постачальником, домовляючись про те, що вони надають основну програму, і я можу створювати власні розширення до тих пір, поки я не змінюю основну програму. Він вбудований в ColdFusion, який підключається до бази даних SQL Server 2005.

Деякі зведені мною звіти залежать від представлень, використовуючи функції, обчислені з основних таблиць, і звіти стають дуже повільними, оскільки таблиці збільшуються. Щоб пришвидшити звіти, я хочу використовувати індексовані подання . Але після створення індексованого перегляду в моєму тестовому середовищі ядро ​​додаток більше не міг вставляти в основні таблиці (він повертав повідомлення про помилку, яке ARITHABORTпотрібно використовувати ONпри використанні індексованих представлень).

Отже, здається, що для використання індексованих представлень мені потрібно мати основну програму SET ARITHABORT ONщоразу, коли вставляти / оновлювати основні таблиці. Я запустив це у своєму тестовому середовищі:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

і, здається, працює добре. Але мій постачальник каже, оскільки у додатку є тисячі запитів, може виникнути ризик, що цей параметр може порушити один із цих запитів, і якщо у нас буде якась майбутня несподівана проблема з базою даних, вони наполягають на тому, щоб я відновив налаштування за замовчуванням.

Чи є фактичні запити, на які було б порушено SET ARITHABORT ON? Чи є якась ситуація, де було б краще її зберегти OFF?

TL; DR Для роботи моїх нових індексованих поглядів мені потрібно встановити ARITHABORT ONвсю базу даних, але мій постачальник попереджає, що це буде на власний ризик. Чи є насправді ризик?

Відповіді:


9

Таким чином, в SET ARITHABORT ON основному йдеться про те, що "якщо поділка на нуль помилки трапляється або арифметичне переповнення трапляється, перериває запит". Це зазвичай бажана поведінка і є широким параметром екземпляра за замовчуванням. Якщо це викликає проблеми із запитами вашого постачальника, я б сказав, що вони, можливо, страждають від деяких проблем із кодуванням для початку. Я б попросив їх отримати більш детальну інформацію про те, чому вони тут стурбовані.

З усіх правил індексованих поглядів я б назвав це, і багато з встановлених варіантів правил є найменш суперечливими.

Це повинно бути встановлено у з'єднаннях, які взаємодіють із представленням даних. Тож ви хочете попрацювати з продавцем і по-справжньому спробувати зрозуміти їхні міркування і спробувати змусити їх скористатися тим, що вони думають, про велику незгоду тут.

Це сказало - індексовані погляди - це велика справа. Вони мають інші правила, і вони можуть впливати на додаток та припущення, які мали розробники постачальника під час складання та тестування продуктивності. Вам дійсно слід поговорити з ними про бізнес-проблему, яку ви намагаєтеся вирішити за допомогою індексованих поглядів та залучити їх до розмови про те, як вирішити проблему.


7

Очевидний ризик внесення цієї зміни полягає в тому, що запити постачальників, які раніше виконувались правильно, могли почати видавати помилки або повертати неправильні результати. ARITHABORTПараметр частково контролює чи арифметичне переповнення і розподіл на нуль повертати помилки в NULLрезультат, припинити заяву з помилкою, або припинити партію з помилкою. Як код постачальника може реагувати на код, який видає помилку замість повернення NULL- це не те, що ви хотіли б експериментувати у виробничій системі :)

Однак ризик є нижчим, якщо рівень сумісності вашої бази даних становить 90 або вище та сеанси проводяться з SET ANSI_WARNINGS ON. Цей параметр, мабуть, був ONпід час тестування індексованих представлень, але вам потрібно підтвердити ефективне налаштування, яке використовується підключеннями вашого постачальника. Студія управління цілком може бути налаштована на використання різних SETпараметрів, ніж ті, які встановлені кодом постачальника при підключенні (і ви не можете змінювати такі параметри з базою даних або примірниками за замовчуванням). Зверніться до постачальника та підтвердьте, відстежуючи код постачальника за допомогою SQL Server Profiler.

Можливо, більший ризик полягає в тому, що постачальник відмовиться підтримувати вашу установку, поки налаштування не повернеться OFF, але все ж слід спробувати заохотити свого постачальника оновити його код для роботи з рекомендованими SETпараметрами, тому вам не доведеться вибирати між продуктивність та запуск підтримуваної установки. Альтернативою є, звичайно, запуск звітів проти копії бази даних.

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.