将数据批量插入sql server数据库进行负载测试的最佳/最快方法?

时间:2014-07-23 09:22:46

标签: sql sql-server

我刚刚写了一些东西,在表格中插入10000行,以便进行负载测试。

每行中的数据相同且无趣。

我是这样做的:

DECLARE @i int = 0
WHILE @i < 10000 BEGIN
    exec blah.CreateBasicRow ;
    SET @i = @i + 1
END

所有创建基本行都是用有效的东西填充非空列。

事实证明这很慢,甚至偶尔也会挂起!我有什么选择?写一些东西生成一个长文件会更好,所有数据都用较少的插入子句重复吗?还有其他选择吗?

更新

一个约束是,它需要采用sqlcmd可以处理的形式 - 我们的数据库版本控制过程生成由sqlcmd运行的sql文件。所以我可以使用不同的形式生成包含数据的补丁文件,但我无法使用其他工具来插入数据。

1 个答案:

答案 0 :(得分:1)

您可以通过在循环周围包装事务来加快这个确切的代码。这样,SQL Server不必在每次迭代时强化日志到磁盘(可能多次,具体取决于您在该proc中发出DML语句的频率)。

那就是说,最快的方法是一次插入所有记录。像

这样的东西
insert into Target
select someComputedColumns
from Numbers n
WHERE n.ID <= 10000

对于典型情况,这应该在&lt;&lt; 1sec内执行。但它打破了使用该程序的封装。