Простой запрос UPDATE для очень большой таблицы SQL - PullRequest
0 голосов
/ 09 марта 2019

У меня есть такой запрос на обновление:

SET NOCOUNT ON;
DECLARE @rows INT, @count INT, @message VARCHAR(100);
SET @rows = 1;
SET @count = 0;
WHILE @rows > 0
BEGIN
update top(100000)  [dbo].[Table]
set T1=212
where T1=-10
    SET @rows = @@ROWCOUNT;
END

Мои таблицы содержат более 300 строк Milion.Я установил для своей базы данных SQL Azure значение Premium P2 с 250 DTU.Как вы можете видеть на рисунке, он остается почти на 70% использованием DTU.

enter image description here

Мой вопрос сейчас: если я уменьшу свои DTU до 500, Может ли мой запрос на обновление работать быстрее?

Ответы [ 2 ]

3 голосов
/ 11 марта 2019

Если вы работаете в куче (без кластерного индекса), то вы сканируете до 300 миллионов строк, чтобы попытаться найти первые 100 тысяч строк для обновления в соответствии с вашим условием.Затем вы делаете это потенциально несколько раз.Вы также можете помещать строки в базу данных tempdb.

Если вы работаете с кластеризованным индексом для столбца в предложении where, то вы будете выполнять сканирование диапазона в подмножестве, которое хотите обновить (т.е.более эффективным).Пожалуйста, попробуйте это.

Ваш текущий запрос связан либо с процессором (если страницы помещаются в памяти), либо с io (если он не помещается).Увеличение dtu поможет в любом случае повысить производительность вашего запроса.Тем не менее, вы будете счастливее, если в качестве следующего шага исправите алгоритмические проблемы в производительности запросов.

1 голос
/ 11 марта 2019

1.Если я уменьшу число DTU до 500, может ли мой запрос на обновление работать быстрее?

Да, может.

Но клиентам следует учитывать, что база данных SQL Azure не рекомендует напрямую масштабировать свои DTU для повышения производительности базы данных.Пожалуйста, укажите: Повышение производительности базы данных с помощью большего количества ресурсов .

Сводка:

В качестве общего руководства, если загрузка ЦП постоянно находится на уровне или выше80%, у вас проблема с производительностьюЕсли у вас есть проблема, связанная с запуском, это может быть вызвано недостаточными ресурсами ЦП или одним из следующих условий:

  1. Слишком много запущенных запросов
  2. Слишком многокомпиляция запросов
  3. Один или несколько выполняющихся запросов используют неоптимальный план запросов

Наконец, если нет активных элементов, которые могут улучшить производительность вашей базы данных, вы можете изменитьколичество ресурсов, доступных в базе данных SQL Azure.Вы можете назначить больше ресурсов, изменив уровень обслуживания DTU отдельной базы данных или увеличив eDTU эластичного пула в любое время.

Как сказал Клей, для повышения производительности и снижения затрат Azure также предлагает несколько советов, которые помогут вам повысить производительность.Одним из таких предложений является оптимизация запроса.Для получения более подробной информации см .: Мониторинг и настройка производительности .

Хмель, это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...