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

Откуда:
Сообщений: 1077
locky
Anddros,

имелось в виду - "просили уже". Давно.

Я понял. :) Только зачем просить, если уже есть. :)

Правда, эту дыру вполне могут заткнуть в следующих версиях сервера.
9 июн 11, 16:57    [10791087]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
SomewhereSomehow
Member

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

Дык а чего есть-то? Речь ведь о табличных переменных. А с табличными переменными ваш фокус не прокатит, ибо там нет данных, и в момент построения плана используется стандартное предположение про 1 ряд.
вот сравните:
create proc sp_test
as
select * from (select top 15 with ties 1 ыыы, * from spt_values order by 1) t
declare @t table(id int)
insert into @t select number from spt_values
select * from (select top 15 with ties 1 ыыы, * from @t order by 1) t
go
И включить Include actual execution plan
exec sp_test
go
в первом случае Estimated Rows действительно 15. Во втором случае по-прежнему 1. Если во втором запросе добавить вконце option(recompile) тогда оценка станет равной 15, но это не потому что сработал фокус, а потому, что сервер перестроил план для этой инструкции и "проснифал" что было в тот момент в таблице...
9 июн 11, 18:47    [10791719]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
DeColo®es, доклад поглядел. Вполне нормально. Жаль, что во времени были ограничены. Схожу еще на ваш блог почитаю, потому как все никак руки не доходили.

* На счет Харькова, если всеж соберетесь, то сообщите... Я бы хотел попасть, если это возможно, по крайней мере готов туда приехать))).

** В любом случае, очень хорошо, что в этот раз есть видео. Большое спасибо. Надеюсь, что это станет постоянной практикой.
9 июн 11, 20:30    [10792012]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
locky
Mnior
Даёшь эмуляцию статистики через хинты (Rows (@TableName = <ApproximatelyRowsCount>)).

ты не поверишь....
Бойан!
Можно ссылочку, хочу отметиться. Или как обычно "Closed: By design".
9 июн 11, 22:18    [10792471]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Что-то не могу найти. Пока только это:
Provide a hint to force intermediate materialization of CTEs or derived tables

+ Off
Некоторые отмазки поражают:
M$
Thank you for submitting this suggestion, but we're trying to clean house and remove items we feel we will likely not address given their priority relative to other items in our queue. We believe it is unlikely that we will address this suggestion, and so we are closing it as “won’t fix”.
Или я плохо перевёл или кто-то "выполняет" план. Хотя есть и старые зависшие топики.
9 июн 11, 22:40    [10792588]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Mnior
locky
пропущено...

ты не поверишь....
Бойан!
Можно ссылочку, хочу отметиться. Или как обычно "Closed: By design".
Это было по другим, непубличным каналам.
Но если кто-то откроет предложение на feedback сайте, голосов
тоже добавим. ;-)
9 июн 11, 23:16    [10792713]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Anddros
Member

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

Дык а чего есть-то? Речь ведь о табличных переменных. А с табличными переменными ваш фокус не прокатит, ибо там нет данных, и в момент построения плана используется стандартное предположение про 1 ряд.
вот сравните:
create proc sp_test
as
select * from (select top 15 with ties 1 ыыы, * from spt_values order by 1) t
declare @t table(id int)
insert into @t select number from spt_values
select * from (select top 15 with ties 1 ыыы, * from @t order by 1) t
go
И включить Include actual execution plan
exec sp_test
go
в первом случае Estimated Rows действительно 15. Во втором случае по-прежнему 1. Если во втором запросе добавить вконце option(recompile) тогда оценка станет равной 15, но это не потому что сработал фокус, а потому, что сервер перестроил план для этой инструкции и "проснифал" что было в тот момент в таблице...
Фокус-то как раз сработал. :) Просто top 15 от таблицы в одну запись - как считает сервер в случае табличной переменной без recompile - получается 1. А с recompile - вычисляется по ней статистика - на входе этой конструкции куча записей - на выходе по мнению оптимизатора обрезается до 15.

