Все версии SQL Server автоматически перестраивают индексы или имеют критерии перестройки по умолчанию?

Все версии SQL Server автоматически перестраивают индексы или имеют критерии перестройки по умолчанию? Я понимаю, что статистика автоматически перестраивается, но не уверен, что индексы также работают.

Ответы

Ответ 1

Восстановление индексов не поддерживается автоматически в любой версии Microsoft SQL Server - причина в том, что перестроение индексов может быть очень дорогостоящим операциям, поэтому необходимо тщательно планировать и планировать.

Во многих средах для его обработки будут записаны специальные скрипты, например:

http://weblogs.sqlteam.com/tarad/archive/2008/09/03/Defragmenting-Indexes-in-SQL-Server-2005.aspx

Обратите внимание, что в то время как SQL может автоматически обновлять статистику для вас, во многих случаях наблюдается усиление производительности, а также более эффективное управление ими.

Ответ 2

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

Вот простой запрос для проверки фрагментации существующих индексов:

DECLARE @DBNAME VARCHAR(130);
SET @DBNAME = 'MYDBNAME';

DECLARE @DBID INT;
SET @DBID = DB_ID(@DBNAME);

SELECT
OBJECT_ID AS objectID
, index_id AS indexID
, avg_fragmentation_in_percent AS fragmentation
, page_count 
INTO #indexDefragList
FROM
sys.dm_db_index_physical_stats 
(@DBID, NULL, NULL , NULL, N'Limited')
WHERE
index_id > 0
OPTION (MaxDop 1);

SELECT
i.[name] as indexname,
d.fragmentation,
d.page_count
FROM
#indexDefragList d
INNER JOIN sys.indexes i
ON d.objectid = i.object_id
ORDER BY 
d.fragmentation DESC

DROP TABLE #indexDefragList

Это вернет список всех индексов в вашей текущей БД с их фрагментацией в%.

Вы можете легко создать script для автоматической перестройки или реорганизации. Существует отличная статья от SQLFool по этому вопросу, включая полный готовый script.

Ответ 3

Чтобы расширить то, что сказал Крис:

Что касается статистики, то столбцы, не охваченные индексом, не будут обновлять свою статистику, перестраивая все индексы. Они могут периодически обновляться SQL Server, однако вам может понадобиться сделать это самостоятельно с помощью инструкции UPDATE STATISTICS.

SQL Server 2005 определяет, следует ли автоматически обновлять статистику на основе изменений в счетчиках модификации столбцов (colmodctrs).

Объект статистики считается устаревшим в следующих случаях:

1. Размер таблицы изменился с 0 нa > 0 строк.

2. Количество строк в таблице, когда были собраны статистические данные, составляло 500 или менее, а из-за того, что colmodctr ведущего столбца объекта статистики изменился более чем на 500.

3. В таблице было собрано более 500 строк, когда статистика была собрана, а колмодктр главного столбца объекта статистики изменился более чем на 500 + 20% от количества строк в таблице, когда статистика была собрались

Вы можете найти следующую ссылку относительно статистики использования:

http://blogs.technet.com/rob/archive/2008/05/16/sql-server-statistics.aspx

Надеюсь, что это поможет, но не стесняйтесь задавать дополнительные вопросы.

Приветствия, Джон

Ответ 4

Это должно быть расписание и упорядочено.

При сортировке это зависит от размера ваших таблиц и окна обслуживания.

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

Для быстрого исправления, предполагая хорошее длинное окно обслуживания и не слишком большое (до нескольких 100 ГБ), просто заплатите это:

EXEC sp_msforeachtable 'SET QUOTED_IDENTIFIER ON ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 90)'

Изменить: только для > SQL 2005 этот SQL

Ответ 5

Как заметил @Chris, индексы не перестраиваются автоматически в любой версии SQL Server. Надлежащее обслуживание индексов часто отсутствует на сайтах без отдельной роли DBA, и часто, когда базы данных просто перемещаются из разработки в производство (наряду с обслуживанием журнала транзакций).

SQL Server 2005+ имеет возможность выполнять онлайн-реорганизации индекса и автономные полные перестройки.