sql-server – 在负载下插入性能增加:为什么?
我有一段代码执行高度非规范化表的插入.这些表的列数为~100到300.这是在 Windows Server 2008上运行的SQL Server 2008 R2. 每个插入包括在同一事务下插入多个表.有些插入是由NHibernate批处理的,但有些不可能,但它们都在同一个事务中. 当我通过重复调用执行插入的代码执行500次插入时,平均得到~360 ms. 奇怪的是,当我使用4个进程同时运行测试代码时(在Windows Server 2008下从4个不同的命令提示运行相同的exe),每个调用的插入性能变得更好.我看到突发的速度可以达到90毫秒(几乎快了X4).我正在从代码中测量插入时间. 由于4个进程对彼此一无所知,我假设这与SQL Server有关,但我完全不知道为什么.我想知道为什么会发生这种情况,如果有任何配置可以让我在插入不频繁时获得相同的性能. 有关SQL Server监视方法的建议,以了解在数据库级别上发生了什么,同样受欢迎. 解决方法一个可能的原因是四个并发进程生成更有利的日志刷新模式 – 通常意味着每个日志刷新写入的数据多于单个执行进程的情况.要确定事务日志吞吐量/刷新大小是否是一个因素,请监视: > sys.dm_os_wait_stats用于WRITELOG和LOGBUFFER等待 > Log Bytes Flushed / sec 寻找达到的内部限制.在SQL Server 2008 R2中,64位版本上每个数据库最多可以有32个未完成(异步)日志刷新I / O(32位只有8个).未完成的IO数量限制为3840KB. 更多信息和进一步阅读: > Transaction Log Monitoring (编辑:鹰潭站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |