Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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+ имеет возможность выполнять онлайн-реорганизации индекса и автономные полные перестройки.