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

Откуда:
Сообщений: 88
Добрый день.

К сожалению, "стоимость запроса (по отношению к пакету)" показывает не верные данные.


Например, выполняю два запроса в одном окне, смотрю план, а там у запроса, который выполнился в 10 раз быстрее - стоимость больше.




Скажите как более-менее точно вычислить % времени выполнения запроса по отношению к пакету?


для примера стоимость быстрого запроса 89%, а медленного 11%.

К сообщению приложен файл. Размер - 10Kb
16 окт 17, 13:46    [20872721]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
Ну или может быть как-то можно менять приоритеты?


Например, скл сервер думает что диск медленный а CPU быстрый, а в действительности наоборот.

А он выбирает план для быстрого CPU и медленного диска, хотя оптимальнее было бы для быстрого диска и медленного CPU.
16 окт 17, 13:48    [20872733]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
стоимость плана это вовсе не время выполнения.

"реальную" (хотя это тоже оценка) стоимость смотрите в плане запроса на корневом операторе как estimated cost
которая есть объединение оценок использования ресурсов CPU и IO (можно увидеть там же в плане) для этого поддерева плана.

проценты о которых вы говорите это сумма всех estimated cost пакета и вычисление процента конкретного значения от общего.
16 окт 17, 14:14    [20872908]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
Владислав Колосов
Member

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

у вас ЦПУ обрабатывает данные медленнее, чем их поставляет диск? Существует эмпирическая формула - 200мб/с на ядро.

автор
который выполнился в 10 раз быстрее - стоимость больше

Вполне возможно.
Время выполнения нельзя предсказать.
16 окт 17, 16:47    [20873628]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
гогол
Например, выполняю два запроса в одном окне, смотрю план, а там у запроса, который выполнился в 10 раз быстрее - стоимость больше.

Вот какая штука - Вы результаты своих двух запросов куда-то получаете? Например, SQL взял и внутри себя посчитал 100 строк за 1 мс, а 200 строк за 2 мс. Но. Далее ему ведь эти строки нужно куда-то выдать, например, через сетевой буфер по сети в клиент, например в студию SSMS, далее студия - чтобы Вам строки красиво оформить и выдать - должна их у себя распарсить. Ну, например, прилетает условно 1 целая и 2 сотых - SSMS должна понимать, как показать, как 1.02 или 1,02, ну и все в таком духе.
И тут выясняется, что между студией и сервер реально расположена куча промежуточных узлов, роутеры всякие, антивирусники, прокси-серверы и все такое. И 100 строк "летят" в студию за 1 минуту, а 200 строк за 5 мс.
Или вот еще тема - завернули в пакет, внутри него запрос встал в очередь, 100 строк отработали за 1мс, но ждали, когда отработают - несколько секунд, а 200 строк отработали за 2 мс, но не ждали старта, а сразу выполнились. И что.
Измерять нужно профайлером SQL Profiler, не на проде, а на тестовом окружении, где кроме Вас - никого с паралелльными задачами нет, а все остальное - это зыбкая неопределенность.
16 окт 17, 21:33    [20874156]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
Andy_OLAP
гогол
Например, выполняю два запроса в одном окне, смотрю план, а там у запроса, который выполнился в 10 раз быстрее - стоимость больше.

Вот какая штука - Вы результаты своих двух запросов куда-то получаете? Например, SQL взял и внутри себя посчитал 100 строк за 1 мс, а 200 строк за 2 мс. Но. Далее ему ведь эти строки нужно куда-то выдать, например, через сетевой буфер по сети в клиент, например в студию SSMS, далее студия - чтобы Вам строки красиво оформить и выдать - должна их у себя распарсить. Ну, например, прилетает условно 1 целая и 2 сотых - SSMS должна понимать, как показать, как 1.02 или 1,02, ну и все в таком духе.
И тут выясняется, что между студией и сервер реально расположена куча промежуточных узлов, роутеры всякие, антивирусники, прокси-серверы и все такое. И 100 строк "летят" в студию за 1 минуту, а 200 строк за 5 мс.
Или вот еще тема - завернули в пакет, внутри него запрос встал в очередь, 100 строк отработали за 1мс, но ждали, когда отработают - несколько секунд, а 200 строк отработали за 2 мс, но не ждали старта, а сразу выполнились. И что.
Измерять нужно профайлером SQL Profiler, не на проде, а на тестовом окружении, где кроме Вас - никого с паралелльными задачами нет, а все остальное - это зыбкая неопределенность.



Оба запроса возвращают 1 строку.
17 окт 17, 11:21    [20875173]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
гогол,
проф. Преображенский:
И — боже вас сохрани — не читайте до обеда советских газет.
17 окт 17, 11:24    [20875193]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
лолл
Member

Откуда:
Сообщений: 450
гогол,

