我将大量的数据从文本文件加载到sql Server中.目前,每个记录都被插入(或更新)在一个单独的事务中,但如果记录失败,则会使数据库处于不良状态.
我想把它全部放在一个大交易中.在我的情况下,我正在看约250,000个插入或更新,也许约1,000,000个查询.文本文件大约为60MB.
把整个操作整合成一个交易是不合理的?有什么限制因素?
解决方法
这样做并不是不合理的,但是如果您想要保存完整性,以防任何记录失败,这是必须的,因此您可以获得“全部或全部”导入. 250000插入或更新对于sql来说是没有问题的,但我会看看这些百万个查询是什么.如果不需要执行数据修改,我将把它们从事务处理中删除,所以它们不会减慢整个过程.
你必须考虑到,当你有一个开放的事务(不管大小),看起来会发生在它触及的表,像你这样的冗长的事务可能会导致阻止在其他用户尝试同时读取它们.如果您期望进口量大而耗时,系统将处于负载状态,请考虑在整个过程中(或任何非高峰时段)进行整个过程以减轻影响.
关于大小,sql Server中没有特定的大小限制,它们理论上可以修改任何数量的数据而没有问题.实际的限制是目标数据库的事务日志文件的大小.当事务进行时,DB引擎会将所有临时和修改的数据存储在此文件中(因此,如果需要,可以使用该数据来回滚),因此该文件的大小将增加.它必须在DB属性中具有足够的可用空间,并且足够的HD空间用于文件增长.此外,引擎将放在受影响的表上的行或表锁会消耗内存,因此服务器必须为所有这些管道提供足够的可用内存.无论如何,60MB的大小通常太少,一般不用担心. 25万行是相当可观的,但也不算太多,所以任何体面的服务器都能够处理它.