我有一个客户端应用程序正在向SQL Server 2005提交以下命令。在一天中的特定时间,我们遇到性能问题,其中一些请求在规范低于300毫秒时运行2-8秒。我们正在研究SQL Server选项以及可能影响服务器的所有外部变量。
我的问题是如何/为什么请求需要8秒钟,在此期间许多其他相同的请求在此8秒窗口期间开始和结束?什么可以阻止8秒的通话完成,但不能阻止或减慢其他通话?
在此期间运行服务器探查器,读取次数约为20次,所有(长期和短期)呼叫的写入次数小于5次。
正在插入的表有大约22M条记录。我们保留了大约30天的数据。我们可能会改变每天存档这些数据的方法,并保持每日插入表小,索引免费,但真的想了解这里发生了什么。
这是提交的命令:
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
答案 0 :(得分:0)
堆碎片的可能原因;你没有提到你是否正在进行某种索引维护,所以我假设它不存在。最小化碎片的最佳方法是在单调值(具有自然增加的顺序的列)上构建聚簇索引。我不确定时间列应该表示什么,但如果它是插入的时间,那么它可能是聚簇索引的一个很好的候选者;如果没有,那么我将添加一个列,该列捕获插入表中的时间并在其上构建聚簇索引。