微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 如何快速插入SQL Server 2008

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

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

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

这非常方便,但我需要一种更快的方法

谢谢。

解决方法

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

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

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

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

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

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

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

原文地址:https://www.jb51.cc/mssql/84394.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