最近,我们发现我们性能不佳的页面之一是由于 SQL Server 实例和 SQL 客户端(即 ADO.NET)之间的 ARITHABORT 选项设置不同。
我们可以通过在 SQLConnection 打开后立即执行以下命令来解决此问题 -
SqlCommand comm = new SqlCommand("SET ARITHABORT ON", objSqlConn);
comm.ExecuteNonQuery();
互联网上有很多文章说,当查询需要很长时间才能从应用程序执行,但在 SSMS 中执行得很快,那么很可能是索引不良、参数嗅探或 ARTHABORT 选项差异的问题。就我而言,这是第三个,我也可以通过检查查询执行计划来再次确认。
虽然问题已解决,但我很想知道为什么我需要显式运行此命令以使查询性能与 SQL 服务器同步。
此外,如果这是多年来众所周知的事情,那么 Microsoft 必须考虑将 SqlConnection 的此选项默认设置为 ON。毕竟,SQL Server 和.NET 客户端是他们自己的产品。
知道如何在使用 ADO.NET 执行查询时默认设置 SET ARITHABORT ON 吗?
最佳答案
除非有人在服务器实例中进行了更改,否则默认情况下应该启用 arithabort。所以首先要做的是询问你的 dba。并且注意,这是一个连接设置,所以在打开连接时设置它是一种更有效的方法(这意味着提供您自己的打开方法)。
所有这些都涵盖了 here
关于c# - 如何让SqlConnection默认使用 "SET ARITHABORT ON"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48686646/