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

Откуда:
Сообщений: 1214
Ситуация: запрос в несколько таблиц да с аплаями да с разными инлайн функциями.
На входе везде index seek и key lookup, однако каждом случае Предполагаемое кол-во извлекаемых записей = 1
Но актуальное кол-во записей десятки тысяч.

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

Откуда:
Сообщений: 104760
Cammomile
Но актуальное кол-во записей десятки тысяч.

Акутальное где ? Во всей таблице ? Или в каждом apply ?
22 апр 14, 13:11    [15915546]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
В таблицах
22 апр 14, 13:19    [15915594]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Cammomile
В таблицах

А в каждом apply одна запись? Которая извлекается по index seek и key lookup ?
22 апр 14, 13:24    [15915649]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Да, примерно так

SELECT
....
, OA.SomeValue
, OA2.OtherValue
FROM
....
OUTER APPLY ( SELECT TOP 1...) OA
OUTER APPLY (SELECT TOP 1...) OA2
22 апр 14, 13:28    [15915688]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Cammomile
Да, примерно так

SELECT
....
, OA.SomeValue
, OA2.OtherValue
FROM
....
OUTER APPLY ( SELECT TOP 1...) OA
OUTER APPLY (SELECT TOP 1...) OA2
Я чего-то не понимаю. Вы написали top 1 и теперь удивляетесь, что "Предполагаемое кол-во извлекаемых записей = 1"? O_o
22 апр 14, 13:29    [15915702]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Cammomile
Да, примерно так

А что тогда неправильно в оценках оптимизатора ?
22 апр 14, 13:31    [15915709]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Но в таблицах, которые на вход аплая подаются, строчек то поболе!
22 апр 14, 13:33    [15915728]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Cammomile
Но в таблицах, которые на вход аплая подаются, строчек то поболе!
К TOP 1 и ORDER BY прилагается?
22 апр 14, 13:33    [15915734]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Cammomile
Но в таблицах, которые на вход аплая подаются, строчек то поболе!

А какое отношение это имеет к _выходу_ apply ?
22 апр 14, 13:35    [15915742]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Вы меня немного запутали. Я еще раз уточню.

Вот у меня "эстимейтед намба оф роус 1" , а "актуал наба оф роус" 90 000
Это плохо\хорошо\никак?

2iap
В некоторых случаях да, в некоторых нет.
22 апр 14, 13:42    [15915792]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Cammomile
2iap
В некоторых случаях да, в некоторых нет.
Если нет, то разве не логично просто сразу вернуть одну первую попавшуюся строку?
22 апр 14, 13:45    [15915808]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Cammomile
Вот у меня "эстимейтед намба оф роус 1" , а "актуал наба оф роус" 90 000
Это плохо\хорошо\никак?

В огороде бузина, а в Киеве дядька.
Это плохо, хорошо или никак?
22 апр 14, 13:46    [15915811]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
iap, логично, но правила компании обязывают во всех подобных случаях писать топ1 даже если не нужен ордер бай. Например уверен, что аплай вернет одну строчку.
22 апр 14, 13:52    [15915863]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
SomewhereSomehow
Member

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

А Estmated Number Of Executions?
Вы б лучше файлик плана выложили.
22 апр 14, 13:54    [15915880]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Да что то он сюда не аттачится, потому что 270 кб

В тексте выложить?
22 апр 14, 14:15    [15916037]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
SomewhereSomehow
Member

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

ZIP?
22 апр 14, 14:16    [15916048]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Вот, тут тестовый прогон на большом кол-ве данных (замерял быстродействие)
Но в пром. эксплуатации картина примерно такая же.

К сообщению приложен файл (SqlPlan.rar - 9Kb) cкачать
22 апр 14, 14:24    [15916125]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
SomewhereSomehow
Member

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

Касательно TOP у вас там хотя и
Estimated Number Of Rows = 1, но
Estimated Number Of Executions = 100 000.
Если оператор находится на внутренней стороне соединения вложенными циклами (а почти везде, кроме первого, так и есть), то нужно умножить одно на другое, чтобы получить оценку. Скачайте бесплатный Plan Explorer, он показывает уже перемноженные значения.

У вас там в других местах есть расхождения оценок с реальностью, опять же Plan Explorer это может удобнее показать, на вкладке Top Operators например (если что я не работаю в SQLSentry=)).

Вообще, я насчитал 32 джойна, иногда серверу сильно плохеет, если очень много джойнов. Если есть проблемы, я бы на вашем месте, начал с упрощения запроса, разбиения на несколько логических кусков и помещения их во временные таблицы, для последующей работы.

Если все ок и проблем нет, а вопрос был чисто из интереса, то TOP не выглядит источником проблем, на первый взгляд.
На всякий случай, можете проверить документированный трейс флаг 4138 A query may take a long time to run if the query optimizer uses the Top operator in SQL Server 2008 R2 or in SQL Server 2012, не станет ли лучше, т.к. влияние ТОР все же оказывает, хотя не похоже чтоб это было проблемой. Еще немного инфы по тор писал тут.
22 апр 14, 14:46    [15916336]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
>32 джойна
Особенности архитектуры и идеологии. Просто там куча табличных функций, которые опираются на другие табличные функции и/или вьюхи.

Хотя сам запрос: селект топ 100000 * фром вьюха аутер аплай табличная функция вере вьюха.тип = 12354
22 апр 14, 14:55    [15916420]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
В таком случае используйте руководство планов запросов с шаблоном.
Как раз для этого случая.
22 апр 14, 15:45    [15916962]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
"В таком случае используйте руководство планов запросов с шаблоном."
Ничего не понял.
22 апр 14, 15:57    [15917101]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Cammomile
"В таком случае используйте руководство планов запросов с шаблоном."
Ничего не понял.

руководство планов запросов с шаблоном == plan guides
22 апр 14, 16:01    [15917145]     Ответить | Цитировать Сообщить модератору
 Re: Общий вопрос про оптимизацию запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
sp_create_plan_guide , смотрите примеры с @template.
Использование руководство планов позволяет не тратить время на разбор и компиляцию однотипных запросов с несколькими параметрами, которые задаются константами.
Это особенно полезно при большом количестве джойнов и "одноразовых" запросах.
22 апр 14, 16:16    [15917286]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить