ARITHABORT ONに変更するリスク


12

私はベンダーとコアアプリケーションを提供する取り決めで作業しており、コアアプリケーションを変更しない限り、独自の拡張機能を構築できます。SQL Server 2005データベースに接続するColdFusionに組み込まれています。

私が作成したレポートの一部は、コアテーブルから計算された関数を使用するビューに依存しており、テーブルが大きくなるとレポートが非常に遅くなります。レポートを高速化するために、インデックス付きビューを使用します。しかし、テスト環境でインデックス付きビューを作成した後、コアアプリケーションはコアテーブルに挿入できなくなりました(インデックス付きビューを使用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、インデックス付きビューをテストしたときでなければなりませんでしたが、ベンダーアプリケーションの接続で使用される効果的な設定を確認する必要があります。Management Studioは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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.