SQL Server插入速度慢

时间:2010-03-15 12:57:06

标签: sql sql-server insert performance

我有两台安装了SQL Server 2008的服务器

  • 生产:SCSI磁盘上的RAID 1
  • 测试:IDE磁盘

当我尝试执行大约35.000次插入的脚本时,在测试服务器上我需要30秒,而不是在生产服务器上超过2分钟! 有谁知道为什么会出现这种差异?我的意思是,DB的配置方式相同,生产服务器也有RAID配置,更好的处理器和内存......

谢谢!

7 个答案:

答案 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)

需要考虑三个(高级别)问题:

  1. 服务器上的活动与可用资源:听起来(根据您的回答判断)这不是问题
  2. 索引的配置:再次,如果开发环境 配置相同(听起来应该如此),这听起来不是问题
  3. 数据量与索引的完整程度
  4. 我认为第三点可能是你的问题。意识到您放置在表中的(非聚集的)索引越多(它们越复杂),数据操作就越慢。索引(通常)是查询速度和修改速度之间的折衷。显然,这是一种概括,总是需要调整,但一般来说都是如此。

    比较两种环境中的数据量;如果生产环境的数量更多(或者你的表格被高度索引),那么这很可能是你的问题。

答案 4 :(得分:0)

真的很难说。

首先 - 是的,生产可能有更多的资源,但它们是否有用?或者当你点击它时,生产已经接近其他东西的限制?毕竟,这是生产。

这就像我的第一个想法。

答案 5 :(得分:0)

如果您同时在数据库上进行选择,请确保完成“with(nolock)”

答案 6 :(得分:0)

两台服务器中现有数据的数量是多少?

INSERT的时间将根据表中已有的行数和索引数量而扩展。如果您的测试服务器表在INSERT之前包含的行数少于生产服务器,那么INSERT将在那里执行得更快。