Этот фокус можно просто рассматривать как некий недокументированный хинт, обрезающий статистику по таблице до Nного числа записей. Ну, пока его не пофиксят, конечно... :)
10 июн 11, 10:06    [10793753]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
SomewhereSomehow
Member

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

А по-моему, как раз не сработал =) В том-то и дело, что top 15 для таблицы, которая все равно оценена в 1 строку, это все равно 1. Ну и зачем тогда вообще тут top 15? Речь-то о том, чтоб заранее при помощи хинта указать оптимизатору сколько ожидается записей в таблице, при этом обходясь без перекомпиляций.

п.с.
А для обычных таблиц, тоже непонятно зачем это использовать, т.к. если статистика впорядке, то и оценки как правило в порядке, а если нет - то лучше уж привести в порядок статистику.
10 июн 11, 10:21    [10793869]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
SomewhereSomehow
А для обычных таблиц, тоже непонятно зачем это использовать, т.к. если статистика впорядке, то и оценки как правило в порядке, а если нет - то лучше уж привести в порядок статистику.
Идея очень здравая, если в хинте, конечно, указывть не количество записей в таблице, а сколько записей будет использовано по указанным условиям.

Ведь никакая статистика не может определить количество записей для сложных фильтров.
10 июн 11, 10:45    [10794045]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Anddros
Member

Откуда:
Сообщений: 1077
SomewhereSomehow
Речь-то о том, чтоб заранее при помощи хинта указать оптимизатору сколько ожидается записей в таблице, при этом обходясь без перекомпиляций
А, в этом смысле... Ну тады, да. Для табличных переменных не поможет.

SomewhereSomehow
А для обычных таблиц, тоже непонятно зачем это использовать, т.к. если статистика впорядке, то и оценки как правило в порядке, а если нет - то лучше уж привести в порядок статистику.
А зачем использовать хинты? :) Нет, тем, что лучше привести в порядок статистику, я, разумеется, согласен. Только вот не всегда даже при актуальной статистике сервер способен найти хороший план. Хинт, который укажет серверу, что в такой-то табличке крайне мало записей, может подтолкнуть сервер на выбор определенного плана запроса. Несколько раз применял, например, этот фокус для избавления от спула.

ЗЫ. В продакшене не использовал, разумеется.
10 июн 11, 10:56    [10794128]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
SomewhereSomehow
Member

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

ну для сложных фильтров, с функциями скалярными например, может быть..
правда еще неизвестно, не навредишь ли ты таким хинтом, сегодня работает, завтра нет - по этому я не особый сторонник хинтования...
10 июн 11, 10:57    [10794136]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
SomewhereSomehow
Member

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

Ну вроде, пришли к консенсусу =) А трюк, чисто академически интересный, буду иметь ввиду!
10 июн 11, 11:00    [10794148]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Anddros
Member

Откуда:
Сообщений: 1077
SomewhereSomehow
Ну вроде, пришли к консенсусу =) А трюк, чисто академически интересный, буду иметь ввиду!
Это трюк из разряда
select .. from table where field1 = field1 and field2=field2 ...
Ну для not null полей разумеется. :) На одном сайте они именуются 'йогуртами' или 'турбо-предикатами' из-за того, что существенно уменьшают стоимость плана запроса. :)
10 июн 11, 11:11    [10794256]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Anddros
На одном сайте они именуются 'йогуртами' или 'турбо-предикатами' из-за того, что существенно уменьшают стоимость плана запроса. :)

А че так шифруетесь? ИМХО нет ничего плохого в том чтобы указать сайт, а именно: http://sql-ex.com/ . Ресурс вполне хороший и полезный, чего нельзя сказать о "йогуртах" - эта хрень вредная (даже хуже, чем бездумное хинтование). Т.е. для общего развития как дурить оптимизатор может знать и нужно, но за использование нужно ставить в угол, на горох. Никакой возможный выигрыш не оправдает ужасы синтаксиса и возможные проблемы при изменениях оптимизатора.
10 июн 11, 12:50    [10795382]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Anddros
Member

