在SQL Server中是否建议始终启用Arithabort?
是否应该在SQL Server中始终启用ARITHABORT?
ARITHABORT是SQL Server的一个SET选项,作用是控制查询执行中遇到算术错误(如除以零、数据溢出)时的行为:启用(SET ARITHABORT ON)时会立即终止查询并返回错误;禁用时仅返回警告,查询继续执行,错误计算结果会返回NULL。
官方与生产环境的通用建议
SQL Server官方文档明确推荐,绝大多数生产环境的应用应该始终启用ARITHABORT,尤其是当你使用以下特性时:
- 索引视图
- 计算列上的索引
OPTIMIZE FOR等查询提示
这些特性要求ARITHABORT必须为ON才能正常工作,或者才能生成最优的执行计划。此外,统一的SET选项设置有助于提升执行计划缓存的复用率,避免因选项不一致导致重复生成计划浪费资源。
为什么有时启用后效果不佳?
你遇到的“效果不尽人意”通常不是ARITHABORT本身的问题,而是其他因素导致的:
- 隐藏的代码错误暴露:之前禁用ARITHABORT时,代码中的算术错误(比如未处理的除以零)被掩盖,仅返回NULL而不报错;启用后这些错误直接触发终止,导致应用报错,让你误以为是ARITHABORT的问题。
- 执行计划变化:ARITHABORT是影响执行计划生成的参数之一,切换选项后可能生成不同的执行计划。如果新计划性能下降,通常是因为统计信息过时、查询本身存在优化空间,而非ARITHABORT的问题。
实践中的处理建议
- 生产环境统一配置
SET ARITHABORT ON,保持所有数据库连接的SET选项一致。 - 若启用后出现报错,优先排查并修复代码中的算术错误,而不是禁用ARITHABORT。
- 若遇到执行计划性能问题,先更新表的统计信息,再检查查询逻辑或索引是否需要优化,必要时可使用查询提示调整计划。
内容的提问来源于stack exchange,提问作者supercrash10
相关产品推荐
相关产品推荐

