Rủi ro khi đổi sang ARITHABORT ON


12

Tôi đang làm việc với một nhà cung cấp với sự sắp xếp rằng họ cung cấp ứng dụng cốt lõi và tôi có thể xây dựng các tiện ích mở rộng của riêng mình miễn là tôi không sửa đổi ứng dụng cốt lõi. Nó được tích hợp trong ColdFusion kết nối với cơ sở dữ liệu SQL Server 2005.

Một số báo cáo tôi đã tạo phụ thuộc vào chế độ xem sử dụng các hàm được tính toán từ các bảng cốt lõi và các báo cáo đang trở nên rất chậm khi các bảng trở nên lớn hơn. Để tăng tốc các báo cáo, tôi muốn sử dụng các chế độ xem được lập chỉ mục . Nhưng sau khi tạo chế độ xem được lập chỉ mục trong môi trường thử nghiệm của tôi, ứng dụng lõi không còn có thể chèn vào các bảng lõi (nó trả về một thông báo lỗi ARITHABORTbắt buộc phải có ONkhi sử dụng chế độ xem được lập chỉ mục).

Vì vậy, có vẻ như để sử dụng các khung nhìn được lập chỉ mục, tôi cần phải có ứng dụng lõi SET ARITHABORT ONbất cứ khi nào chèn / cập nhật các bảng lõi. Tôi đã chạy nó trong môi trường thử nghiệm của tôi:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

và nó có vẻ hoạt động tốt. Nhưng nhà cung cấp của tôi cho biết vì ứng dụng có hàng ngàn truy vấn, nên có thể có nguy cơ cài đặt này có thể phá vỡ một trong những truy vấn này và nếu chúng tôi gặp sự cố cơ sở dữ liệu bất ngờ trong tương lai, họ sẽ nhấn mạnh tôi khôi phục cài đặt mặc định.

Có những truy vấn thực tế sẽ bị phá vỡ bởi SET ARITHABORT ON? Có bất kỳ tình huống nào sẽ tốt hơn để giữ nó OFF?

TL; DR Để các chế độ xem được lập chỉ mục mới của tôi hoạt động, tôi cần đặt ARITHABORT ONcho toàn bộ cơ sở dữ liệu, nhưng nhà cung cấp của tôi cảnh báo rằng nó sẽ có nguy cơ của riêng tôi. Có thực sự có rủi ro?

Câu trả lời:


9

Vì vậy, SET ARITHABORT ON về cơ bản nói "nếu xảy ra lỗi chia cho 0 hoặc xảy ra tràn số học sẽ hủy bỏ truy vấn" Đây thường là hành vi mong muốn và là cài đặt rộng của thể hiện mặc định. Nếu điều này gây ra vấn đề với các truy vấn của nhà cung cấp của bạn, tôi sẽ nói rằng họ có thể đã gặp phải một số vấn đề về mã hóa. Tôi sẽ hỏi họ để biết thêm chi tiết về lý do tại sao họ quan tâm ở đây.

Trong tất cả các quy tắc của các chế độ xem được lập chỉ mục , tôi sẽ gọi điều này và nhiều quy tắc tùy chọn đã đặt là quy tắc ít gây tranh cãi nhất.

Điều này sẽ phải được đặt trong các kết nối tương tác với chế độ xem. Vì vậy, bạn sẽ muốn làm việc với nhà cung cấp và thực sự cố gắng và hiểu lý lẽ của họ và cố gắng để họ cam kết với những gì họ đang nghĩ về sự bất đồng lớn ở đây.

Điều đó nói rằng - Các quan điểm được lập chỉ mục là một vấn đề lớn. Họ có các quy tắc khác và họ có thể tác động đến ứng dụng và giả định các nhà phát triển của nhà cung cấp đã có khi xây dựng và kiểm tra hiệu suất. Bạn thực sự nên có một cuộc trò chuyện với họ về vấn đề kinh doanh mà bạn đang cố gắng giải quyết thông qua các quan điểm được lập chỉ mục và khiến họ tham gia vào cuộc trò chuyện về cách giải quyết vấn đề.


7

Rủi ro rõ ràng từ việc thực hiện thay đổi này là các truy vấn của nhà cung cấp trước đây đã chạy chính xác có thể bắt đầu ném lỗi hoặc trả về kết quả không chính xác. Các ARITHABORTthiết lập một phần kiểm soát cho dù tràn số họcchia-by-zero lỗi trả về một NULLkết quả, chấm dứt các tuyên bố với một lỗi, hoặc chấm dứt đợt với một lỗi. Làm thế nào mã nhà cung cấp có thể phản ứng với mã gây ra lỗi thay vì trả lại NULLkhông phải là điều bạn muốn thử nghiệm trên hệ thống sản xuất :)

Tuy nhiên, rủi ro thấp hơn nếu mức độ tương thích cơ sở dữ liệu của bạn là 90 hoặc cao hơn và các phiên chạy với SET ANSI_WARNINGS ON. Cài đặt này phải có ONkhi bạn đã kiểm tra các chế độ xem được lập chỉ mục, nhưng bạn cần xác nhận cài đặt hiệu quả được sử dụng bởi các kết nối của ứng dụng nhà cung cấp của bạn. Management Studio cũng có thể được cấu hình để sử dụng các SETtùy chọn khác với các tùy chọn được đặt bởi mã nhà cung cấp khi kết nối (và bạn không thể ghi đè lên các tùy chọn với cơ sở dữ liệu hoặc mặc định). Kiểm tra với nhà cung cấp và xác nhận bằng cách truy tìm mã nhà cung cấp bằng SQL Server Profiler.

Có thể cho rằng, rủi ro lớn hơn là nhà cung cấp sẽ từ chối hỗ trợ cài đặt của bạn cho đến khi cài đặt được trả về OFF, nhưng bạn vẫn nên cố gắng khuyến khích nhà cung cấp cập nhật mã của họ để làm việc với các SETtùy chọn được đề xuất , do đó bạn không phải chọn giữa hiệu suất và chạy cài đặt được hỗ trợ. Một cách khác là chạy các báo cáo chống lại một bản sao của cơ sở dữ liệu, tất nhiên.

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.