Rischi di cambiare in ARITHABORT ON


12

Sto lavorando con un fornitore con l'accordo che forniscono l'applicazione principale e posso creare le mie estensioni purché non modifichi l'applicazione principale. È incorporato in ColdFusion che si collega a un database SQL Server 2005.

Alcuni dei report che ho creato dipendono dalle visualizzazioni utilizzando le funzioni calcolate dalle tabelle principali e i report stanno diventando molto lenti man mano che le tabelle diventano più grandi. Per accelerare i rapporti, voglio utilizzare le viste indicizzate . Ma dopo aver creato una vista indicizzata nel mio ambiente di test, l'applicazione principale non è più riuscita a inserirla nelle tabelle principali (ha restituito un messaggio di errore che ARITHABORTdeve essere ONquando si utilizzano le viste indicizzate).

Così sembra che per poter utilizzare viste indicizzate, ho bisogno di avere l'applicazione principale SET ARITHABORT ONprima di inserire / aggiornamento delle tabelle di base. Ho eseguito questo nel mio ambiente di test:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

e sembra funzionare bene. Ma il mio fornitore dice che poiché l'applicazione ha migliaia di query, potrebbe esserci il rischio che questa impostazione possa interrompere una di queste query e, se avremo qualche futuro problema imprevisto del database, insisterebbero sul ripristino dell'impostazione predefinita.

Ci sono domande effettive che verrebbero interrotte SET ARITHABORT ON? C'è qualche situazione in cui sarebbe meglio tenerlo OFF?

TL; DR Perché le mie nuove visualizzazioni indicizzate funzionino, devo impostare ARITHABORT ONl'intero database, ma il mio fornitore avverte che sarà a mio rischio e pericolo. Esiste effettivamente un rischio?

Risposte:


9

Quindi SET ARITHABORT ON sostanzialmente dice "se si verifica un errore di divisione per zero o si verifica un overflow aritmetico interrompere la query" Questo è generalmente un comportamento desiderabile ed è l'impostazione predefinita dell'istanza. Se ciò causa problemi con le domande del fornitore, direi che potrebbero aver subito alcuni problemi di codifica. Vorrei chiedere loro maggiori dettagli sul perché sono interessati qui.

Di tutte le regole delle viste indicizzate , definirei questa e molte delle regole delle opzioni impostate le meno controverse.

Questo dovrebbe essere impostato nelle connessioni che interagiscono con la vista. Quindi vorresti lavorare con il venditore e provare davvero a capire il loro ragionamento e cercare di convincerli a impegnarsi in quello che stanno pensando sul grande disaccordo qui.

Detto questo, le visualizzazioni indicizzate sono un po 'un grosso problema. Hanno altre regole e possono influire sull'applicazione e sui presupposti che gli sviluppatori del fornitore avevano durante la costruzione e il test delle prestazioni. Dovresti davvero avere una conversazione con loro sul problema aziendale che stai cercando di risolvere attraverso viste indicizzate e coinvolgerli nella conversazione su come risolvere il problema.


7

L'ovvio rischio di apportare questa modifica è che le query del fornitore eseguite in precedenza correttamente potrebbero iniziare a generare errori o restituire risultati errati. L' ARITHABORTimpostazione controlla in parte se l'overflow aritmetico e gli errori di divisione per zero restituiscono un NULLrisultato, terminano l'istruzione con un errore o terminano il batch con un errore. Il modo in cui il codice fornitore potrebbe reagire al codice che genera un errore invece di restituire NULLnon è qualcosa che vorresti sperimentare su un sistema di produzione :)

Tuttavia, il rischio è inferiore se il livello di compatibilità del database è 90 o superiore e le sessioni vengono eseguite con SET ANSI_WARNINGS ON. Questa impostazione deve essere stata ONeseguita durante il test delle viste indicizzate, ma è necessario confermare l' impostazione effettiva utilizzata dalle connessioni dell'applicazione del fornitore. Management Studio potrebbe essere configurato per utilizzare SETopzioni diverse da quelle impostate dal codice fornitore durante la connessione (e non è possibile sovrascrivere quelle con le impostazioni predefinite del database o dell'istanza). Verificare con il fornitore e confermare tracciando il codice del fornitore utilizzando SQL Server Profiler.

Probabilmente, il rischio maggiore è che il fornitore si rifiuti di supportare l'installazione fino a quando non viene ripristinata l'impostazione OFF, ma dovresti comunque cercare di incoraggiare il tuo fornitore ad aggiornare il proprio codice per lavorare con le SETopzioni consigliate , quindi non devi scegliere tra prestazioni ed esecuzione di un'installazione supportata. Un'alternativa è quella di eseguire report contro una copia del database, ovviamente.

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.