我有两台安装了SQL Server 2008的服务器
当我尝试执行大约35.000次插入的脚本时,在测试服务器上我需要30秒,而不是在生产服务器上超过2分钟! 有谁知道为什么会出现这种差异?我的意思是,DB的配置方式相同,生产服务器也有RAID配置,更好的处理器和内存......
谢谢!
答案 0 :(得分:3)
服务器上有哪些索引和填充?您可能需要在页面中使用更多空间重建索引和/或考虑您确实需要哪些索引。如果您想快速测试,请尝试ALTER INDEX ALL ON dbname.dbo.tablename REORGANIZE.
还要考虑生产服务器上的用法。在您的测试中,您(或极少数)可能是唯一一个读/写的人。在进行此插入操作时,请了解数据库中的其他操作。
如果这两个都失败了,请在生产服务器上运行一些监控,看看它是否被其他进程猛烈抨击。
答案 1 :(得分:3)
请注意,RAID 1用于冗余,速度因方案而异。 35k插入可能会导致大量的随机写入开销,从而降低性能。
如何插入这些行,它们是否包含在SQL事务中?如果还没有,那么就知道事务缓存查询并进行批量磁盘更新,大大提高了速度。
如果是通过SQL脚本文件,请将插入包装在BEGIN TRANSACTION / END TRANSACTION中。对于这么多记录importing from file is probably better。
答案 2 :(得分:2)
也许其他一些程序正在生产服务器上运行,这些程序正在消耗硬盘和处理器等资源。
同样在生产服务器上,当您在DB上执行操作并且某些查询正在执行时执行脚本的时间。
答案 3 :(得分:2)
需要考虑三个(高级别)问题:
我认为第三点可能是你的问题。意识到您放置在表中的(非聚集的)索引越多(它们越复杂),数据操作就越慢。索引(通常)是查询速度和修改速度之间的折衷。显然,这是一种概括,总是需要调整,但一般来说都是如此。
比较两种环境中的数据量;如果生产环境的数量更多(或者你的表格被高度索引),那么这很可能是你的问题。
答案 4 :(得分:0)
真的很难说。
首先 - 是的,生产可能有更多的资源,但它们是否有用?或者当你点击它时,生产已经接近其他东西的限制?毕竟,这是生产。
这就像我的第一个想法。
答案 5 :(得分:0)
如果您同时在数据库上进行选择,请确保完成“with(nolock)”
答案 6 :(得分:0)
两台服务器中现有数据的数量是多少?
INSERT的时间将根据表中已有的行数和索引数量而扩展。如果您的测试服务器表在INSERT之前包含的行数少于生产服务器,那么INSERT将在那里执行得更快。