【发布时间】:2012-07-22 18:26:21
【问题描述】:
需要生成一些测试数据。此插件为 800,000 X 1,000。我知道很多,但这是一个真正的应用程序,其中随机数将是一个计算出来的数字。
我怎样才能打破它,以免事务日志填满?
insert into sIDcrossMatch
select
docSVsys1.sID, docSVsys2.sID, Abs(Checksum(NewId())) % 100 As RandomInteger
from docSVsys as docSVsys1
join docSVsys as docSVsys2
on docSVsys1.sID <> docSVsys2.sID
where docSVsys1.sID < 1000
order by docSVsys1.sID, docSVsys2.sID
它将插入一个docSVsys1.sID而不填满事务日志。
【问题讨论】:
-
您意识到您需要提供 12,8TB 的存储空间,每行 20 字节?我认为即使没有 tlog 问题,您的方法也永远行不通。
-
@marc_s,您说得很对,但是一个太大的事务(“大于”最大可能的日志/磁盘大小)不适合任何事务日志管理策略。 Guess Blam 询问如何克服这种情况。
-
您还存储对 (a, b) 和 (b, a)。如果您不想这样做,请添加 where 条件
docSVsys1.sID < docSVsys2.sID。 -
@usr,我没有做数学,测试数据的空间太大了 :) 如果 SQL 2005 或更高版本,他可以尝试为特定测试表打开数据压缩。跨度>
-
@marc_s 是的,你可以通过拆分它。检查点上的简单日志记录截断日志。我说过一个 docSVsys1.sID 将插入。
标签: sql-server tsql transaction-log