0

Я работал с SQL Server в качестве разработчика.Что именно сохраняется в статистике SQL Server? Когда они обновляются? Является ли сам SQL Server заботиться о них?

Я узнал, что SQL Server управляет статистикой, которая помогает двигателю создавать оптимизированный план выполнения.

Я не мог понять, что такое магазины в статистике? (Я читаю, что он сохраняет Вектор, но какой вектор?)

Когда/В каком сценарии SQL Server обновляет статистику?

Как/почему через некоторое время они выходят из синхронизации (старая статистика)

В случае старой статистики является ручное вмешательство DBA/разработчика требуется или SQL Server будет получить их обновление.

Как администратор базы данных/Разработчик, как узнать, если статистика OLD? Что нам делать?

ответ

4

Statistics в этом контексте относится к выборке, которую RDBMS принимает значения данного индекса. Грубо говоря, это дает двигателю представление о распределении ценностей и помогает ему планировать эффективные запросы. Вы можете увидеть фактическое содержимое набора статистики, используя DBCC SHOW_STATISTICS.

DBCC SHOW_STATISTICS (table_name, index_name) 

Статистика по индексу устаревают с течением времени, как данные в таблице - и, следовательно, распределение значений индекса - изменения. Это может привести к менее оптимальным планам выполнения запросов, поэтому вы должны стремиться к тому, чтобы статистика была актуальной.

Вы можете обновить статистику вручную или установить их для автоматического обновления с помощью команды T12 SQL UPDATE STATISTICS. От первой ссылке MSDN:

Когда опция автоматического обновления статистики, AUTO_UPDATE_STATISTICS, на оптимизатор запросов определяет, когда статистические данные могут быть устарелый, а затем обновляет их, когда они используются в запросе.

+0

1. Статистика не будет поддерживаться для таблицы без индекса? 2. Когда вставка/обновление происходит, SQL Server сам будет обновлять статистику? 3. Как DBA/Developer, как найти, устарела ли статистика? 4. Когда статистика обновляется, таблица становится заблокированной? – Pritesh

+1

@Pritesh 1. правильно, 2. правильно, если автообновление включено, 3. Я не уверен, но я думаю, Google может помочь вам в этом (например: http://www.sqlservercentral.com/blogs/glennberry/2010/08/30/how-old-are-your-database-statistics_3F00_ /) 4. вы можете обновлять статистику асинхронно, используя * AUTO_UPDATE_STATISTICS_ASYNC * – McGarnagle

1

Вы можете увидеть, если ваша статистика уточненный с:

select object_name(ind.object_id) as TableName 
,  ind.name as IndexName 
,  stats_date(ind.object_id, ind.index_id) as StatisticsDate 
FROM sys.indexes ind 
order by 
     stats_date(ind.object_id, ind.index_id) desc 
+0

Предположите, что значение stats_date (ind.object_id, ind.index_id) отстает на 4 часа, но как можем ли мы быть уверены, что необходимо обновлять статистику за последние 4 часа? – Pritesh

+0

Четыре часа в порядке, мы обновляем нашу статистику раз в неделю. Вам не нужно обновлять их чаще. – Andomar