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

时间:2017-06-23 12:53:14

标签: sql-server odbc ado arithabort

我在VB6(ADO / ODBC到SQL Server)应用程序中遇到了突然的性能下降问题,我正在维护,这似乎是通过在某些SELECT查询之前添加SET ARITHABORT ON来解决的。

问题是:在应用程序的每个选择查询中创建一个通用程序来设置ARITHABORT ON是否明智?这样做有什么危险?此设置是否会导致SELECT查询返回无效数据(特别是如果它们包含聚合函数)而用户/开发人员没有注意到它?

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

1 个答案:

答案 0 :(得分:0)

这表明您目前已关闭ARITHABORT。这是一个非常糟糕的主意,微软甚至在BOL上添加了一个特定的警告:

"您应始终在登录会话中将ARITHABORT设置为ON。将ARITHABORT设置为OFF会对查询优化产生负面影响,从而导致性能问题。"

"警告SQL Server Management Studio的默认ARITHABORT设置为ON。将ARITHABORT设置为OFF的客户端应用程序可以接收不同的查询计划,从而难以对执行不佳的查询进行故障排除。也就是说,相同的查询可以在管理工作室中快速执行,但在应用程序中速度较慢。使用Management Studio进行故障排除查询时,始终与客户端ARITHABORT设置匹配。"

所以,是的,我会将ARITHABORT设置为ON,但从一开始就是如此。如果构建其余环境以期望ARITHABORT OFF,那么我会非常犹豫地改变这样一个基本的行为设置。

至于性能问题,您甚至不想使用ARITHABORT设置修复它。我会首先查看数据为什么性能下降。必须改变一些东西,如果你发现了什么,你可以用一种不那么基本的方式纠正它。