В настоящее время я запускаю скрипт, который выполняет DBCC INDEXDEFRAG для каждой таблицы в базе данных SQL Server 2005, по одной таблице за раз. Использование DBCC DBREINDEX вместо INDEXDEFRAG не вариант из-за ограниченного пространства и требований по времени безотказной работы.
Я заметил, что для дефрагментации определенных таблиц требуется много времени. Например, если я изучу динамическое административное представление «sys.dm_exec_requests», то увижу, что следующий INDEXDEFRAG в настоящее время обрабатывает кластеризованный индекс таблицы, у которой table_id равен 829610394:
DBCC INDEXDEFRAG (0, 829610394, 1)
Я знаю, что пройдет много времени, прежде чем процесс дефрагментации завершится. Если оставить в стороне тот факт, что выполняемый в настоящее время сценарий в конечном итоге дефрагментирует все таблицы, есть ли у меня какая-либо опасность, если я буду вручную запускать другой DBCC INDEXDEFRAG для кластеризованного индекса другой таблицы во время выполнения текущей команды? Будут ли обе таблицы одновременно дефрагментированы, если я это сделаю?
источник
Обратите внимание, что DBCC INDEXDEFRAG и DBREINDEX устарели и заменены ALTER INDEX:
Что касается запуска двух одновременно, это зависит от вашего формата файла. Если они все находятся на одном и том же диске (дисках), вы, скорее всего, замедлите их, поскольку они будут сражаться друг с другом за ввод-вывод. Вы бы лучше только REORG или REBUILD, когда это необходимо. Проверьте сценарий Мишель Аффорд здесь для автоматического решения: http://sqlfool.com/2010/04/index-defrag-script-v4-0/
источник