当前位置:  开发笔记 > 数据库 > 正文

使SQL Server更快地处理数据 - 关闭事务日志记录?

如何解决《使SQLServer更快地处理数据-关闭事务日志记录?》经验,为你挑选了3个好方法。

我使用SQL Server 2005作为数据存储,用于我分析工作的大量数据.这不是一个事务性数据库,因为我没有使用更新或捕获实时数据.我从客户端获取了一些数据,将它们加载到SQL Server中并进行一系列操作.然后我抓住这些数据并将它们拉入R,我将进行大部分分析.然后我将一些数据推送到SQL Server中的表中,也许可以进行一两次连接.

我有一段时间,SQL Server中的日志变得越来越大,我认为创建它们需要一定程度的开销.如何配置SQL Server以便它在很少或没有日志记录的情况下运行?如果事情变得腐败,我很高兴从一开始就开始.任何想法如何使这一切更快?

顺便说一句,没有必要告诉我如何缩小日志,我已经这样做了.但我希望我不必首先制作原木.我只使用数据库来存放数据,因为它太大而无法容纳R中的内存.

我应该使用比Sql Server更简单的数据库吗?随意告诉我,我正用大锤杀死一只蚂蚁.但请推荐一个更合适尺寸的锤子.:)



1> Richard..:

如何配置SQL Server以便它在很少或没有日志记录的情况下运行?一世

我不相信你能.

但是,如果为简单备份配置数据库(服务器上的每个数据库可能不同),则在备份之前,日志文件不会增长.这可以通过将恢复模式设置为"简单"来完成.

通过简单备份,日志仅用于保存事务状态,直到它们完全写入主数据库.



2> 小智..:

在处理大型数据集时避免记录的一种方法是使用SELECT/INTO.它将创建一个新表,但不会记录任何表.

这样做有一些注意事项:

计算列成为常规数据列

还需要建立索引和标识列

如果操作正确,不仅可以节省空间,还可以节省处理时间.

替代方案就像我现在正在做的那样,作为一个例子:

UPDATE [MyTable] 
SET    [Message] = REPLACE([Message], N'Content_Type', N'Content-Type')

工作正常,但更新整个表创建一个巨大的事务集,而你可以做:

DECLARE @IDs TABLE ([id] int)
DECLARE @Batch TABLE ([id] int)

INSERT INTO @IDs ([ID]) SELECT [ID] FROM [MyTable]

WHILE EXISTS (SELECT TOP 1 [ID] FROM @IDs)
BEGIN
  INSERT INTO @Batch ([ID]) SELECT TOP 1000 [Id] FROM @IDS

  UPDATE [MyTable] 
  SET    [Message] = REPLACE([Message], N'Content_Type', N'Content-Type') 
  WHERE  [Id] IN (SELECT [Id] FROM @Batch)

  DELETE @IDs WHERE [Id] IN (SELECT [Id] FROM @Batch)
  DELETE @Batch
END

这会一次更新表格1,000行,从而保持您的交易规模下降.



3> James..:

您可以通过更改数据库恢复模型简单看到这个最小化SQL服务器日志消费环节.既然您没有处理并发和事务,您是否考虑过Microsoft Access?

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有