我有一个ASP.NET应用程序从CSV文件导入数据,并将其存储到(SQL Server)数据库表中。基本上,导入过程包括:
整个导入程序包含在一个事务中。
using (SqlConnection c = new SqlConnection(cSqlHelper.GetConnectionString()))
{
c.Open();
SqlTransaction trans = c.BeginTransaction();
SqlCommand cmd = new SqlCommand("DELETE FROM T_TempCsvImport", c, trans);
cmd.ExecuteNonQuery();
// Other import SQL ...
trans.Commit();
}
从虚拟机尝试此导入过程(一切都是本地的),我收到错误
[SqlException (0x80131904): Timeout. The timeout period elapsed prior to completion of the operation or the server is not responding.
在没有交易的情况下尝试相同的,工作正常。
我试过的东西:
所以,最后一个问题是:为什么SQL事务会产生这样的问题?为什么没有交易就能正常工作?
答案 0 :(得分:2)
经过几次测试后,我发现问题是......没有足够的记忆!
我发现我的情况与这个答案完全相同:
Help troubleshooting SqlException: Timeout expired on connection, in a non-load situation
我的本地计算机上有IIS和SQL服务器,测试在虚拟机上运行。这个虚拟机使用的是2Gb的RAM,占我PC总RAM的50%。将虚拟机可用的RAM减少到512Mb可以解决问题。
此外,我注意到当系统工作时,使用交易或不使用交易具有完全相同的结果,所以我的第一个猜测也是错误的。