Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с CPU в SP  [new]
qqwwee1259
Member

Откуда:
Сообщений: 5
Есть хранимая процедура, вызывается порядка 500 раз в минуту.
avg cpu time = 200-300 миллисекунд.
Когда SP начинает вызываться 2000-3000 раз в минуту периодически (но не всегда) avg cpu time становится 2000-3000 миллисекунд.
Т.е. процессор при каждом вызове SP начинает потребляться в 10 раз больше.
План выполнения SP не меняется.
Кол-во строк немного меняется.
Проблемный statement внутри этой SP: insert into @TempTable ... join штук 15 больших таблиц
План выполнения statement не меняется.
Кол-во строк в statement немного меняется.
На SQL Server 2012 такой проблемы не было.
Проблема проявилась после перехода на SQL Server 2016. Обновление до SQL Server 2016 SP2 проблему не решило.
В плане параллелизм не используется.
Пробовал ставить maxdop = 1 на сервере, всё равно периодически cpu time прыгает с 200-300 миллисекунд до 2000-3000 миллисекунд.
Когда SP выполняется долго иногда помогает перекомпиляция SP, иногда помогает изменение sp_configure 'max degree of parallelism', иногда ничего не помогает и проблема проходит сама когда вызовов SP становится немного.
Что можно попробовать сделать? Что проверить?

версия: Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64) Mar 18 2018 09:11:49 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: )
3 май 18, 14:47    [21384594]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
aleks222
Member

Откуда:
Сообщений: 851
qqwwee1259
Что можно попробовать сделать?


1. Самое эффективное сделать avg cpu time = 20-30 миллисекунд.

2. Менее эффективное - сваять в процедуре цикл и исполнять постоянно.

3.
3000 раз в минуту = 50 раз в секунду

300 мс * 50 раз в секунду = 1500 мс.

А одна секунда = 1000 мс.
Всего лишь.

У вас, банально, начинается конкуренция между параллельно исполняющимися экземплярами.
3 май 18, 14:54    [21384628]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
qqwwee1259
Member

Откуда:
Сообщений: 5
> 1. Самое эффективное сделать avg cpu time = 20-30 миллисекунд.
Уменьшить уже не получится

> 2. Менее эффективное - сваять в процедуре цикл и исполнять постоянно.
В цикле сделать нельзя - SP запускается приложением

> 3. 300 мс * 50 раз в секунду = 1500 мс.
300 мс * 50 раз в секунду = 15000 мс. Это примерно загрузка 15 ядер на 100%
На сервере ядер намного больше.
Ядра сильно ничем больше не нагружены.

> У вас, банально, начинается конкуренция между параллельно исполняющимися экземплярами.
Больших wait-ов нет.
На 100% процы не грузятся.
3 май 18, 15:17    [21384747]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33260
Блог
qqwwee1259
периодически (но не всегда) avg cpu time становится 2000-3000 миллисекунд


какие ожидания в этот момент для проблемного spid, в котором выполняется процедура?
3 май 18, 17:48    [21385500]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
qqwwee1259,

а что при этом с физическими чтениями?
Или это ожидание ресурсов (ядра, диски, память), или изменения плана запросов. Вы что, видите скачок с 10% до 100% загрузки? Как Вы узнали, что это именно "потребление процессора"?
4 май 18, 11:47    [21386860]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
qqwwee1259
Member

Откуда:
Сообщений: 5
> какие ожидания в этот момент для проблемного spid, в котором выполняется процедура?
Waits анализировал, с ними проблем нет.
Есть небольшое кол-во SOS_SCHEDULER_YIELD и других ожиданий, но их суммарное кол-во несопоставимо с тем насколько дольше стала работать хранимка.

> а что при этом с физическими чтениями?
Физических чтений совсем мало, диски не нагружены

> Или это ожидание ресурсов (ядра, диски, память), или изменения плана запросов.
Как уже писал выше проблем с wait-ами нет, высокой загрузки железа нет, план запросов не меняется.

> Вы что, видите скачок с 10% до 100% загрузки?
Про "скачок с 10% до 100% загрузки" я не писал. Писал что загрузка при большом кол-ве вызовов ХП при отсутствии проблем была бы эквивалента загрузке 15 процессоров, а процов намного больше.

> Как Вы узнали, что это именно "потребление процессора"?
:)
Вижу в Extended Events
4 май 18, 15:15    [21387713]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
архивариус
Member

Откуда:
Сообщений: 149
qqwwee1259,

а железо тоже самое осталось?
4 май 18, 16:35    [21388072]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
aleks222
Member

Откуда:
Сообщений: 851
qqwwee1259
> какие ожидания в этот момент для проблемного spid, в котором выполняется процедура?
Waits анализировал, с ними проблем нет.
Есть небольшое кол-во SOS_SCHEDULER_YIELD и других ожиданий, но их суммарное кол-во несопоставимо с тем насколько дольше стала работать хранимка.

> а что при этом с физическими чтениями?
Физических чтений совсем мало, диски не нагружены

> Или это ожидание ресурсов (ядра, диски, память), или изменения плана запросов.
Как уже писал выше проблем с wait-ами нет, высокой загрузки железа нет, план запросов не меняется.

