Обслуживание статистические функции (автоматическая) в SQL Server

Переводы статьи Переводы статьи
Код статьи: 195565 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Функциональные возможности новых представленных статистического обслуживания, AutoStat, может создавать ненужные издержки в производственной системе, выполнив одно из следующие действия:
  • Инициализация статистических обновлений в периоды высокой производства.

    - или -
  • Инициализация слишком большое число процессов обновление СТАТИСТИКИ в заданный момент времени.
Эта статья предназначена для подробно описаны условия, при которых вы можете ожидать, что автоматическая создается и выполняется для обновления СТАТИСТИКИ таблицы в базе данных.

Сведения о автоматическая в SQL Server 2000 содержатся в разделе «Статистика используется оптимизатором запросов в Microsoft SQL Server 2000» на веб-узле MSDN:
http://msdn2.Microsoft.com/en-us/library/aa902688 (SQL.80) .aspx


Примечание При использовании Microsoft SQL Server 2005, см. в следующем техническом документе сведения об использовании статистики оптимизатором запросов в SQL Server 2005:
http://TechNet.Microsoft.com/en-us/library/cc966419.aspx

Дополнительная информация

Общие сведения

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

В каждой таблице SQL Server, помогают оптимизатору статистики в основе стоимости решений относятся:
  • Количество строк в таблице.
  • Количество страниц, используемых в таблице.
  • Номер изменения, сделанные с момента последнего обновления статистики ключей таблицы.
Дополнительная информация хранится для индексов, включая (для каждого индекса):
  • Гистограмма уравнивающие высоты, в первом столбце.
  • Плотности на все префиксы столбцов.
  • Средняя длина ключа.
Всякий раз, когда новый индекс автоматически создается статистика индексов построение. Кроме того он теперь имеется возможность создания и ведения статистики по а также других столбцов.

Чтобы сохранить статистическую информацию, как современные способом как Возможно, SQL Server представляет AutoStat, который по SQL Server мониторинг изменений таблицы возможностью автоматического обновления статистические данные для таблицы, после достижения определенного порога изменений. Кроме того, SQL Server представляет Авто создать статистика, которая заставляет сервер автоматически генерировать все статистические данные, необходимые для точной оптимизации конкретного запроса.

Определить когда приближается поколение AutoStat

Как упоминалось выше, AutoStat будет автоматически обновлять статистику достижение определенной таблицы, когда «изменить пороговое значение». В столбец sysindexes.rowmodctr содержит текущее общее все изменения в таблице, со временем может неблагоприятно повлиять на обработчик запросов Создание процесса принятия решений. Этот счетчик обновляется каждый раз любой из имеет место следующие события:
  • Сделанные вставки одной строки.
  • Выполняется удаление одной строки.
  • Выполняется обновление индексированного столбца.
ПРИМЕЧАНИЕ: УСЕЧЕНИЯ таблицы не изменяет rowmodctr.

После обновления статистики таблиц rowmodctr значение сбрасывается в 0 и обновить версию схемы таблицы статистики.

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

Это основной алгоритм Автоматическое обновление статистики:
  • Если количество элементов в таблице 6 и таблицы в базе данных tempdb, автоматическое обновление каждые шесть изменений в таблицу.
  • Если количество элементов в таблице больше 6, но меньше чем или равно 500 статус обновления каждые 500 модификаций.
  • Если количество элементов для таблицы больше 500, обновление статистики при (500 + 20 процентов таблицы) произошли изменения.
  • Для табличных переменных изменения мощности не запускают автоматическое обновление статистики.
ПРИМЕЧАНИЕ: В этом наиболее строгом смысле SQL Server подсчитывает количество элементов, как количество строк в таблице.

ПРИМЕЧАНИЕ: Избирательность предикатов В дополнение к мощности, также применяется автоматическая генерация. Это означает, что статистика может быть обновленный afer каждые 500 изменений, если мощность были < 500="" or="" for="" every="" 20%="" of="" changes="" if="" cardinality="" were=""> 500. Масштабирование до коэффициент (значения в диапазоне от 1 до 4, 1 и 4 включительно) формируется в зависимости от избирательность и произведение этот фактор и число изменений, полученное из алгоритма бы фактическое число изменений, необходимых для формирования автоматическая.

