none
Обновление статистики RRS feed

  • Вопрос

  • Для программ работающих на SQL (в частности 1С) рекомендовано принудительное проведение обновления статистики хотя бы раз в сутки. При этом AUTO_UPDATE_STATISTICS установлен.

    Можно пояснить для чего дополнительное обновление статистики, в случае если автоматическое обновление статистики включено?

    1 июня 2014 г. 10:23

Ответы

  • Если этот параметр выставлен то sql может не только обновлять, но и создавать статистики. Сам он обновляет при достижение определённого порога изменения данных (20%), если не обновлять оптимизатор может "ошибаться". В одной из баз я видел как оптимизатор не использовал не кластерный индекс, а после обновления статистик всё на место встало.

    По поводу каждодневного обновления это перебор, если у вас очень интенсивные изменения то да. По идее нужно выявить по каким данным происходят изменения и по ним  обновлять. Если время позволяет я  раз в неделю с full scan эту операцию делаю.


    MCITP:EA. MCSA. MCTS:Exchange Configuring

    1 июня 2014 г. 13:56
  • Добрый день. 

    Автоматическое обновление статистики работает по следующему алгоритму: 

    • Если количество элементов в таблице до 6 и таблицы в базе данных tempdb, автоматическое обновление каждые шесть изменений в таблицу.
    • Если количество элементов в таблице больше 6, но меньше чем или равно 500 обновлять состояние каждые 500 модификаций.
    • Если количество элементов для таблицы превышает 500, обновление статистики при (500 + 20 процентов таблицы) произошли изменения.
    • Для табличных переменных изменения мощности не вызывает автоматическое обновление статистики.

    http://support.microsoft.com/kb/195565/ru

    В определенных случаях этого может оказаться недостаточно для того чтобы MS SQL Server корректно строил самый оптимальный план исполнения запросов. В таком случае могут проявляться проблемы с производительностью некоторых запросов. Для большинства таблиц применительно к базам 1С более всего соответствует второй из указанных алгоритмов. Автообновление в данном случае срабатывает каждые 500 изменений, что недостаточно для правильного построения плана выполнения данных запросов. Если у вас интенсивно изменяются данные в таблицах 1С, количество элементов в которых больше 6, но меньше чем или равно 500, SQL Server будет ждать пока количество таких модификаций или изменений достигнет 500, и только после этого сработает автообновление статистики для данной таблицы. Третий алгоритм работает по тому же принципу. В таком случае дополнительное принудительное обновление статистики раз в сутки в нерабочее время (так как операция эта создает дополнительную нагрузку на сервер) необходимо проводить для корректной работы вашего сервера. 

    Кроме того, существует специальная системная процедура, которая будет обновлять только ту статистику, которая требует обновления, тем самым предотвращая ненужные обновления статистики по неизмененным строкам: sp_updatestats. Чтобы использовать эту процедуру для конкретной базы данных нужно выполнить следующий скрипт:

    USE [БазаДанных];

    GO

    EXEC sp_updatestats



    1 июня 2014 г. 14:42

Все ответы

  • Если этот параметр выставлен то sql может не только обновлять, но и создавать статистики. Сам он обновляет при достижение определённого порога изменения данных (20%), если не обновлять оптимизатор может "ошибаться". В одной из баз я видел как оптимизатор не использовал не кластерный индекс, а после обновления статистик всё на место встало.

    По поводу каждодневного обновления это перебор, если у вас очень интенсивные изменения то да. По идее нужно выявить по каким данным происходят изменения и по ним  обновлять. Если время позволяет я  раз в неделю с full scan эту операцию делаю.


    MCITP:EA. MCSA. MCTS:Exchange Configuring

    1 июня 2014 г. 13:56
  • Добрый день. 

    Автоматическое обновление статистики работает по следующему алгоритму: 

    • Если количество элементов в таблице до 6 и таблицы в базе данных tempdb, автоматическое обновление каждые шесть изменений в таблицу.
    • Если количество элементов в таблице больше 6, но меньше чем или равно 500 обновлять состояние каждые 500 модификаций.
    • Если количество элементов для таблицы превышает 500, обновление статистики при (500 + 20 процентов таблицы) произошли изменения.
    • Для табличных переменных изменения мощности не вызывает автоматическое обновление статистики.

    http://support.microsoft.com/kb/195565/ru

    В определенных случаях этого может оказаться недостаточно для того чтобы MS SQL Server корректно строил самый оптимальный план исполнения запросов. В таком случае могут проявляться проблемы с производительностью некоторых запросов. Для большинства таблиц применительно к базам 1С более всего соответствует второй из указанных алгоритмов. Автообновление в данном случае срабатывает каждые 500 изменений, что недостаточно для правильного построения плана выполнения данных запросов. Если у вас интенсивно изменяются данные в таблицах 1С, количество элементов в которых больше 6, но меньше чем или равно 500, SQL Server будет ждать пока количество таких модификаций или изменений достигнет 500, и только после этого сработает автообновление статистики для данной таблицы. Третий алгоритм работает по тому же принципу. В таком случае дополнительное принудительное обновление статистики раз в сутки в нерабочее время (так как операция эта создает дополнительную нагрузку на сервер) необходимо проводить для корректной работы вашего сервера. 

    Кроме того, существует специальная системная процедура, которая будет обновлять только ту статистику, которая требует обновления, тем самым предотвращая ненужные обновления статистики по неизмененным строкам: sp_updatestats. Чтобы использовать эту процедуру для конкретной базы данных нужно выполнить следующий скрипт:

    USE [БазаДанных];

    GO

    EXEC sp_updatestats



    1 июня 2014 г. 14:42