Risiken beim Wechsel zu ARITHABORT ON

12

Ich arbeite mit einem Anbieter zusammen, der dafür sorgt, dass er die Kernanwendung bereitstellt, und ich kann meine eigenen Erweiterungen erstellen, solange ich die Kernanwendung nicht ändere. Es ist in ColdFusion integriert und stellt eine Verbindung zu einer SQL Server 2005-Datenbank her.

Einige der Berichte, die ich erstellt habe, hängen von Ansichten ab, die Funktionen verwenden, die aus den Kerntabellen berechnet wurden, und die Berichte werden sehr langsam, wenn die Tabellen größer werden. Um die Berichte zu beschleunigen, möchte ich indizierte Ansichten verwenden . Nach dem Erstellen einer indizierten Ansicht in meiner Testumgebung konnte die Kernanwendung jedoch nicht mehr in die Kerntabellen eingefügt werden (es wurde eine ARITHABORTerforderliche Fehlermeldung zurückgegeben)ON wenn indizierte Ansichten verwendet werden).

Um indizierte Sichten verwenden zu können, muss die Kernanwendung beim SET ARITHABORT ONEinfügen / Aktualisieren der Kerntabellen vorhanden sein. Ich habe dies in meiner Testumgebung ausgeführt:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

und es scheint gut zu funktionieren. Da die Anwendung jedoch Tausende von Abfragen enthält, besteht das Risiko, dass durch diese Einstellung eine dieser Abfragen beschädigt wird. Wenn es in Zukunft zu unerwarteten Datenbankproblemen kommt, besteht die Gefahr, dass ich die Standardeinstellung wieder herstelle.

Gibt es tatsächliche Abfragen, die durch gebrochen werden würden SET ARITHABORT ON? Gibt es eine Situation, in der es besser wäre, sie zu behalten OFF?

TL; DR Damit meine neuen indizierten Ansichten funktionieren, muss ich ARITHABORT ONfür die gesamte Datenbank festlegen , aber mein Anbieter warnt, dass dies auf eigenes Risiko erfolgt. Besteht tatsächlich ein Risiko?

Krubo
quelle

Antworten:

9

Also SET ARITHABORT ON sagt im Grunde "Wenn ein Fehler bei der Division durch Null auftritt oder ein arithmetischer Überlauf auftritt, brechen Sie die Abfrage ab." Dies ist normalerweise ein wünschenswertes Verhalten und die instanzweite Standardeinstellung. Wenn dies Probleme mit den Abfragen Ihres Anbieters verursacht, würde ich sagen, dass diese möglicherweise anfangs unter einigen Codierungsproblemen gelitten haben. Ich würde sie um mehr Details bitten, warum sie hier besorgt sind.

Von allen Regeln für indizierte Ansichten würde ich diese und viele der festgelegten Optionsregeln als die am wenigsten umstrittenen bezeichnen.

Dies müsste in den Verbindungen festgelegt werden, die mit der Ansicht interagieren. Sie möchten also mit dem Verkäufer zusammenarbeiten und wirklich versuchen, seine Argumente zu verstehen und ihn dazu zu bringen, sich auf das einzulassen, was er über die große Meinungsverschiedenheit hier denkt.

Das heißt - indizierte Views sind eine große Sache. Sie haben andere Regeln und können sich auf die Anwendung und die Annahmen auswirken, die die Entwickler des Anbieters beim Erstellen und Testen der Leistung hatten. Sie sollten sich wirklich mit ihnen über das Geschäftsproblem unterhalten, das Sie mithilfe indizierter Ansichten lösen möchten, und sie in das Gespräch über die Behebung des Problems einbeziehen.

Mike Walsh
quelle
7

Das offensichtliche Risiko bei dieser Änderung besteht darin, dass Herstellerabfragen, die zuvor ordnungsgemäß ausgeführt wurden, Fehler auslösen oder falsche Ergebnisse zurückgeben können. Die ARITHABORTEinstellung steuert teilweise, ob ein arithmetischer Überlauf und Fehler beim Teilen durch Null ein NULLErgebnis zurückgeben, die Anweisung mit einem Fehler beenden oder den Stapel mit einem Fehler beenden. Wie der Herstellercode auf Code reagieren könnte, der einen Fehler auslöst, anstatt zurückzukehren, NULList nichts, mit dem Sie auf einem Produktionssystem experimentieren möchten :)

Das Risiko ist jedoch geringer, wenn die Datenbankkompatibilität mindestens 90 beträgt und Sitzungen mit ausgeführt werden SET ANSI_WARNINGS ON. Diese Einstellung muss ONbeim Testen der indizierten Ansichten vorgenommen worden sein, Sie müssen jedoch die von den Verbindungen Ihrer Herstelleranwendung verwendete wirksame Einstellung bestätigen . Management Studio ist möglicherweise so konfiguriert, dass SETbeim Herstellen der Verbindung andere Optionen verwendet werden als im Herstellercode angegeben (und Sie können diese nicht mit den Datenbank- oder Instanzstandards überschreiben ). Wenden Sie sich an den Hersteller, und überprüfen Sie dies, indem Sie den Herstellercode mit SQL Server Profiler nachverfolgen.

Das größere Risiko besteht wahrscheinlich darin, dass der Anbieter sich weigert, Ihre Installation zu unterstützen, bis die Einstellung wiederhergestellt ist. OFFSie sollten jedoch weiterhin versuchen, Ihren Anbieter zu ermutigen, seinen Code zu aktualisieren, um mit den empfohlenen SETOptionen zu arbeiten, sodass Sie nicht zwischen wählen müssen Leistung und Ausführen einer unterstützten Installation. Eine Alternative besteht natürlich darin, Berichte für eine Kopie der Datenbank auszuführen.

-- 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
quelle