Выше алгоритма можно summarised в виде таблицы:
_________________________________________________________________________________
 Table Type | Empty Condition | Threshold When Empty |Threshold When Not Empty 
_________________________________________________________________________________
 Permanent  | < 500 rows      | # of Changes >= 500  | # of Changes >= 500 + (20% of Cardinality)
___________________________________________________________________________
 Temporary  | < 6 rows        | # of Changes >= 6    | # of Changes >= 500 + (20% of Cardinality)
___________________________________________________________________________
Table
Variables   | Change in cardinality does not affect AutoStats generation.
___________________________________________________________________________
Ниже приведены два примера демонстрируют эту концепцию.

Пример 1.

Рассмотрим таблицу authors в базе данных pubs, который содержит строки, 23 и у двух индексов. Уникальный кластеризованный индекс UPKCL_auidind, индексируется на был один столбец au_id и составной некластеризованный индекс aunmind, создать для столбцов Фамилия_автора и au_fname. Поскольку эта таблица содержит менее 500 строк AutoStat начнется после 500 изменения в таблицу произошло данных. Изменения могут быть одним из 500 или более операций вставки, удаления, Изменение индексированного столбца например Фамилия_автора или их комбинации.

Можно таким образом, прогнозировать, когда инициировано обновление СТАТИСТИКИ Наблюдение за значение sysindexes.rowmodctr, который увеличивается при Каждое обновление. Когда он достигает или превышает 500, можно ожидать, что обновление СТАТИСТИКА для запуска.

Пример 2.

Рассмотрим второй таблицы t2, который имеет количество элементов, равное 1000. Для таблиц с более чем 500 строк, SQL Server будет обновление СТАТИСТИКИ при (500 + 20 процентов) были внесены изменения. Математических, 20 процентов от 1000 – 200, так что можно ожидать увидеть запуск после приблизительно 700 AutoStat изменения были внесены в таблицу.

Автоматизация определение автоматическая

Для автоматизации при выполнении AutoStat определение опроса таблицы sysindexes и определения момента достижения изменения таблиц отправной точкой. Ниже приведен основной алгоритм для этого.
   if (sysindexes.rows > 500)
      if (sysindexes.rows * 0.20 >= sysindexes.rowmodctr && production
      hours) //500 change leeway
         begin
            disable autostats
            log autostats disable
         end
      else
         begin
            stats ok
         end
   else
      if (sysindexes.rowmodctr >= 425) //75 change leeway
         begin
            disable autostats
            log autostats disable
         end
				

Позже может запланировать задание сделать следующее:
  • Запустите инструкцию UPDATE STATISTICS для всех таблиц, для которых были принудительно отключить их в течение дня.

    - и -
  • Повторное включение AutoStat, так как счетчик изменения каждой таблицы будут перенастроены на 0 при выполнении инструкции UPDATE STATISTICS.

Управление, выполняются ли обновление СТАТИСТИКИ для таблицы

Наиболее очевидным решением на этот вопрос, когда оказалось успешной AutoStat Problematic, является отключение автоматического создания статистики, тем самым оставляя Чтобы запланировать обновление СТАТИСТИКИ во время меньше свободного администраторов баз данных время вмешательства в систему. Это можно сделать с помощью обновления СТАТИСТИКИ оператор или sp_autostats хранимой процедуры. Синтаксис для обновления СТАТИСТИКА оператора является:
   UPDATE STATISTICS <table>...with NORECOMPUTE
				

Для sp_autostats хранимой процедуры используется синтаксис:
sp_autostats <table_name>, <stats_flag>, <index_name> </index_name></stats_flag></table_name>
где <stats_flag> является «on» или «off». </stats_flag>

Можно также использовать процедуры sp_dboption для отключения автоматического вхождения обновления СТАТИСТИКА или создать СТАТИСТИКУ на уровне каждой базы данных:
процедуры sp_dboption <dbname>, «автоматическое обновление статистики», <on |="" off=""> <b00></b00></on></dbname>

