Дефрагментация индексов в ms sql #546696


#0 by askn
Вопрос по синтаксису как пишут в широко распространенной статье, для запуска процедуры следует выполнить запрос: sp_msforeachtable N'DBCC INDEXDEFRAG (<имя базы данных>, ''?'')' , подставив в него имя базы Вот об эту подстановку и спотыкаюсь ). писал с угловыми скобками и без - при запуске на выполнение вылезают сообщения о синтаксических ошибках нужно отметить, что сам ms sql server старый (2000). запрос запускаю через query analyser
#1 by ДенисЧ
sp_msforeachtable N'DBCC INDEXDEFRAG (WorkBase, ''?'')'
#2 by aleks-id
кнопка Я - первая ссылка
#3 by Aprobator
хм, а чем мастер планов обслуживания отключен что ли?
#4 by Aprobator
там кстати, через просмотр сценария можно будет и пример вытащить (речь про SQL менеджмент студио 2005 в частности).
#5 by упс
попорбуйте в квадратных скобках имя базы написать
#6 by askn
- не срабатывает так - у меня по кнопке Я ничего не открывается, поясните подробнее , - с мастером не разбирался - не срабатывает
#7 by ДенисЧ
А у меня срабатывает...
#8 by Axel2009
справа от темы топика есть кнопка Я. туда жмакнуть, откроется поиск
#9 by упс
ну тогда сообщение об ошибке полностью покажите. И скрипт полностью.
#10 by Lionee
sp какой стоит на sql 2000&
#11 by упс
а вы exec перед sp_msforeachtable пишете?
#12 by askn
например, выполняем sp_msforeachtable N'DBCC INDEXDEFRAG (ProtonDB, ''?'')' вылезает много вот таких повторяющихся сообщений Server: Msg 2583, Level 16, State 3, Line 1 An incorrect number of parameters was given to the DBCC statement.
#13 by askn
и с exec, и без него - результат один
#14 by МихаилМ
для мс скл > 2000 INDEXDEFRAG анахронизм читайте документацию
#15 by упс
хм.. в боле для sql server 2000 не написано, что если не указывать имя индекса - будет выполняться для всех индексов таблицы. Попробуйте пример Б отсюда:
#16 by askn
sp4
#17 by askn
кстати parse query ничего не находит
#18 by askn
сообщения об ошибке вылезают при run query
#19 by VladZ
Если не владеешь командами - потыкайся мышкой.
#20 by упс
вы попробовали другой скрипт? у вас проблема не в том, что вы имя базы неправильно пишете, а в том что dbcc indexdefrag в sql server 2000 требует трех параметров, а вы ей даете только два.
#21 by askn
пример Б вроде пошел тока бы базу не убил - я его совершенно по обезьяньи скопипастил )
#22 by askn
а что ж ему еще за параметр требуется?
#23 by упс
имя индекса еще хочет. А "старшие" версии (2005, 2008), если имя индекса не указано, дефрагментируют все индексы. Что, имхо, странно, поскольку начиная с 2005-го советуют отказываться от indexdefrag. Базу не убьете, но такие скрипты лучше запускать когда никто не работает. Может тупить.
#24 by askn
запрос из примера Б отработал выдал две таблички из трех колонок и одной строки во всех ячейках обеих таблиц 0
#25 by askn
спасибо за ликбез прокомментируйте , если не сложно
#26 by упс
Это значит, что в той базе данных, в контексте которой выполнялся запрос нет индексов с уровнем фрагментации больше 30% (параметр @maxfrag в скрипте). То что дал две таблички с нулями - скорее всего есть таблица, в которой нет ни одной строки, которую он почему-то решил дефрагментировать. Я уже не помню как там в QA, но скорее всего там так же как и в SSMS есть вкладка "Messages" рядом с результатом запроса - в ней можете посмотреть какую таблицу и какой индекс SQL Server пытался дефрагментировать. Перед использованием скрипта, дописывайте в начале USE [имя бд в которой надо дефрагментировать индексы].
#27 by askn
Большое спасибо за ответы и подробное разъяснение )
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С