> Вы что, видите скачок с 10% до 100% загрузки?
Про "скачок с 10% до 100% загрузки" я не писал. Писал что загрузка при большом кол-ве вызовов ХП при отсутствии проблем была бы эквивалента загрузке 15 процессоров, а процов намного больше.

> Как Вы узнали, что это именно "потребление процессора"?
:)
Вижу в Extended Events


Т.е. ванга 80 левела уверяет нас, что сервер ничего не дает, но и процедуры не исполняет.
Надобно окропить сервер святой водой.

ЗЫ. Процессор не единственный ресурс, за который может идти конкуренция.
qqwwee1259
Проблемный statement внутри этой SP: insert into @TempTable ... join штук 15 больших таблиц

пишет в журнал. А журнал - он один.
Да и "15 больших таблиц" неизвестно насколько велики.
Если в память не помещаются - оно еще и читает перманентно.
4 май 18, 16:43    [21388087]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
qqwwee1259
Member

Откуда:
Сообщений: 5
> а железо тоже самое осталось?
Железо новое

> Т.е. ванга 80 левела уверяет нас, что сервер ничего не дает, но и процедуры не исполняет.
Ничего подобного не писал. Писал что проблема с периодическим увеличением потребления CPU примерно в 10 раз при каждом вызове ХП при том же плане и примерно том же количестве строк.

> пишет в журнал. А журнал - он один.
Проблем с transaction log (соответствующих wait, загрузки железа) нет

> Да и "15 больших таблиц" неизвестно насколько велики.
> Если в память не помещаются - оно еще и читает перманентно.
Как уже писал ранее физических чтений совсем мало.
Практически всё к чему идёт обращение в buffer cache, оперативки много :)
4 май 18, 17:24    [21388189]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
qqwwee1259,

ну у Вас задач в 10 раз больше, и "потребление", т.е. общее время выполнения (ожидание плюс рантайм) одной задачи в 10 раз больше. Что за паника?

Посмотрите, сколько запросов Running, а сколько Suspended в один момент времени. При любом количестве запросов в минуту Running будет примерно одинаковым. Соответственно, чем больше запросов в один момент времени приходит, тем больше находятся в состоянии Suspended.
4 май 18, 17:51    [21388279]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
qqwwee1259
Member

Откуда:
Сообщений: 5
> ну у Вас задач в 10 раз больше, и "потребление", т.е. общее время выполнения (ожидание плюс рантайм) одной задачи в 10 раз больше. Что за паника?
Похоже на троллинг какой то...
На всякий случай отвечу серьёзно: несколько раз уже писал что: 1. Проблема в том что CPU time становится примерно в 10 раз больше при КАЖДОМ вызове ХП. 2. Такие проблемы ИНОГДА возникают когда вызовов ХП становится раз в 5 больше обычного.
4 май 18, 18:00    [21388311]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
qqwwee1259,

то есть Вы доказываете, что CPU совершает в 10 раз больше вычислений и нагрузка по ядрам при этом не вырастает в 10 раз?
4 май 18, 18:13    [21388347]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
qqwwee1259,

У вас CPU все время на максимальной частоте работают? Не включен ли какой нибудь balanced power plan в биосе или ОС? Вряд ли бы конечно это увеличило время выполнения в 10 раз, но все равно проверьте.
Это физическая машина я надеюсь, не виртуалка?
4 май 18, 19:52    [21388499]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33260
Блог
qqwwee1259,

статистику обновляли?
4 май 18, 20:08    [21388520]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Как вариант, сервер в какой-то момент решает использовать параллельный план выполнения из-за чего время увеличивается по количеству ядер. Либо какой-то механизм добавляет ядер серверу при увеличении нагрузки. Виртуалка?
4 май 18, 20:09    [21388521]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
CPU time суммируется по всем ядрам для запроса.
4 май 18, 20:10    [21388524]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
архивариус
Member

Откуда:
Сообщений: 149
qqwwee1259
> а железо тоже самое осталось?
Железо новое

> Т.е. ванга 80 левела уверяет нас, что сервер ничего не дает, но и процедуры не исполняет.
Ничего подобного не писал. Писал что проблема с периодическим увеличением потребления CPU примерно в 10 раз при каждом вызове ХП при том же плане и примерно том же количестве строк.
> пишет в журнал. А журнал - он один.
Проблем с transaction log (соответствующих wait, загрузки железа) нет

> Да и "15 больших таблиц" неизвестно насколько велики.
> Если в память не помещаются - оно еще и читает перманентно.
Как уже писал ранее физических чтений совсем мало.
Практически всё к чему идёт обращение в buffer cache, оперативки много :)

а это не spin lock contention ?
5 май 18, 01:03    [21388998]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с CPU в SP  [new]
архивариус
Member

Откуда:
Сообщений: 149
qqwwee1259
Проблемный statement внутри этой SP: insert into @TempTable ... join штук 15 больших таблиц

может посмотреть в сторону Differences between SQL Server temporary tables and table variables ?
5 май 18, 01:19    [21389009]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить