Как уменьшить использование DTU моей хранимой процедурой - PullRequest
0 голосов
/ 10 октября 2019

У меня есть система, встроенная в .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')

1 Ответ

0 голосов
/ 11 октября 2019

Вы можете проверить производительность запроса в базе данных SQL Azure на портале.

Например: enter image description here

Щелкните в выбранном запросе, который использовал макс. использование процессора, чтобы получить больше деталей. Он покажет вам операторы запроса и даст нам Рекомендации по производительности : enter image description here

Надеюсь, это поможет.

...