- или -

процедуры sp_dboption <dbname>, «автоматическое создание статистики», <on |="" off=""> </on></dbname>

Контролирует количество параллельных процессов обновления СТАТИСТИКИ

В настоящее время полнообъемное отключение AutoStat для отдельных таблиц, это не можно настроить количество инструкций автоматическое обновление СТАТИСТИКИ которые выполняются параллельно (DCR 51539 были зафиксированы для этого). В сервер тем не менее, ограничить число одновременных обновление СТАТИСТИКИ процессы четырех на каждый процессор.

Определение при запуске автоматическая

С помощью флага трассировки 205 для отчета при сохранении зависящих от статистики процедура перекомпилируется из-за AutoStat. Этот флаг трассировки будет записывать в журнал ошибки следующие сообщения:
выданный Recompile spid9 11:10:51.98 1998-10-15: ProcName: sp_helpindex
LineNo: 75 StmtNo: 29
При включении флага трассировки 205 следующее сообщение будет также квадратная скобка AutoStat сообщения из 8721 при обновлении статистики. Открытие сообщение кронштейна можно отличить по значению RowModCnt, который должно быть больше 0. Закрывающая скобка после обновление СТАТИСТИКИ будет иметь RowModCnt значение 0:
Изменение схемы spid8 11:38:43.68 1998-10-15: Tbl Dbid: 7 Objid:
133575514 RowModCnt: 60500 RowModLimit: 60499
Для этого сообщения «rowmodcnt» — общее количество изменений Таблица. «rowmodlimit» — это пороговое значение, при превышении, приводит к Выполнения инструкции UPDATE STATISTICS для таблицы.

Также можно включить флаг трассировки 8721, который будет дамп сведений в журнал ошибок при выполнении AutoStat. В следующем Пример типа сообщений, которые можно ожидать:
16:22:13.21 1998-10-14 АВТОМАТИЧЕСКАЯ spid13: обновление Tbl: [авторы]
Строки: 23 режимы: 501 граница: 500 длительность: 47ms UpdCount: 2
Для этого сообщения «Режимы» — общее количество изменений в таблице. «Связанный» является изменения порогового значения, «Длительность» — это количество времени необходимые для выполнения инструкции UPDATE STATISTICS и «updcount» — Это количество обновленной статистики.

Приложение SQL Server Profiler можно также использовать для определения, когда обновление СТАТИСТИКИ При выполнении инструкции. Чтобы сделать это, выполните следующие действия:
  1. На Профилировщик меню, нажмите кнопку Сервис, а затем нажмите кнопку Параметры.
  2. На Общие Перейдите к вкладке События, а затем выберите Все классы событий.
  3. Определите новую трассировку и в группе События, выберите Разное, выберите Автоматическое обновление статистики Sub-Event.
Примечание: Если многие статистические данные обновляются, AutoStat, большого числа сообщения могут записываться в журнал ошибок. Тщательно экспериментировать с ним флаги трассировки перед их использованием любой продукции или в противном случае — критический сервер.

Блокировки схем

SQL Server использует два типа блокировок схем, оба из которых берутся При обновлении статистики для таблицы:
   Sch-S: Schema Stability Lock
   ----------------------------
   This lock ensures that a schema element, such as a table or index, will
   not be dropped while any session holds a schema stability lock on the
   schema element.

   Sch-M-UPD-STATS: Schema Modification Lock
   -----------------------------------------
   This is a non-blocking lock that is used by the system to ensure that
   only one automatic UPDATE STATISTICS process is run against a table at
   any given point in time. The sp_lock stored procedure will report this
   lock has having a type = TAB, resouce = UPD-STATS and mode = SCH-M.
				
Эти блокировки можно просмотреть, запустив sp_lock или выбрав из таблице syslockinfo.

Свойства

Код статьи: 195565 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
Ключевые слова: 
kbinfo kbmt KB195565 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:195565

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com