如何在不增加LOG文件的情况下创建BIG缓存table?

How to create a BIG cache table without increasing the LOG file?

我们想创建一个大缓存 table(30 条 Mio 记录),以优化数据库查询。 此缓存 table 将位于单独的磁盘上。

我们正在使用简单的数据库日志记录。

问题:当我们将数据插入到缓存中,然后主table空间上的LOG File开始增加,直到INSERT准备好,然后日志文件恢复正常。

问题 1: 有没有办法在不增加日志文件的情况下将数百万条记录插入 table?

我们不需要 "undo" 选项,所以实际上:您可以将数据插入到任何事务之外的 table 中,即没有 ROLLBACK 选项吗?

此外,问题 2: 是否有更好的方法来使用缓存数据创建大 tables?

确保隐式事务已关闭。这样你就不会在当前交易中建立数据。

在 SQL Server 2014 中,有一个内存中的 table 选项可用于此类操作,但如果您使用的是 2008,则该选项将不起作用。

您不能省略事务日志,但您可以使用 BULK INSERT 和 BATCHSIZE 选项来减少事务日志的大小。

SQL 服务器有多种执行方式 minimally logged inserts。这需要 SIMPLE 恢复模型等。执行此操作时,生成的日志量很小,因为大部分分配都已记录。

无法关闭事务或禁用回滚支持。这些当然是合理的功能请求,但现在不可能。

您也可以尝试减小写入数据的大小,例如通过使用数据压缩或使用聚集列存储索引(压缩效果惊人)。

感谢您的意见!所以其实只有两种解法:

  • 批量插入。谢谢,这是一个很好的输入,但这只需要 FILES 作为输入。
  • 将 INSERT 分成多个较小的批次是我这样做的。写了一个带有游标循环的过程,它在每个循环中插入一小部分数据。