Risiko berubah menjadi ARITHABORT ON

12

Saya bekerja dengan vendor dengan pengaturan bahwa mereka menyediakan aplikasi inti, dan saya dapat membangun ekstensi saya sendiri selama saya tidak memodifikasi aplikasi inti. Itu dibangun di ColdFusion yang menghubungkan ke database SQL Server 2005.

Beberapa laporan yang saya buat bergantung pada tampilan menggunakan fungsi yang dihitung dari tabel inti, dan laporan menjadi sangat lambat karena tabel semakin besar. Untuk mempercepat laporan, saya ingin menggunakan tampilan yang diindeks . Tetapi setelah membuat tampilan yang diindeks di lingkungan pengujian saya, aplikasi inti tidak bisa lagi memasukkan ke dalam tabel inti (itu mengembalikan pesan kesalahan yang ARITHABORTdiperlukan ONketika menggunakan tampilan yang diindeks).

Jadi sepertinya untuk menggunakan tampilan yang diindeks, saya harus memiliki aplikasi inti SET ARITHABORT ONsetiap kali memasukkan / memperbarui tabel inti. Saya menjalankan ini di lingkungan pengujian saya:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

dan tampaknya berfungsi dengan baik. Tetapi vendor saya mengatakan karena aplikasi ini memiliki ribuan permintaan, mungkin ada risiko bahwa pengaturan ini dapat memecah salah satu dari pertanyaan ini, dan jika kita memiliki beberapa masalah basis data yang tidak terduga di masa depan, mereka akan bersikeras saya mengembalikan pengaturan default.

Apakah ada pertanyaan aktual yang akan dipecahkan SET ARITHABORT ON? Apakah ada situasi di mana akan lebih baik untuk menyimpannya OFF?

TL; DR Agar tampilan indeks baru saya berfungsi, saya perlu mengatur ARITHABORT ONseluruh database, tetapi vendor saya memperingatkan itu akan menjadi risiko saya sendiri. Apakah sebenarnya ada risiko?

Krubo
sumber

Jawaban:

9

Jadi SET ARITHABORT ON pada dasarnya mengatakan "jika kesenjangan dengan kesalahan nol terjadi atau terjadi overflow aritmatika batalkan kueri" Ini biasanya perilaku yang diinginkan dan merupakan pengaturan lebar contoh default. Jika ini menyebabkan masalah dengan pertanyaan vendor Anda, saya akan mengatakan bahwa mereka mungkin menderita beberapa masalah pengkodean. Saya akan meminta mereka untuk rincian lebih lanjut tentang mengapa mereka khawatir di sini.

Dari semua aturan pandangan yang diindeks , saya akan menyebutnya dan banyak dari opsi pengaturan yang paling tidak kontroversial.

Ini harus diatur dalam koneksi yang berinteraksi dengan tampilan. Jadi, Anda ingin bekerja dengan vendor dan benar-benar mencoba dan memahami alasan mereka dan mencoba dan membuat mereka berkomitmen untuk apa yang mereka pikirkan tentang perbedaan pendapat di sini.

Yang mengatakan - Pandangan diindeks sedikit masalah besar. Mereka memiliki aturan lain dan mereka dapat memengaruhi aplikasi dan asumsi yang dimiliki pengembang saat membangun dan menguji kinerja. Anda harus benar-benar berbicara dengan mereka tentang masalah bisnis yang Anda coba selesaikan melalui pandangan yang diindeks dan melibatkan mereka dalam percakapan tentang bagaimana menyelesaikan masalah tersebut.

Mike Walsh
sumber
7

Risiko yang jelas dari melakukan perubahan ini adalah bahwa kueri vendor yang sebelumnya berjalan dengan benar dapat mulai melempar kesalahan, atau mengembalikan hasil yang salah. The ARITHABORTPengaturan sebagian mengontrol apakah meluap aritmatika dan membagi-by-nol kesalahan mengembalikan NULLhasil, mengakhiri pernyataan dengan kesalahan, atau mengakhiri batch dengan kesalahan. Bagaimana kode vendor mungkin bereaksi terhadap kode yang melempar kesalahan alih-alih kembali NULLbukanlah sesuatu yang Anda ingin bereksperimen dengan sistem produksi :)

Namun, risikonya lebih rendah jika tingkat kompatibilitas basis data Anda 90 atau lebih tinggi, dan sesi dijalankan SET ANSI_WARNINGS ON. Pengaturan ini pasti ONketika Anda menguji tampilan yang diindeks, tetapi Anda perlu mengkonfirmasi pengaturan efektif yang digunakan oleh koneksi aplikasi vendor Anda. Management Studio mungkin dapat dikonfigurasikan untuk menggunakan SETopsi yang berbeda dari yang ditetapkan oleh kode vendor saat menghubungkan (dan Anda tidak dapat mengesampingkannya dengan database atau instance default). Periksa dengan vendor, dan konfirmasikan dengan melacak kode vendor menggunakan SQL Server Profiler.

Boleh dibilang, risiko yang lebih besar adalah bahwa vendor akan menolak untuk mendukung instalasi Anda sampai pengaturan kembali ke OFF, tetapi Anda harus tetap mencoba mendorong vendor Anda untuk memperbarui kode mereka untuk bekerja dengan SETopsi yang disarankan , sehingga Anda tidak harus memilih antara kinerja dan menjalankan instalasi yang didukung. Alternatifnya adalah dengan menjalankan laporan terhadap salinan database, tentu saja.

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
Paul White 9
sumber