我有7个报告,每天晚上都会下载。
这些报告可以在csv / xml中下载。我正在下载csv格式的文件,因为它们可以节省内存。
此过程在后台运行,由hangfire管理。
下载它们后,我正在使用dapper运行存储过程,该过程使用合并语句插入/更新/更新数据。该存储过程具有七个表值参数。
我要将该记录的IsActive
列更新为false,而不是删除。
请注意,有2个报告的记录超过100万。
我仅在Azure SQL中收到超时异常。在SQL Server中,它可以正常工作。解决方法是,我将此查询的超时时间增加到1000。
此应用程序正在Azure s2中运行。
我已经考虑过发送xml的选项,但是我发现SQL Server处理xml的速度很慢。
我也不能使用SqlBulkCopy
,因为我必须根据某些条件进行更新。
还请注意,将来还会添加更多报告。
此外,当添加新报告时,会有大量插入。如果再次运行先前添加的报告,则将运行多数更新。
这些表当前没有任何索引,只有聚簇整数主键。
每行都有唯一的代码。该代码用于识别是否要插入/更新/删除
您能推荐一种提高性能的方法吗?
答案 0 :(得分:0)
您的来源是否输入了整个数据?它们是否已更新/新。我假设通过说唯一代码(插入/更新/删除),您仅考虑更改(增量)。如果不是,那是一个领域。另一个是考虑并行性。我认为那么您需要为每个表使用不同的存储过程。非依赖表可以一起处理