在写入sql server之前,我在代码中进行的处理非常少(2008年顺便说一下)
通常我使用sqlhelper类的ExecuteNonQuery方法并传入存储的proc名称和SP期望的参数列表。
这非常方便,但我需要一种更快的方法。
谢谢。
解决方法
通常减慢个别更新的是日志刷新的等待时间,您需要考虑到这一点。最简单的解决方案是简单地批量提交。例如。每1000个插入或每秒提交一次。这将填满日志页面,并将分摊事务中所有插入的日志刷新等待的成本。
使用批量提交,您可能会遇到磁盘日志写入性能的瓶颈,除了更改硬件(在日志上进行raid 0条带化)之外,没有什么可以做的。
如果你遇到了较早的瓶颈(不太可能),那么你可以查看批处理语句,即。发送一个包含多个插入的单个T-sql批处理。但这很少有回报。
当然,您需要将写入的大小减小到最小,这意味着将表的宽度减少到最低需要的列,消除非聚集索引,消除不必要的约束。如果可能,请使用Heap而不是聚簇索引,因为Heap插入明显快于聚簇索引。
几乎不需要使用快速插入接口(即sqlBulkcopy)。在批量提交中使用普通的INSERTS和ExecuteNoQuery,您将比部署批量插入的速度快得多地耗尽驱动器顺序写入吞吐量。快速SAN连接的机器上需要批量插入,你提到Express,所以可能不是这样。在那里有一种相反的看法,但仅仅是因为人们没有意识到批量插入给了批量提交,并且它的批量提交速度提高了,而不是批量插入。
与任何性能测试一样,请确保消除随机性,并预先分配数据库和日志,您不希望在测试测量期间或生产期间点击数据库或日志增长事件,这是非常业余的。
原文地址:https://www.jb51.cc/mssql/84394.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。