У меня есть система, встроенная в .net с базой данных SQL Azure. У меня есть таблица планировщика задач, поэтому в определенных ситуациях, когда что-то происходит в системе, она добавляет строку в эту таблицу. Затем у меня есть веб-работа в .net, которая проверяет эту таблицу каждые пару секунд, и если там есть строка со статусом «Ожидание», она обновляет эту строку до «в процессе», а затем моя веб-работа выполняетнеобходимое задание, и, наконец, оно обновляет строку до «Выполнено». Это все работает нормально, но запрос для проверки таблицы использует 100% DTU. Данные хранятся в SQL Azure S2. В таблице обычно около 500 строк. Иногда это может вырасти до сотен тысяч, но они очищаются каждые несколько недель.
Может кто-нибудь помочь мне понять, почему это использует 100% DTU. Я знаю, что он запускается очень часто, но я чувствую, что он не должен использовать 100% DTU.
Это моя процедура:
ALTER Procedure [tb].[TaskSchedulerItem_Select_NextToProcess]
(
@TaskSchedulerId int,
@DateLastUpdated datetime,
@CurrentDateTime datetime
)
AS
SET NOCOUNT ON;
Declare @TaskSchedulerItemId int
Select top 1 @TaskSchedulerItemId = TaskSchedulerItemId
From TaskSchedulerItem
Where
(
ItemStatus in ('PENDING','FAILED')
or
(ItemStatus = 'IN PROGRESS' AND DateLastUpdated<DATEADD(MINUTE,-1,@CurrentDateTime))
)
and TaskSchedulerId=@TaskSchedulerId
ORDER BY DateLastUpdated asc
UPDATE [TaskSchedulerItem]
SET
ItemStatus = 'IN PROGRESS',
ItemStatusDescription = 'IN PROGRESS',
DateLastUpdated = @CurrentDateTime
output inserted.T`enter code here`askSchedulerId,inserted.TaskSchedulerItemId, inserted.ItemReferenceId,inserted.ItemStatus,inserted.ItemStatusDescription, inserted.DateCreated, inserted.DateLastUpdated, inserted.FailureCount
Where TaskSchedulerItemId = @TaskSchedulerItemId
and ItemStatus in ('PENDING','FAILED', 'IN PROGRESS')