如何快速插入SQL Server 2008

Cha*_*gwu 27 sql-server performance

我有一个项目涉及将设备中的数据直接记录到sql表中.

在写入sql server之前,我在代码中进行的处理很少(2008年顺便说一下)

通常我使用sqlhelper类的ExecuteNonQuery方法并传入存储的proc名称和SP期望的参数列表.

这非常方便,但我需要更快的方法来做到这一点.

谢谢.

Rem*_*anu 46

使用INSERT语句或甚至存储过程的ExecuteNonQuery将使您在Express上每秒进行数千次插入.4000-5000 /秒很容易实现,我知道这是事实.

通常减慢个别更新的是日志刷新的等待时间,您需要考虑到这一点.最简单的解决方案是简单地批量提交.例如.每1000次插入或每秒提交一次.这将填满日志页面,并将分摊事务中所有插入的日志刷新等待的成本.

对于批量提交,您可能会遇到磁盘日志写入性能的瓶颈,除了更改硬件(在日志上进行raid 0条带)之外,没有什么可以做的.

如果你遇到了较早的瓶颈(不太可能),那么你可以查看批处理语句,即.发送一个包含多个插入的T-SQL批处理.但这很少有回报.

当然,您需要将写入的大小减小到最小,这意味着将表的宽度减少到最低需要的列,消除非聚簇索引,消除不需要的约束.如果可能,请使用堆而不是聚簇索引,因为堆插入明显快于聚簇索引.

几乎不需要使用快速插入接口(即SqlBulkCopy).在批量提交中使用普通的INSERTS和ExecuteNoQuery,您将耗尽驱动器顺序写入吞吐量,这比部署批量插入的速度要快得多.快速SAN连接的机器上需要批量插入,你提到Express,所以可能不是这样.有一种相反的看法,但仅仅是因为人们没有意识到批量插入给了他们批量提交,并且它的批量提交加快了思考,而不是批量插入.

与任何性能测试一样,请确保消除随机性,并预先分配数据库和日志,您不希望在测试测量期间或生产期间点击数据库或日志增长事件,这是非常业余的.


SQL*_*ace 5

批量插入将是最快的,因为它记录最少

.NET还具有SqlBulkCopy类