Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在不增加日志文件的情况下创建大缓存表?_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql server 如何在不增加日志文件的情况下创建大缓存表?

Sql server 如何在不增加日志文件的情况下创建大缓存表?,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我们希望创建一个大的缓存表(3000万条记录),用于优化数据库查询。 此缓存表将位于单独的磁盘上 我们使用的是简单的数据库日志记录 问题:当我们将数据插入缓存时,主表空间上的日志文件开始增加,直到插入准备就绪,然后日志文件恢复正常 问题1:有没有一种方法可以在不增加日志文件的情况下将数百万条记录插入表中 我们不需要“撤消”选项,因此事实上:您可以在任何transactionm之外的表中插入数据,即不使用回滚选项吗 另外,问题2:有没有更好的方法来创建包含缓存数据的大表?确保隐式事务已关闭。这样,

我们希望创建一个大的缓存表(3000万条记录),用于优化数据库查询。 此缓存表将位于单独的磁盘上

我们使用的是简单的数据库日志记录

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

问题1:有没有一种方法可以在不增加日志文件的情况下将数百万条记录插入表中

我们不需要“撤消”选项,因此事实上:您可以在任何transactionm之外的表中插入数据,即不使用回滚选项吗


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

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


在SQL Server 2014中,对于这类事情有一个内存中的表选项,但如果您停留在2008年,它将不起作用。

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

SQL Server有各种执行方法。这需要
简单的
恢复模型以及其他功能。执行此操作时,生成的日志量很小,因为大部分分配都被记录下来


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


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

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

  • 批量插入。谢谢,这是一个很好的输入,但它只接受文件作为输入
  • 将插件拆分为多个较小的批,我这样做了。编写了一个带有游标循环的过程,在每个循环中插入一小部分数据

不,您不能在没有事务的情况下进行插入。这是酸性原理的一部分。如果只插入一百万行,日志文件将在操作过程中增长。您可以通过成批执行插入来减少增长量。您可能还需要查看批量插入。您可能需要考虑一种无sql解决方案,因为无法关闭sql Server中的事务。同意,但如果通过多个sql语句生成临时表,这将有助于减少开销。