SQL Server存储过程执行超时-我是否需要其他索引?

时间:2018-09-03 16:09:45

标签: sql-server stored-procedures azure-sql-database

我已经继承了以下SQL Server存储过程(在Azure SQL Server上):

PROCEDURE [Sources].[DeleteRawCaptures]
    (@SourceId BIGINT,
     @Count INT OUTPUT)
AS
BEGIN
    SET NOCOUNT ON
    SET ROWCOUNT 500

    DECLARE @BatchId uniqueidentifier

    SELECT @BatchId = CaptureBatch
    FROM [Data].[RawCaptures]
    WHERE CaptureId = (SELECT MAX(CaptureId)
                       FROM [Data].[RawCaptures]
                       WHERE SourceId = @SourceId)

    DELETE FROM [Data].[RawCaptures] 
    WHERE SourceId = @SourceId
      AND CaptureBatch <> @BatchId

    SET @Count = @@ROWCOUNT
END

经过数月的无问题工作,直到最近才超时。在我能够与他联系的短暂时间内,构建解决方案的前开发人员建议,Data.RawCaptures表上可能需要一个附加索引,因为他几个月前上次遇到错误时,他需要添加另一个索引。不幸的是,他没有比这更具体的了。

我对SQL Server索引的了解还不足以确定什么类型的索引以及在哪些列上,我应该确保有适当的位置,以确保上面的存储过程以其最佳性能运行。 / p>

这些是当前已存在的 索引:

enter image description here

请澄清一下,以防索引标题提供的信息不足:

  • 第一个字段是CaptureBatchStatus
  • 第二个字段是CaptureDateTime
  • 第三个字段是SourceIdCaptureBatch
  • 第四个人的字段是SourceIdStatus
  • 第五个人的字段是SourceId
  • 第六个人的字段是Status
  • 第七个人的字段是StatusCaptureDateTime

仅供参考,还有两个与此过程相关的存储过程,并且包含上面其他字段,这些字段未出现在我发布的存储过程中。

Data.RawCaptures中的数据量开始呈指数增长。因此,我想知道我是否需要该表的另一个索引(甚至可能是其他类型的索引?),或者已经存在的索引是否应该覆盖我。如果是后者,我将开始调查其他途径以确定超时的原因。

不幸的是,Azure SQL数据库不支持SQL Server配置文件。我需要发现另一种方法。

此处的查询执行计划:

https://www.brentozar.com/pastetheplan/?id=SJk4pHiw7

0 个答案:

没有答案