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

Откуда:
Сообщений: 1196
Вчера возился с простым запросом.
SELECT RecordDateTrim AS DateBegin, COUNT(*) AS RowNumber
FROM OLTP.SkuByDayCategories
GROUP BY RecordDateTrim

OLTP.SkuByDayCategories - это индексированное представление.
Решил побаловаться с хинтами.
SELECT RecordDateTrim AS DateBegin, COUNT(*) AS RowNumber
FROM OLTP.SkuByDayCategories WITH(NOEXPAND, INDEX([IX_SkuByDayCategories_RecordDateTrim]), FORCESCAN)
GROUP BY RecordDateTrim

И получил планы выполнения.
Хотя первый запрос выполняет все условия, заданные хинтами, планы и стоимость отличаются. Стоимость оригинального запроса 1173, с хинтами - 751. Скорость выполнения отличается примерно в тех же пропорциях.
Так что оптимизатор продолжает подносить сюрпризы.

К сообщению приложен файл. Размер - 37Kb
22 окт 14, 11:28    [16741928]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Glory
Member

Откуда:
Сообщений: 104751
Jovanny
Так что оптимизатор продолжает подносить сюрпризы.

Indexed views can be created in any edition of SQL Server. In SQL Server Enterprise, the query optimizer automatically considers the indexed view. To use an indexed view in all other editions, the NOEXPAND table hint must be used.
22 окт 14, 11:35    [16741970]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Jovanny,

Похоже, при помощи хинтов вы сделали последовательный план таким дорогим по стоимости, что оптимизатор решил выбрать параллельный план (стоимость параллельного пропорционально уменьшилась). Вы поставьте в свой запрос с хинтами option(maxdop 1) и сравните скорость и стоимость.
22 окт 14, 11:37    [16741988]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
msLex
Member

Откуда:
Сообщений: 9556
SomewhereSomehow
Jovanny,
Вы поставьте в свой запрос с хинтами option(maxdop 1) и сравните скорость и стоимость.

Или в запрос без хинтов добавьте (только для эксперемента)

OPTION (QUERYTRACEON 8649)
22 окт 14, 12:29    [16742377]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Glory
Jovanny
Так что оптимизатор продолжает подносить сюрпризы.

Indexed views can be created in any edition of SQL Server. In SQL Server Enterprise, the query optimizer automatically considers the indexed view. To use an indexed view in all other editions, the NOEXPAND table hint must be used.

Не понял, что Вы хотите этим сказать?
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Oct 19 2012 13:38:57
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
22 окт 14, 12:34    [16742435]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Glory
Member

Откуда:
Сообщений: 104751
Jovanny
Не понял, что Вы хотите этим сказать?

Именно то, что вы сейчас и сделали. На разных редакциях некоторые хинты работают по разному.
22 окт 14, 12:39    [16742479]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Jovanny, хинтами нужно уметь пользоваться и понимать что прирост в скорости тут скажется отрицательно на других, параллельно выполняемых запросах.
22 окт 14, 12:47    [16742556]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
SomewhereSomehow
Jovanny,

Похоже, при помощи хинтов вы сделали последовательный план таким дорогим по стоимости, что оптимизатор решил выбрать параллельный план (стоимость параллельного пропорционально уменьшилась). Вы поставьте в свой запрос с хинтами option(maxdop 1) и сравните скорость и стоимость.

Делал и такое. Планы одинаковы по операторам, но план с хинтами немного дешевле и выполняется немного быстрее.
(1878 row(s) affected)
Table 'SkuByDayCategories'. Scan count 12, logical reads 657583, physical reads 0, read-ahead reads 27, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 96266 ms, elapsed time = 134913 ms.

(1878 row(s) affected)
Table 'SkuByDayCategories'. Scan count 12, logical reads 657583, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 89984 ms, elapsed time = 103789 ms.


К сообщению приложен файл. Размер - 47Kb
22 окт 14, 13:07    [16742743]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
msLex
SomewhereSomehow
Jovanny,
Вы поставьте в свой запрос с хинтами option(maxdop 1) и сравните скорость и стоимость.

Или в запрос без хинтов добавьте (только для эксперемента)

OPTION (QUERYTRACEON 8649)

А тут тоже интересно.

К сообщению приложен файл. Размер - 55Kb
22 окт 14, 13:16    [16742804]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Принудительно параллелизованый план стоит 3122, план с хинтами 751.
22 окт 14, 13:18    [16742814]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
msLex
Member

Откуда:
Сообщений: 9556
Jovanny
SomewhereSomehow
Jovanny,

Похоже, при помощи хинтов вы сделали последовательный план таким дорогим по стоимости, что оптимизатор решил выбрать параллельный план (стоимость параллельного пропорционально уменьшилась). Вы поставьте в свой запрос с хинтами option(maxdop 1) и сравните скорость и стоимость.

