如何使 SqlConnection 默认使用“SET ARITHABORT ON”?

Nir*_*man 5 .net c# sql-server performance ado.net

最近,我们发现性能不佳的页面之一是由于 SQL Server 实例和 SQL 客户端(即 ADO.NET)之间 ARITHABORT 选项设置的差异造成的。我们可以通过在 SQLConnection 打开后立即执行以下命令来解决此问题 -

SqlCommand comm = new SqlCommand("SET ARITHABORT ON", objSqlConn);
comm.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

互联网上有很多文章说,当查询从应用程序执行需要很长时间,但在 SSMS 中执行速度很快时,那么很可能是索引不良、参数嗅探或 ARTHABORT 选项差异的问题。就我而言,这是第三个,我也可以通过检查查询执行计划来重新确认。

虽然问题已经解决,但我很好奇为什么我需要显式运行此命令以使查询性能与 SQL Server 同步。

另外,如果多年来这是众所周知的事情,那么 Microsoft 一定考虑过将此选项默认设置为 SqlConnection 的 ON。毕竟,SQL Server 和.NET 客户端都是他们自己的产品。

知道如何在使用 ADO.NET 执行查询时默认设置 SET ARITHABORT ON 吗?

SMo*_*Mor 1

默认情况下,arithabort 应处于打开状态,除非有人在服务器实例中进行了更改。因此,首先要做的就是询问您的 dba。并且请注意,这是一个连接设置,因此在打开连接时设置它是一种更有效的方法(这意味着提供您自己的打开方法)。

所有这些都在这里涵盖

  • 是的,我同意,将其设置为打开的连接是更有效的方法。我的进一步问题是,当我们尝试打开新连接时,如何将其设置为 ON,而不是单独执行它并进行单独的服务器调用(按照我在原始帖子中给出的代码)?这意味着,当我们打开一个新的 SQL 连接时,该选项默认应为 ON。 (4认同)