Можливо запустити дві команди DBCC INDEXDEFRAG одночасно, кожна в іншій таблиці?


9

В даний час я запускаю скрипт, який виконує DBCC INDEXDEFRAG для кожної таблиці в базі даних SQL Server 2005, по одній таблиці за раз. Використання DBCC DBREINDEX замість INDEXDEFRAG не є можливим через обмеження місця та вимоги до часу роботи.

Я помітив, що дефрагментація деяких таблиць потребує тривалого часу. Наприклад, якщо я вивчаю динамічне подання управління "sys.dm_exec_requests", я можу побачити, що наступний INDEXDEFRAG в даний час відбивається на кластерному індексі таблиці, що має table_id 829610394:

DBCC INDEXDEFRAG (0, 829610394, 1)

Я знаю, що процес дефрагментації закінчиться довгий час. Залишаючи осторонь той факт, що сценарій, що працює в даний час, врешті-решт дефрагментує всі таблиці, чи є в мене шкода вручну запускати інший DBCC INDEXDEFRAG на кластерному індексі іншої таблиці, поки виконується поточна команда? Чи дійсно обидві таблиці будуть дефрагментовані одночасно, якщо я це зробити?

Відповіді:


15

Так, ви можете зробити це для кількох таблиць. Ви не можете зробити це для кількох індексів однієї таблиці - я винайшов новий субресурс блокування індексів, щоб запобігти цьому. Така ж поведінка в ALTER INDEX ... РЕОРГАНІЗУЙТЕ, що я замінив її в 2005 році.

Дякую


2
Ви не можете отримати більш точну відповідь, ніж людина, яка її написала! Не забувайте про навантаження вводу-виводу, пов’язане з одночасним виконанням декількох перебудов або повторних команд, і обов'язково використовуйте ALTER INDEX, а не команду DBCC, що рухається вперед.
AndrewSQL

Погоджено, я не знаю, як можна було б отримати більш точну відповідь на це конкретне питання, ніж прямо з Пола Рандала. Спасибі Пол.
Невгамовний Майк

6

Зауважте, що DBCC INDEXDEFRAG & DBREINDEX застаріли і замінені ALTER INDEX:

Важливо

Ця функція буде видалена в майбутній версії Microsoft SQL Server. Не використовуйте цю функцію в нових роботах з розробки та змінюйте додатки, які наразі використовують цю функцію якомога швидше. Використовуйте натомість ALTER INDEX. - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

Що стосується запуску двох одночасно, це залежить від вашого макета файлу. Якщо вони всі на одному диску (дисках), ви, швидше за все, сповільнюватимете кожного, оскільки вони б'ються один проти одного за введення / виведення. Вам буде найкраще використовувати лише REORG або REBUILD, коли це необхідно. Ознайомтеся зі сценарієм Мішель Уффорд тут для автоматизованого рішення: http://sqlfool.com/2010/04/index-defrag-script-v4-0/


Дякую Еріку. У цьому конкретному випадку база даних поширюється на декілька файлів даних, на різних розділах та поверх IBM DS8300 SAN. Тому я думаю, що я буду добре, наскільки йде.
Невгамовний Майк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.