Действительно, такое бывает, например, если запрос использует функции XQuery. Могу порекомендовать пользоваться сторонними анализаторами планов. Я иногда пользуюсь SQL Senrty Plan Explorer
17 окт 17, 13:57    [20875934]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Andy_OLAP
гогол
Например, выполняю два запроса в одном окне, смотрю план, а там у запроса, который выполнился в 10 раз быстрее - стоимость больше.

Вот какая штука - Вы результаты своих двух запросов куда-то получаете? Например, SQL взял и внутри себя посчитал 100 строк за 1 мс, а 200 строк за 2 мс. Но. Далее ему ведь эти строки нужно куда-то выдать, например, через сетевой буфер по сети в клиент, например в студию SSMS, далее студия - чтобы Вам строки красиво оформить и выдать - должна их у себя распарсить. Ну, например, прилетает условно 1 целая и 2 сотых - SSMS должна понимать, как показать, как 1.02 или 1,02, ну и все в таком духе.
И тут выясняется, что между студией и сервер реально расположена куча промежуточных узлов, роутеры всякие, антивирусники, прокси-серверы и все такое. И 100 строк "летят" в студию за 1 минуту, а 200 строк за 5 мс.
Или вот еще тема - завернули в пакет, внутри него запрос встал в очередь, 100 строк отработали за 1мс, но ждали, когда отработают - несколько секунд, а 200 строк отработали за 2 мс, но не ждали старта, а сразу выполнились. И что.
Измерять нужно профайлером SQL Profiler, не на проде, а на тестовом окружении, где кроме Вас - никого с паралелльными задачами нет, а все остальное - это зыбкая неопределенность.

бааатюшкиии

20872908 единственно адекватный, остальные записки луше не брать ко вниманию.
17 окт 17, 14:03    [20875958]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
лолл
Member

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

автор
Скажите как более-менее точно вычислить % времени выполнения запроса по отношению к пакету?
17 окт 17, 14:09    [20875996]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
лолл,

SET STATISTICS TIME ON
17 окт 17, 14:30    [20876136]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
Eleanor
Member

Откуда:
Сообщений: 2632
гогол,

Если в пакете много стейтментов и в set statistics time on уже путаетесь, то
- можете выполнять запросы, как уже предложили, в SQL Senrty Plan Explorer и смотреть колонку Duration
- собирать в профайлере SQL:BatchCompleted, SQL:StmtCompleted по вашему SPID и смотреть колонку Duration
17 окт 17, 14:48    [20876214]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
TaPaK
Andy_OLAP
пропущено...

Вот какая штука - Вы результаты своих двух запросов куда-то получаете? Например, SQL взял и внутри себя посчитал 100 строк за 1 мс, а 200 строк за 2 мс. Но. Далее ему ведь эти строки нужно куда-то выдать, например, через сетевой буфер по сети в клиент, например в студию SSMS, далее студия - чтобы Вам строки красиво оформить и выдать - должна их у себя распарсить. Ну, например, прилетает условно 1 целая и 2 сотых - SSMS должна понимать, как показать, как 1.02 или 1,02, ну и все в таком духе.
И тут выясняется, что между студией и сервер реально расположена куча промежуточных узлов, роутеры всякие, антивирусники, прокси-серверы и все такое. И 100 строк "летят" в студию за 1 минуту, а 200 строк за 5 мс.
Или вот еще тема - завернули в пакет, внутри него запрос встал в очередь, 100 строк отработали за 1мс, но ждали, когда отработают - несколько секунд, а 200 строк отработали за 2 мс, но не ждали старта, а сразу выполнились. И что.
Измерять нужно профайлером SQL Profiler, не на проде, а на тестовом окружении, где кроме Вас - никого с паралелльными задачами нет, а все остальное - это зыбкая неопределенность.

бааатюшкиии

20872908 единственно адекватный, остальные записки луше не брать ко вниманию.

А что не так? У автора темы "выполняю два запроса в одном окне", "который выполнился в 10 раз быстрее" - какие STATISTICS, какие Profiler, человек искренне считает, что откуда-то с сервера в окно ему что-то прилетает без накладных расходов, и запрос реально начинает выполняться по нажатию кнопки старт. Пусть хотя бы разок подумает, что реально происходит под капотом. А то как в анекдоте - наточить топор некогда, нужно лес рубить.
17 окт 17, 15:06    [20876282]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
Проценты относятся к ПРЕДПОЛАГАЕМОМУ плану. Который в общем случае может сильно отличаться от фактического. Вот, в плане фулскан таблицы. По статистике предполагалось 100 записей. И этот фулскан отображён, как 1% от всего запроса. Но, статистика оказалась устаревшая/не точная. По факту оказалось 100 тыс. записей. И этот фулскан занял 99% всего запроса. Но, на картинке Вы видите 1%.

Уточнение: сам план предполагаемый совпадает с фактическим. А вот оценки по CPU и I/O в каждом операторе, да и всём запросе предполагаемые от фактических могут резко отличаться.
17 окт 17, 16:10    [20876585]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать % реальной стоимости запроса в плане?  [new]
лолл
Member

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

не практично)
17 окт 17, 17:10    [20876791]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить