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

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

Интересует общий вопрос:
Всегда ли оптимизатор будет выбирать план запроса основываясь на минимальных значениях phisical/logical reads & cpu time. Если нет, то в каких случаях?

Есть ли в MSSQL возможность как в Оракле подкручивать оптимизатор меняя его приоритеты с минимизации затрат ресурсов на минимизацию response time?

SQL Server 2008 R2
31 авг 15, 19:46    [18092857]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях оптимизатор может выбрать более дорогой execution plan?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Barry Lindon
Если нет, то в каких случаях?

Оптимизатор выбирает лучший план из тех вариантов, которые он успеет перебрать. А не вообще из всех теоритически возможных
31 авг 15, 20:03    [18092912]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях оптимизатор может выбрать более дорогой execution plan?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Barry Lindon
Есть ли в MSSQL возможность как в Оракле подкручивать оптимизатор меняя его приоритеты с минимизации затрат ресурсов на минимизацию response time?

OPTION (FAST = n)
https://msdn.microsoft.com/en-us/library/ms181714.aspx
Specifies that the query is optimized for fast retrieval of the first number_rows. This is a nonnegative integer. After the first number_rows are returned, the query continues execution and produces its full result set.
31 авг 15, 22:51    [18093346]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях оптимизатор может выбрать более дорогой execution plan?  [new]
gandjustas
Member

Откуда:
Сообщений: 857
Блог
Barry Lindon
Добрый день,

Интересует общий вопрос:
Всегда ли оптимизатор будет выбирать план запроса основываясь на минимальных значениях phisical/logical reads & cpu time. Если нет, то в каких случаях?

Есть ли в MSSQL возможность как в Оракле подкручивать оптимизатор меняя его приоритеты с минимизации затрат ресурсов на минимизацию response time?

SQL Server 2008 R2


Оптимизатор в SQL Server то что называется cost-based. Cost - сводная величина которая вычисляется по estimated величинам IO (разные величины для sequential и random), CPU, Memory. Оптимизатор не учитывает находятся ли страницы в памяти или нет, насколько загружен процессор и сколько памяти свободно. Также не берутся в расчет реальные скорости работы дисков. Вполне может оказаться, что план с минимальным cost окажется сильно медленнее далеко не идеального плана с точки зрения оптимизатора.

Кроме того вычисления cost сильно зависят от статистики на момент построения плана запроса. Например если неправильно будет оценен memory grant для hash join, то при выполнении будет использоваться временная таблица в tempdb (spill), что сильно замедлит запрос. В реальности статистика не всегда актуальна, при использовании функций оптимизатор не может оценить количество строк.

Кроме того - чем больше запрос, тем больше вариантов плана. Чтобы оптимизатор не работал слишком долго есть таймаут. Если в плане указан Reason for early termination = "Timeout", то вполне возможно что оптимизатор нашел не оптимальный план. Тогда поможет trace flag 2301. Он включает более сложные алгоритмы оптимизации и отключает таймаут. Это может сильно помочь сложным запросам. Подробнее - http://blogs.msdn.com/b/ianjo/archive/2006/04/24/582219.aspx
31 авг 15, 23:59    [18093496]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях оптимизатор может выбрать более дорогой execution plan?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
Barry Lindon
Добрый день,

Интересует общий вопрос:
Всегда ли оптимизатор будет выбирать план запроса основываясь на минимальных значениях phisical/logical reads & cpu time. Если нет, то в каких случаях?

Есть ли в MSSQL возможность как в Оракле подкручивать оптимизатор меняя его приоритеты с минимизации затрат ресурсов на минимизацию response time?

SQL Server 2008 R2

Оптимизатор ВСЕГДА выберет план с наименьшим костом из всех которые он успел придумать.
Естественно это НЕ ВСЕГДА будет самый оптимальный план.
1 сен 15, 08:59    [18093797]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях оптимизатор может выбрать более дорогой execution plan?  [new]
Barry Lindon
Member

Откуда:
Сообщений: 2
Большое спасибо за ответы и ссылки.
2 сен 15, 10:55    [18098763]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить