我在两台不同的计算机上有一个SQL Server 2016数据库,一个生产环境和开发环境,两个副本相互生成,生产数据库有几个月的额外数据(1或2%以上)。
我的问题是我有一个存储过程,当我调用它时,DbDataAdapter.Fill(command)
方法在连接字符串指向生产数据库服务器时超时,并在连接到开发数据库服务器时立即运行。 / p>
其他一切都是相同的,存储过程和参数。
当我使用SQL Server Management Studio直接针对数据库运行存储过程时,它会在生产计算机和开发计算机上以不到1秒的时间运行。
我还可以调查什么?我迷路了
代码:
SqlCommand cmdDev = new SqlCommand();
cmdDev.Connection = new SqlConnection("Data Source=xxx.xx.x.53;Initial Catalog=Dev;Persist Security Info=True;User ID=userid;Password=password");
cmdDev.CommandText = "spName";
cmdDev.Parameters.Add(new SqlParameter("@OwnedByCompanyID", "100"));
cmdDev.Parameters.AddWithValue("@ClientCompanyID", "0");
cmdDev.Parameters.AddWithValue("@UserID", "0");
cmdDev.Parameters.AddWithValue("@UserID2", "0");
cmdDev.Parameters.AddWithValue("@BranchID", "0");
cmdDev.Parameters.AddWithValue("@Search", "");
cmdDev.Parameters.AddWithValue("@Archived", "0");
cmdDev.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataAdapter adapterDev = new SqlDataAdapter(cmdDev);
DataTable dtDev = new DataTable();
adapterDev.Fill(dtDev); //runs instananeously, and also instantaneously when executed in SSMS
SqlCommand cmdProd = new SqlCommand();
cmdProd.Connection = new SqlConnection("Data Source=xxx.xx.x.55;Initial Catalog=Prod;Persist Security Info=True;User ID=userid;Password=password");
cmdProd.CommandText = "spName";
cmdProd.Parameters.AddWithValue("@OwnedByCompanyID", "100");
cmdProd.Parameters.AddWithValue("@ClientCompanyID", "0");
cmdProd.Parameters.AddWithValue("@UserID", "0");
cmdProd.Parameters.AddWithValue("@UserID2", "0");
cmdProd.Parameters.AddWithValue("@BranchID", "0");
cmdProd.Parameters.AddWithValue("@Search", "");
cmdProd.Parameters.AddWithValue("@Archived", "0");
cmdProd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataAdapter adapterProd = new SqlDataAdapter(cmdProd);
DataTable dtProd = new DataTable();
adapterProd.Fill(dtProd); //runs for 30+ seconds then times out, but instantaneously when ran in SSMS
答案 0 :(得分:0)