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

Откуда: Moscow
Сообщений: 610
Доброго времени суток!

СУБД: Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Такая ситуация, есть процедура А:
при рассмотрении был создан индекс который уменьшил число IO по таблице(table1), которую использует процедура, в ней был явно прописан новый индекс.

Далее при мониторинге БД были выявлены часто играющие процедуры B и С:

эти процедуры так же выбирают данные из table1 в них не использовались хинты (index =)
При запуске процедур (exec B) B и C по плану увидел что они подхватили новый индекс и используют его.

Вопрос:
Я раньше думал что процедура при создании запоминает план с которым она была создана и используют его в дальнейшем. Те же индексы которые она выбрала при создании или изменении процедуры используются пока она не будет изменена. На практике оказалась не так, т.е при каждом выполнении процедуры заново происходит компиляция?
24 май 12, 11:25    [12606534]     Ответить | Цитировать Сообщить модератору
 Re: Рекомпиляция процедур  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
я бы для начала апдейтнулся до билда 9.0.5057 хотя бы
24 май 12, 11:27    [12606556]     Ответить | Цитировать Сообщить модератору
 Re: Рекомпиляция процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
andrew shalaev
На практике оказалась не так, т.е при каждом выполнении процедуры заново происходит компиляция?

Вы это в Профайлере увидели ?
24 май 12, 11:27    [12606561]     Ответить | Цитировать Сообщить модератору
 Re: Рекомпиляция процедур  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
andrew shalaev
Вопрос:
Я раньше думал что процедура при создании запоминает план с которым она была создана и используют его в дальнейшем. Те же индексы которые она выбрала при создании или изменении процедуры используются пока она не будет изменена. На практике оказалась не так, т.е при каждом выполнении процедуры заново происходит компиляция?
Когда происходит рекомпиляция, написано английским по белому в хелпе:

Execution Plan Caching and Reuse ( ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_0evalplan/html/3d3ea8fc-fb57-4e06-8d47-3b074c1bc0b8.htm )
Certain changes in a database can cause an execution plan to be either inefficient or invalid, based on the new state of the database. SQL Server detects the changes that invalidate an execution plan and marks the plan as not valid. A new plan must then be recompiled for the next connection that executes the query. The conditions that invalidate a plan include the following:

  • Changes made to a table or view referenced by the query (ALTER TABLE and ALTER VIEW).
  • Changes to any indexes used by the execution plan.
  • Updates on statistics used by the execution plan, generated either explicitly from a statement, such as UPDATE STATISTICS, or generated automatically.
  • Dropping an index used by the execution plan.
  • An explicit call to sp_recompile.
  • Large numbers of changes to keys (generated by INSERT or DELETE statements from other users that modify a table referenced by the query).
  • For tables with triggers, if the number of rows in the inserted or deleted tables grows significantly.
  • Executing a stored procedure using the WITH RECOMPILE option.
  • 24 май 12, 11:29    [12606587]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    andrew shalaev
    Member

    Откуда: Moscow
    Сообщений: 610
    Glory
    Вы это в Профайлере увидели ?


    я посмотрел план при
    exec B
    

    в этом плане процедура стала использовать новый индекс, разве это не перекомпиляция?
    24 май 12, 11:34    [12606638]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    andrew shalaev
    в этом плане процедура стала использовать новый индекс, разве это не перекомпиляция?

    рекомпиляция - это соответствующее событие в Профайлере. С объяснением причины\
    Кроме рекомпиляции существует просто вытеснение планов
    Потому что память не резиновая

    Сообщение было отредактировано: 24 май 12, 11:36
    24 май 12, 11:35    [12606655]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    andrew shalaev
    Member

    Откуда: Moscow
    Сообщений: 610
    Т.е. в моем случае причиной использования нового индекса могло стать:

    Гавриленко Сергей Алексеевич
    1. Updates on statistics used by the execution plan, generated either explicitly from a statement, such as UPDATE STATISTICS, or generated automatically.

    2. Large numbers of changes to keys (generated by INSERT or DELETE statements from other users that modify a table referenced by the query).


    Статистика по таблице обновляется 3 раза в день

    Изменения в таблице происходят достаточно часто

    Glory
    вытеснение планов
    Потому что память не резиновая
    24 май 12, 11:47    [12606813]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    andrew shalaev
    Т.е. в моем случае причиной использования нового индекса могло стать:

    Чего проще то запустить Профайлер и узнать причину ?
    24 май 12, 11:50    [12606861]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    Winnipuh
    Member [заблокирован]

    Откуда: Київ
    Сообщений: 10428
    Glory
    andrew shalaev
    Т.е. в моем случае причиной использования нового индекса могло стать:

    Чего проще то запустить Профайлер и узнать причину ?


    если есть профайлер, может у него экспресс
    24 май 12, 11:58    [12606963]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда:
    Сообщений: 37254
    Winnipuh
    Glory
    пропущено...

    Чего проще то запустить Профайлер и узнать причину ?


    если есть профайлер, может у него экспресс

    СУБД: Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
    24 май 12, 12:01    [12606995]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    Winnipuh
    Member [заблокирован]

    Откуда: Київ
    Сообщений: 10428
    Гавриленко Сергей Алексеевич
    Winnipuh
    пропущено...


    если есть профайлер, может у него экспресс

    СУБД: Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)


    да, извините
    24 май 12, 12:02    [12607005]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    andrew shalaev
    Member

    Откуда: Moscow
    Сообщений: 610
    Glory
    Чего проще то запустить Профайлер и узнать причину ?
    .

    В каком столбце будет указана причина рекомпиляции?

    К сообщению приложен файл. Размер - 22Kb
    24 май 12, 12:05    [12607055]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    Baddy
    Member

    Откуда: Харьков
    Сообщений: 174
    andrew shalaev,

    EventSubClass
    24 май 12, 12:20    [12607222]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    andrew shalaev
    Member

    Откуда: Moscow
    Сообщений: 610
    Baddy,

    Спасибо!

    В будущем буду смотреть по профайлеру, надеюсь наличие этого события Recompile не сильно повышает нагрузку на БД
    24 май 12, 12:23    [12607259]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    step_ks
    Member

    Откуда:
    Сообщений: 936
    добавьте еще SQL:StmtRecompile
    24 май 12, 12:45    [12607486]     Ответить | Цитировать Сообщить модератору
     Re: Рекомпиляция процедур  [new]
    Slava_Nik
    Member

    Откуда: из России
    Сообщений: 901
    andrew shalaev
    Baddy,

    Спасибо!

    В будущем буду смотреть по профайлеру, надеюсь наличие этого события Recompile не сильно повышает нагрузку на БД


    частое наличие этого событи вообще-то отрицательно отражается, частое recjmpile нужно анализировать, почему не использовался прошлый план.
    24 май 12, 12:50    [12607537]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить