Я унаследовал следующую хранимую процедуру 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, чтобы определить, какой тип индекса и какие столбцы я должен убедиться, что у меня есть место, чтобы быть уверенным, что вышеуказанная хранимая процедура работает с оптимальной способностью.
Это индексы, которые являются в данный момент:
Просто для уточнения в случае, если название индекса не дает достаточно информации:
- Первые поля
CaptureBatch
и Status
- Второе поле -
CaptureDateTime
- поля третьего -
SourceId
и CaptureBatch
- поля четвертого
SourceId
и Status
- Пятое поле -
SourceId
- Шестое поле -
Status
- Седьмые поля:
Status
и CaptureDateTime
Только к вашему сведению, есть две другие хранимые процедуры, которые относятся к этому процессу и содержат другие поля выше, которые не отображаются в хранимой процедуре, которую я опубликовал.
Количество данных в Data.RawCaptures начинает расти в геометрической прогрессии. Из-за этого мне интересно, нужен ли мне еще один индекс для этой таблицы (возможно, даже другого типа?) Или если то, что у меня уже есть, должно быть хорошо покрыто. Если последнее так, я начну исследовать другие пути, чтобы определить причину тайм-аутов.
К сожалению, профиль SQL Server не поддерживается в базе данных SQL Azure. Мне нужно найти другой подход.
План выполнения запроса здесь:
https://www.brentozar.com/pastetheplan/?id=SJk4pHiw7