gpt4 book ai didi

sql-server - SQL Server 中的事务大小限制

转载 作者:行者123 更新时间:2023-12-02 06:43:43 25 4
gpt4 key购买 nike

我正在将大量数据从文本文件加载到 SQL Server 中。目前,每条记录都在单独的事务中插入(或更新),但是如果记录失败,这会使数据库处于错误状态。

我想将其全部放入一笔大交易中。就我而言,我正在查看大约 250,000 次插入或更新,也许还有大约 1,000,000 次查询。文本文件大约为 60MB。

把整个操作放到一个事务中是不是不合理?限制因素是什么?

最佳答案

这样做不仅不是不合理的,而且如果您想在任何记录失败时保持完整性,那么这是必须的,因此您会得到“全有或全无”的导入,正如您所注意到的。对于 SQL 来说,处理 250000 次插入或更新是没有问题的,但我会看看这百万次查询是什么。如果不需要它们执行数据修改,我会将它们从事务中删除,这样它们就不会减慢整个过程。

您必须考虑到,当您有一个开放事务(无论大小)时,将在它所涉及的表中进行查找,并且像您这样的冗长事务可能会导致其他尝试同时读取它们的用户阻塞。如果您预计导入量很大且耗时,并且系统将处于负载状态,请考虑在夜间(或任何非高峰时段)执行整个过程以减轻影响。

关于大小,SQL Server中没有具体的大小限制,理论上它们可以修改任意数量的数据而没有问题。实际限制实际上是目标数据库的事务日志文件的大小。当事务进行时,数据库引擎将所有临时和修改的数据存储在该文件中(因此可以在需要时使用它来回滚),因此该文件的大小将会增加。它必须在数据库属性中有足够的可用空间,并且有足够的硬盘空间供文件增长。此外,引擎将在受影响的表上放置的行锁或表锁会消耗内存,因此服务器也必须有足够的可用内存来完成所有这些管道操作。不管怎样,60MB 的大小通常太小,不用担心。 250,000 行是相当大的,但也不是那么多,所以任何大小合适的服务器都能够处理它。

关于sql-server - SQL Server 中的事务大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com