繁体   English   中英

SQL Server 2005:间歇性缓慢插入

[英]SQL Server 2005 : intermittently slow Inserts

我有一个客户端应用程序正在向SQL Server 2005提交以下命令。在一天的特定时间,我们遇到性能问题,当规范低于300ms时,某些请求将花费2-8秒才能运行。 我们正在研究SQL Server选项以及所有可能影响服务器的外部变量。

我的问题是,请求为何/为什么要花费8秒,而在这段时间内,许多其他相同的请求在这8秒内开始和结束? 是什么可以阻止8秒通话结束,但不能阻止或减慢其他通话的速度呢?

在这段时间内运行服务器事件探查器,读取的次数大约为20,而所有(长时间和短时)调用的写入次数均少于5。

插入的表大约有2200万条记录。 我们将保留大约30天的数据。 我们可能会改变每天存档此数据的方法,并使每天的插入表保持较小且没有索引,但实际上是想了解这里发生的情况。

  • 该表上没有触发器。
  • GUID,时间和WebServerName共有3个索引(均未集群)

这是正在提交的命令:

exec sp_executesql N'Insert Into WebSvcLog_Duration (guid,time,webservername,systemidentity,useridentity,metricname,details,duration,eventtype)values(@guid,@time,@webservername,@systemidentity,@useridentity,@metricname,@details,@duration,@eventtype)',N'@guid nvarchar(36),@time datetime,@webservername nvarchar(10),@systemidentity nvarchar(10),@useridentity nvarchar(8),@metricname nvarchar(5),@details nvarchar(101),@duration float,@eventtype int',@guid=N'...',@time='...',@webservername=N'...',@systemidentity=N'...',@useridentity=N'...',@metricname=N'...',@details=N'...',@duration=0.0,@eventtype=1

堆碎片的可能原因; 您没有提到是否正在进行某种索引维护,因此我假设它不存在。 最小化碎片的最佳方法是在单调值(具有自然递增顺序的列)上建立聚簇索引。 我不确定时间列应该代表什么,但是如果是插入时间,那么它可能是聚集索引的不错选择; 如果没有,那么我将添加一列来捕获插入表中的时间,并在此基础上建立聚簇索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM