c# - 执行插入更新命令时从 SQL Server 搜索数据时出现超时问题

标签 c# sql sql-server model-view-controller

我有一个用 C# 开发的 Windows 服务。此服务将数据从 XML 文件导入到 SQL Server 数据库中,导入到不同的表中。这些 XML 文件很大。一个 500 MB 大小的特定文件需要 1 个多小时才能导入到具有数百万行的表中。

我有一个用 ASP.NET MVC 开发的 Web 应用程序,上面的数据库位于该应用程序的后端。此应用程序通过从该数据库的表中过滤相关记录来显示不同的报告。此应用程序还可以处理记录。

当我在 Windows 服务导入 XML 文件期间运行应用程序与数据库交互时,我的 Web 应用程序挂起并在很长一段时间后发生超时错误。

我在 Windows 服务的存储过程中使用简单的插入更新命令,并且这些存储过程中没有事务。

请告知任何解决方案以避免此问题。

最佳答案

根据我的经验,我可以提出一些建议。

首先,在单个事务中推送 500MB 的全部数据是不可取的。

然后做必要的保存点,如果所有事务都成功,最后提交。

因为长时间持有连接对象是不可取的。如果您仍然需要,可以尝试增加 sql server 超时。但这是一个糟糕的方法。

最好是拆分 xml 内容并尝试使用保存点并最终提交所有事务。

不要认为您只是在执行简单的插入或更新命令。如果您的列上有索引,那么这么多记录将花费很长时间。

确保您有正确的索引并且只有必要的索引。

如果您有任何问题,请在此处回复。您在当前代码中使用的方法是什么?

关于c# - 执行插入更新命令时从 SQL Server 搜索数据时出现超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42784253/

相关文章:

sql - 随着时间的推移计算不同的用户

c# - ASP.NET 标识 : get all users in a role

c# - IEnumerable 作为流发出?

.net - MSDTC 异常

sql-server - 检测到不安全的密码格式。包含不安全密码格式的成员(member)提供程序是 : MySQLMembershipProvider

sql - 如何在oracle中选择不同的记录?

c# - log4net 和每个线程唯一的日志文件

c# - .net 比 java 快

sql - 为什么 REGEXP_LIKE 函数将字母 'e' 视为大写而不是小写?

sql - 这些数据库设计中哪个更好?