Откуда:
Сообщений: 1077
kDnZP
Anddros
На одном сайте они именуются 'йогуртами' или 'турбо-предикатами' из-за того, что существенно уменьшают стоимость плана запроса. :)
Ресурс вполне хороший и полезный, чего нельзя сказать о "йогуртах" - эта хрень вредная (даже хуже, чем бездумное хинтование). Т.е. для общего развития как дурить оптимизатор может знать и нужно, но за использование нужно ставить в угол, на горох.
Иногда - не часто - эта хрень оказывается отнюдь не вредной, а полезной. Главное - уметь ее готовить. :) Другое дело, набор документированных хинтов в скуле вполне достаточен, чтобы обойтись без нее.
10 июн 11, 13:34    [10795895]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
alexeyvg
Member

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

ну для сложных фильтров, с функциями скалярными например, может быть..
правда еще неизвестно, не навредишь ли ты таким хинтом, сегодня работает, завтра нет - по этому я не особый сторонник хинтования...
Я тоже стараюсь не использовать хинты.

Но тут, по моему, немного другое дело. Мы просто сообщаем серверу как-бы некую статистику, которую он кроме как от программиста взять нигде не может.
Разве что накапливать статистику выполнения этого конкретного запроса за долгое время, но это уже совсем другая история.
10 июн 11, 14:03    [10796171]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
ViPRos
Member

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

а что толку от хинта, если нельзя хинт менять находу
10 июн 11, 14:31    [10796449]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Anddros
Member

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

ну для сложных фильтров, с функциями скалярными например, может быть..
правда еще неизвестно, не навредишь ли ты таким хинтом, сегодня работает, завтра нет - по этому я не особый сторонник хинтования...
Я тоже стараюсь не использовать хинты.

Но тут, по моему, немного другое дело. Мы просто сообщаем серверу как-бы некую статистику, которую он кроме как от программиста взять нигде не может.
К сожалению, это работает только в одну сторону - уменьшения рассчитанного оптимизатором кол-ва записей. Да и в MS могут заткнуть дыру с некорректным подсчетом записей в 'top N with ties' в любой момент. Правда, это тянется, по-моему, еще с 2000-го. И до сих пор не заткнули... :)
10 июн 11, 15:00    [10796807]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Anddros
К сожалению, это работает только в одну сторону - уменьшения рассчитанного оптимизатором кол-ва записей. Да и в MS могут заткнуть дыру с некорректным подсчетом записей в 'top N with ties' в любой момент. Правда, это тянется, по-моему, еще с 2000-го. И до сих пор не заткнули... :)
Я имел в виду добавление нормального хинта, как Mnior написал.

А такие фокусы как top N with ties - это уж слишком!
10 июн 11, 15:11    [10796946]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
Anddros
А то, что оптимизатор начинает рассматривать планы именно с того порядка таблиц, что указан в запросе - это достоверная информация? Не доводилось раньше слышать этого. Если оно действительно так, то буду пользоваться. Спасибо!
:)

Вот тоже хотелось бы узнать откуда у докладчика эта информация, нигде не встречал ранее подобной инфы.
15 июн 11, 00:35    [10813644]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
По поводу порядка таблиц - это опыт, но более-менне официальное подтверждение постараюсь предоставить.

Мероприятие в Харькове ориентировочно пройдет 11 июля.
Более подробной инфы пока нет, пока только есть договоренность, что доклад будет более объемный, чем на DevCon - 2 часа.
29 июн 11, 12:45    [10892171]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
yado4eg
Member

Откуда:
Сообщений: 202
DeColo®es,

1. тема доклада та же будет ?
2. а можно на выходных ? :)
29 июн 11, 13:34    [10892683]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
yado4eg
1. тема доклада та же будет ?
Да.
yado4eg
2. а можно на выходных ? :)
Нет.
29 июн 11, 14:05    [10892956]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
NataliaZ
Member

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

учитывая важность и актуальность темы, вопрос:

где и у кого в Харькове можно выяснить подробности мероприятия (место, стоимость, как поучаствовать и пр.)

Спасибо :)
29 июн 11, 14:19    [10893070]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов в SQL Server - доклад на DevCon'11  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
NataliaZ,
Как только будут подробности - напишу в своем блоге и в этой теме, как минимум.
29 июн 11, 14:30    [10893159]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить