pex*_*xxy 4 sql-server profiler sql-server-2008-r2
我有一个存储过程,它每 2.5 秒被一个程序 24-7 调用一次。此过程通常在 10 毫秒内运行。一天几次(3 -5 次)运行大约需要 42953 毫秒(总是在 42950 和 42959 毫秒之间)。
我如何找到或描述为什么需要这么长时间的原因?
更新: Sql 服务器版本 2008 R2
程序:
select
[view_EventsToRaise].EventId,
[view_EventsToRaise].EventStatus,
[view_EventsToRaise].Tag,
[view_EventsToRaise].SessieGebruikerId,
Postbus.Persoon_Id_afz as PersoonIdAfz,
Postbus.Persoon_Id_adr as PersoonIdAdr,
Postbus.Persoon_Id_derde as PersoonIdDerde,
Postbus.Locatie_Id as LocatieId,
Postbus.Artikel_Id as ArtikelId,
Postbus.Onderwerp_Id as OnderwerpId,
Postbus.Bedrijf_Id_afz as BedrijfIdAfz,
Postbus.Bedrijf_Id_adr as BedrijfIdAdr,
Postbus.Bedrijf_Id_derde as BedrijfIdDerde,
Postbus.Document_Id as DocumentId,
Postbus.Document as Document,
DataKenmerk.Code as PostbusDataCode,
PostbusData.Inhoud as PostbusDataInhoud,
SimObj.Id as SimObjId,
Eventsoort.Code as Eventsoort
from
[view_EventsToRaise]
left outer join Postbus
left outer join PostbusData
inner join DataKenmerk
on PostbusData.DataKenmerk_id = DataKenmerk.id
on PostbusData.Postbus_Id = Postbus.id
on Postbus.Id = [view_EventsToRaise].PostbusId
left outer join SimObjEvent
inner join eventsoort
on eventsoort.id = SimObjEvent.eventsoort_id
on [view_EventsToRaise].SimObjEventId = SimObjEvent.Id
left outer join SimObj
on SimObj.Id = SimObjEvent.SimObj_Id
order by
[view_EventsToRaise].Tijd,
[view_EventsToRaise].EventId
Run Code Online (Sandbox Code Playgroud)
2014 年 9 月 29 日更新: 当上述情况发生时,查看分析器,以下引起了我的注意:注册 RPC:Completed 事件时,starttime 是日志时刻的当前系统时间,但 endtime是未来的值(当前系统时间加上持续时间,未来大约 43 秒)。
endtime 列的值是如何确定的?这是预测吗?
这可能是由阻塞进程引起的。每天 3-5 次,这被一些更新或其他需要大约 40 秒的写入阻止。您的 SELECT 会阻塞,直到它可以继续。如果情况确实如此,则可以使用Blocked Process Report Event来识别问题。您必须启用此事件并将阈值设置为 ~35 秒。请参阅阻止进程阈值服务器配置选项。显然,该事件也可能因其他查询而触发,但有争议的这些问题也需要解决。
阻塞的一个简单解决方法是使用行版本隔离级别。阅读了解基于行版本控制的隔离级别。
否则,您需要将此作为性能问题进行调查。阅读如何分析 SQL Server 性能。
归档时间: |
|
查看次数: |
1397 次 |
最近记录: |