我应该在应用程序中的所有 SELECT 查询中设置 ARITHABORT ON

Should i set ARITHABORT ON in all SELECT queries in an application

我在维护的 VB6(ADO/ODBC 到 SQL 服务器)应用程序中遇到性能突然下降的问题,这似乎可以通过在一些 [= 之前​​添加 SET ARITHABORT ON 来解决20=] 个查询。

问题是:创建一个通用过程以在应用程序的每个 select 查询中设置 ARITHABORT ON 是否明智?这样做有什么危险?此设置是否会导致 SELECT 查询 return 无效数据(特别是如果它们包含聚合函数)而不 user/developer 注意到它?

更新:请记住,此应用程序 运行 在 SQL Server 2014 服务器上启用了合并复制。

这表明您目前关闭了 ARITHABORT。这是一个非常糟糕的主意,Microsoft 甚至在 BOL:

上添加了特定警告

"You should always set ARITHABORT to ON in your logon sessions. Setting ARITHABORT to OFF can negatively impact query optimization leading to performance issues."

"Warning The default ARITHABORT setting for SQL Server Management Studio is ON. Client applications setting ARITHABORT to OFF can receive different query plans making it difficult to troubleshoot poorly performing queries. That is, the same query can execute fast in management studio but slow in the application. When troubleshooting queries with Management Studio always match the client ARITHABORT setting."

所以,是的,我会将 ARITHABORT 设置为 ON,但从一开始。如果环境的其余部分被构建为期望 ARITHABORT OFF,我会非常犹豫是否要更改这样一个基本的行为设置。

至于性能问题,您甚至不应该使用 ARITHABORT 设置来修复它。我会查看数据 为什么 性能下降首先发生。一定有什么改变了,如果你发现了什么,你可以用一种不太根本的方式来纠正它。