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

时间:2015-04-16 15:13:19

标签: sql-server sql-server-2008-r2

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

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

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

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

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

另外,问题2:有没有更好的方法来创建包含缓存数据的大表?

4 个答案:

答案 0 :(得分:1)

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

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

您还可以尝试减小所写数据的大小,例如使用数据压缩或使用聚簇列存储索引(可能具有惊人的压缩)。

答案 1 :(得分:0)

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

在SQL Server 2014中,有一种内存表选项可用于此类事情,但如果您在2008年停滞不前,这将无效。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

感谢您的投入!事实上,只有两种解决方案:

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