Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
Павел-П
Member

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

Подскажите, пжл такой вопрос.

SQL Server. Хранимая процедура. Первыми выражениями идет обновление статистие для определенных таблиц.
Обновленние статистик необходимо для построения корректного execution-плана.

Будет ли план последующего запроса (указанного после комманд обновления статистик) построен с учетом обновленных статистик?

Или обновление стасистик надо выносить за рамки хранимой процедуры и выполнять до выполнения хранимой процедуры.
21 янв 14, 19:18    [15448860]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Павел-П
Будет ли план последующего запроса (указанного после комманд обновления статистик) построен с учетом обновленных статистик?
Может быть да, а может быть и нет:
http://technet.microsoft.com/en-us/library/ms181055(v=sql.105).aspx
When the AUTO_UPDATE_STATISTICS database option is SET to ON, queries are recompiled when they target tables or indexed views whose statistics have been updated or whose cardinalities have changed significantly since the last execution. This behavior applies to standard user-defined tables, temporary tables, and the inserted and deleted tables created by DML triggers. If query performance is affected by excessive recompilations, consider changing this setting to OFF. When the AUTO_UPDATE_STATISTICS database option is SET to OFF, no recompilations occur based on statistics or cardinality changes, with the exception of the inserted and deleted tables that are created by DML INSTEAD OF triggers. Because these tables are created in tempdb, the recompilation of queries that access them depends on the setting of AUTO_UPDATE_STATISTICS in tempdb. Note that in SQL Server 2000, queries continue to recompile based on cardinality changes to the DML trigger inserted and deleted tables, even when this setting is OFF.

Так что просто добавьте к запросу option (recompile).
21 янв 14, 20:36    [15449191]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
Павел-П
Member

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

Собственно вопрос и есть в том, будет ли внутри хранимки перекомпилирован запрос, если вначале хранимки идут update statistics.
Ну и если не указывать опцию recompile.
21 янв 14, 20:47    [15449234]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Павел-П,

Вопрос чисто теоретический или имеется практическая сторона дела?
21 янв 14, 21:18    [15449302]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Павел-П
Собственно вопрос и есть в том, будет ли внутри хранимки перекомпилирован запрос, если вначале хранимки идут update statistics.
Собственно, ответ в приведенной цитате. Даже жирным выделено.
21 янв 14, 22:03    [15449482]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
Павел-П
Member

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

Вопрос практический.
Имеется БД с таблицами, куда заливаются данные каждый день.
Статистики не обновляютя автоматически. Из-за того, что статистики не обновляются - выбирается оптимизатором неправильный план (уходит в nested loop вместо hash join). Он думает, что в таблицах по одной строке.

Вот завтра узнаю, поможет ли обновление статистик.
21 янв 14, 23:58    [15449796]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
SomewhereSomehow
Member

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

Если колонка каким-либо образом обновлялась и вы принудительно обновили статистику, то запрос, использующий эту статистику, будет рекомпилирован. Не волнуйтесь.
22 янв 14, 00:06    [15449828]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. Execution plan of the stored procedure with update statistics statements  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Павел-П
NickAlex66,

Вопрос практический.
Имеется БД с таблицами, куда заливаются данные каждый день.
Статистики не обновляютя автоматически. Из-за того, что статистики не обновляются - выбирается оптимизатором неправильный план (уходит в nested loop вместо hash join). Он думает, что в таблицах по одной строке.

Вот завтра узнаю, поможет ли обновление статистик.


Я бы все же оставил авто обновление статистики, а на таблицах, после массового обновления данных, делал бы принудительное обновление статистики.
Узнать обновился ли план выполните запрос
SELECT
cp.*, st.text, qp.query_plan
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text (cp.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan (cp.plan_handle) qp
WHERE
st.text NOT LIKE '%sys.dm_exec_cached_plans%'
до обновления и после и сравните результат.
ЗЫ: > SQL2000
22 янв 14, 01:47    [15450130]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить