2010-03-15 212 views
6

我有,我安装了SQL Server的两个服务器2008SQL服务器插入慢

  • 制作:RAID 1的SCSI磁盘
  • 测试:IDE磁盘

当我试图执行一个脚本与大约35.000插入,在测试服务器上我需要30秒,而在生产服务器上超过2分钟! 有谁知道为什么这样的区别?我的意思是,数据库配置方式相同,生产服务器也具有RAID配置,更好的处理器和内存...

感谢!

+1

Andrew,你能回答,什么类型的字段有主键,什么类型的索引有这个字段(CLUSTERED OR NONCLUSTERED)。 – garik 2010-03-15 13:11:06

+0

主键索引在两台服务器上集群 – andrew0007 2010-03-15 13:15:16

+0

什么类型的字段(PK字段)? GUID? – garik 2010-03-15 13:15:53

回答

3

请注意,RAID 1用于冗余,速度因场景而异。 35k插入可能会导致繁重的随机写入开销,从而降低性能。

你如何插入这些行,他们是否包装在一个SQL Transaction?如果还没有,那么知道事务缓存查询和批量磁盘更新,大大提高速度。

如果是通过SQL脚本文件,则将插入包装在BEGIN TRANSACTION/END TRANSACTION中。对于这么多的记录importing from file is probably better

+0

批量插入解决了问题! – andrew0007 2010-03-15 14:52:23

2

也许某些其他程序正在耗用资源(如硬盘和处理器)的生产服务器上运行。

同样在生产服务器上执行脚本的时间同时正在对数据库执行操作,并且有些查询正在执行。

3

服务器上的索引和填充是什么?您可能需要在页面中留出更多空间来重建索引,并且/或者考虑您真正需要的索引。如果您想要快速测试,请尝试ALTER INDEX ALL ON dbname.dbo.tablename REORGANIZE.

另请考虑生产服务器上的使用情况。在你的测试中,你可能(或者很少)是唯一一个读/写的人。在做这个插入的时候,了解db中还有哪些内容。

如果两者都失败,请在生产服务器上运行一些监视,看看它是否被其他进程砰击。

+0

下拿了我的一个简单的插入从30秒至约30毫秒的差异我会怀疑。谢谢! – tsilb 2012-08-09 19:26:41

0

真的很难说。

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

这将像我的第一个想法。

+0

谢谢你的答案... 的资源可用,并且有连接在服务器上没有其他用户。而且,该指数都以同样的方式配置在其他测试服务器... – andrew0007 2010-03-15 13:09:20

+0

我还是想先看一个perfmon日志。也许你的一些子系统存在问题 - 仅仅是因为光盘速度更快并不意味着它确实是。垃圾发生。在那里,看到了。衡量所有重要特征。 – TomTom 2010-03-15 13:26:17

2

有三个(高级别)要考虑的问题:在服务器与可用资源

  1. 活动:这听起来像(从你的反应来看),这不是一个问题
  2. 你的指标配置:再次,它听起来就像如果开发环境真正在配置一样的,这不是一个问题(因为它应该是)
  3. 的数据量对你的指标如何彻底是

我认为第三点可能是你的问题。意识到你放置在桌面上的更多(非集群)索引(以及它们越复杂),数据操作将会越慢。索引(通常)是查询速度和修改速度之间的折衷。很显然,这是一种泛化,并且总是需要调整,但总的来说它是真实的。

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

+0

在测试服务器我导入生产数据库的转储,因此数据和索引都是一样的.. 也许一些相关的磁盘..我使用的是生产RAID1和我没有对RAID测试服务器.. – andrew0007 2010-03-15 13:26:12

+1

@andrew:根据您的RAID控制器上,这当然可以了问题的一部分。 RAID1(尤其是用软件实现)将相同的数据写入两个驱动器。 – 2010-03-15 14:30:14

0

如果您还同时做数据库的选择,确保它们与做“与(NOLOCK)”

0

什么是现有的数据在这两个服务器的容量?

根据已经在表中的行数和索引的数量,INSERT的时间将扩大。如果您的测试服务器表包含比生产服务器更少的pre-INSERT行,则INSERT预计将在那里更快地执行。