簡體   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