Предотвращение исчерпания DTU при создании нового индекса - PullRequest
1 голос
/ 07 января 2020

Мы используем Azure SQL в качестве единой базы данных и по модели ценообразования DTU. У нас есть таблица с ~ 50M записями, и мы хотели бы добавить новый некластеризованный индекс для одного строкового атрибута.

Проблема в том, что это производственная база данных. Если бы мне пришлось использовать простой синтаксис T SQL, равный

CREATE NONCLUSTERED INDEX [IndexName]
ON [dbo].[TableName]([FieldName] ASC);
GO

Создание индекса будет привязывать DTU к 100% в течение нескольких минут, что, по существу, приводит к истощению любых запросов из кода нашего приложения.

Есть ли в Azure SQL способ дать SQL серверу команду «Эй, используйте только X DTU для этой операции индексации»?

1 Ответ

1 голос
/ 07 января 2020

Вы можете использовать опцию MAXDOP , чтобы ограничить количество используемых процессоров.

ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE=ON, MAXDOP=1, RESUMABLE=ON) ;

Вы можете рассмотреть возможность использования функции Resbuble Online Index Rebuild, чтобы можно было запланировать выполнение X одной минуты из этих индексов.

ALTER INDEX [ix_CustomerIDs]
ON [ContosoSales].[ConstosoTransactionData]
REBUILD
WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 1 MINUTES);
GO

ALTER INDEX ix_CustomerIDs ON [ContosoSales].[ConstosoTransactionData] PAUSE

ALTER INDEX ix_CustomerIDs ON [ContosoSales].[ConstosoTransactionData] RESUME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...