ben*_*ree 16 sql-server transactions
我正在从文本文件中将大量数据加载到SQL Server中.目前,每个记录都在一个单独的事务中插入(或更新),但如果记录失败,则会使DB处于错误状态.
我想把它全部放在一个大交易中.在我的情况下,我正在查看~250,000个插入或更新,可能还有~1,000,000个查询.文本文件大约是60MB.
将整个操作整合到一个交易中是不合理的吗?限制因素是什么?
Ale*_*dro 13
这样做不仅没有道理,而且如果你想在任何记录失败的情况下保持完整性,这是必须的,所以你得到一个"全有或全无"的导入.对于SQL来说,250000插入或更新将没有问题,但我会看看这些百万次查询是什么.如果他们不需要执行数据修改,我会将它们从事务中删除,因此它们不会减慢整个过程的速度.
您必须考虑当您有一个打开的事务(无论大小)时,它会触摸的表格会出现,而像您这样的冗长事务可能会导致其他尝试同时读取它们的用户阻塞.如果您希望导入大而耗时且系统负载不足,请考虑在整个晚上(或任何非高峰时段)执行整个过程以减轻影响.
关于大小,SQL Server中没有特定的大小限制,理论上它们可以毫无问题地修改任何数量的数据.实际限制实际上是目标数据库的事务日志文件的大小.事务正在进行时,数据库引擎将所有临时数据和修改后的数据存储在此文件中(因此可以根据需要使用它将其回滚),因此该文件的大小会增大.它必须在数据库属性中有足够的可用空间,并且文件有足够的高清空间来增长.此外,引擎将放在受影响的表上的行或表锁会消耗内存,因此服务器也必须有足够的可用内存用于所有这些管道.无论如何,60MB的大小通常太少而不用担心.250,000行是相当可观的,但也不是那么多,所以任何体面的服务器都能够处理它.
归档时间: |
|
查看次数: |
18420 次 |
最近记录: |