Делал и такое. Планы одинаковы по операторам, но план с хинтами немного дешевле и выполняется немного быстрее.
(1878 row(s) affected)
Table 'SkuByDayCategories'. Scan count 12, logical reads 657583, physical reads 0, read-ahead reads 27, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 96266 ms, elapsed time = 134913 ms.

(1878 row(s) affected)
Table 'SkuByDayCategories'. Scan count 12, logical reads 657583, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 89984 ms, elapsed time = 103789 ms.


Картинка с другого сайта.

у вас два индекса с начинающихся с RecordDatetrim?
22 окт 14, 13:18    [16742815]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
msLex
Member

Откуда:
Сообщений: 9556
Jovanny
Принудительно параллелизованый план стоит 3122, план с хинтами 751.

а статистика io/time?
22 окт 14, 13:20    [16742822]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
msLex
у вас два индекса с начинающихся с RecordDatetrim?
Один. Он используется в обеих запросах.
22 окт 14, 13:28    [16742860]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
msLex
Member

Откуда:
Сообщений: 9556
Jovanny
msLex
у вас два индекса с начинающихся с RecordDatetrim?
Один. Он используется в обеих запросах.

чем тогда различаются два непараллельных плана?
22 окт 14, 13:35    [16742897]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
msLex
чем тогда различаются два непараллельных плана?
Стоимостью.
22 окт 14, 13:47    [16742983]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
msLex
Member

Откуда:
Сообщений: 9556
Jovanny
Стоимостью.

Кроме стоимости, конечно.

set statistics profile on или реальный план выполнения запросов в формате .sqlplan покажИте.
22 окт 14, 13:50    [16743008]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
16742743
22 окт 14, 13:57    [16743045]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Это реальные планы и статистика.
22 окт 14, 13:58    [16743048]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Jovanny
Делал и такое. Планы одинаковы по операторам, но план с хинтами немного дешевле и выполняется немного быстрее.

Ну вот, когда оба плана не параллельные, разница в стоимости меньше и уже обусловлена другими причинами. То, что она вообще есть, это недоработка оптимизатора, который упрощает разные деревья из-за хинта noexpand.
А то что быстрее выполняется, вы посмотрите на свою же статистику:
автор
(1878 row(s) affected)
Table 'SkuByDayCategories'. Scan count 12, logical reads 657583, physical reads 0, read-ahead reads 27, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(1878 row(s) affected)
Table 'SkuByDayCategories'. Scan count 12, logical reads 657583, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Судя по этому, в первый раз данных нет в кэше, по этому выполняются физические чтения, во втором такого нет, отсюда разница в скорости. Попробуйте выполнить тест несколько раз подряд - разница должна быть на уровне погрешности.
22 окт 14, 14:02    [16743070]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

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

Это второе выполнение, в первом упреждающих чтений было намного больше. Но согласитесь, 27 упреждающих чтений против 657583 логических погоду не делают.
22 окт 14, 14:07    [16743117]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
msLex
Member

Откуда:
Сообщений: 9556
Jovanny
Это реальные планы.
Это картинка.
22 окт 14, 14:17    [16743187]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
Jovanny
Member

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

Сейчас админы перегружают сервер, планы выставлю чуть позже.
22 окт 14, 14:18    [16743200]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Jovanny,

Согласиться не могу.

Для чистоты эксперимента нужно либо очищать кэш перед каждым выполнением, либо добиться чтобы данные всегда были в кэше. А еще исключить влияние блокировок и время на передачу строк клиенту.

Говоря про вторую картинку, с не параллельными планами, из формы планов (а по картинке только ее и можно понять) не вижу никаких предпосылок, почему бы различаться времени выполнения, при соблюдении оговоренных выше условий. Отсюда делаю вывод что какое-то из условий выше не соблюдено, например нет данных в кэше, что и показывает ваша статистика IO.
22 окт 14, 14:21    [16743234]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
msLex
Member

Откуда:
Сообщений: 9556
SomewhereSomehow
Говоря про вторую картинку, с не параллельными планами, из формы планов (а по картинке только ее и можно понять) не вижу никаких предпосылок, почему бы различаться времени выполнения, при соблюдении оговоренных выше условий.

Меня смущает разная "толщина" результирующего набора.
При этом автор утверждает, что это реальные а не предварительные планы.
22 окт 14, 15:32    [16743820]     Ответить | Цитировать Сообщить модератору
 Re: О пользе хинтов  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
msLex
Меня смущает разная "толщина" результирующего набора.
При этом автор утверждает, что это реальные а не предварительные планы.

Такое может быть. Это последствия упрощения из разных деревьев, которые разные из-за подсказки noexpand. Выглядит нелогично, но в данном случае, "на точность стрельбы не влияет".
22 окт 14, 15:45    [16743931]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить