![]() |
![]() |
![]() |
|
Дефрагментация индексов в ms sql | ☑ | ||
---|---|---|---|---|
0
askn
26.04.11
✎
14:10
|
Вопрос по синтаксису
как пишут в широко распространенной статье, для запуска процедуры следует выполнить запрос: sp_msforeachtable N'DBCC INDEXDEFRAG (<имя базы данных>, ''?'')' , подставив в него имя базы Вот об эту подстановку и спотыкаюсь ). писал с угловыми скобками и без - при запуске на выполнение вылезают сообщения о синтаксических ошибках нужно отметить, что сам ms sql server старый (2000). запрос запускаю через query analyser |
|||
1
ДенисЧ
26.04.11
✎
14:14
|
sp_msforeachtable N'DBCC INDEXDEFRAG (WorkBase, ''?'')'
|
|||
2
aleks-id
26.04.11
✎
14:15
|
кнопка Я - первая ссылка
|
|||
3
Aprobator
26.04.11
✎
14:29
|
(0) хм, а чем мастер планов обслуживания отключен что ли?
|
|||
4
Aprobator
26.04.11
✎
14:31
|
(3) там кстати, через просмотр сценария можно будет и пример вытащить (речь про SQL менеджмент студио 2005 в частности).
|
|||
5
упс
26.04.11
✎
14:31
|
(0) попорбуйте в квадратных скобках имя базы написать
|
|||
6
askn
26.04.11
✎
14:35
|
(1) - не срабатывает так
(2) - у меня по кнопке Я ничего не открывается, поясните подробнее (3), (4) - с мастером не разбирался (5) - не срабатывает |
|||
7
ДенисЧ
26.04.11
✎
14:35
|
(6) А у меня срабатывает...
|
|||
8
Axel2009
26.04.11
✎
14:36
|
(6) справа от темы топика есть кнопка Я. туда жмакнуть, откроется поиск
|
|||
9
упс
26.04.11
✎
14:38
|
(6) ну тогда сообщение об ошибке полностью покажите. И скрипт полностью.
|
|||
10
Lionee
26.04.11
✎
14:38
|
(0)sp какой стоит на sql 2000&
|
|||
11
упс
26.04.11
✎
14:39
|
(0) а вы exec перед sp_msforeachtable пишете?
|
|||
12
askn
26.04.11
✎
14:40
|
(9) например, выполняем
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
askn
26.04.11
✎
14:42
|
(11) и с exec, и без него - результат один
|
|||
14
МихаилМ
26.04.11
✎
14:46
|
для мс скл > 2000
INDEXDEFRAG анахронизм читайте документацию http://msdn.microsoft.com/ru-ru/library/ms177571.aspx |
|||
15
упс
26.04.11
✎
14:46
|
(13) хм.. в боле для sql server 2000 (http://msdn.microsoft.com/en-us/library/aa258286(v=sql.80).aspx ) не написано, что если не указывать имя индекса - будет выполняться для всех индексов таблицы. Попробуйте пример Б отсюда: http://msdn.microsoft.com/ru-ru/library/ms177571.aspx
|
|||
16
askn
26.04.11
✎
14:46
|
(10) sp4
|
|||
17
askn
26.04.11
✎
14:53
|
кстати parse query ничего не находит
|
|||
18
askn
26.04.11
✎
14:53
|
сообщения об ошибке вылезают при run query
|
|||
19
VladZ
26.04.11
✎
14:54
|
(0) Если не владеешь командами - потыкайся мышкой.
|
|||
20
упс
26.04.11
✎
14:56
|
(18) вы попробовали другой скрипт? у вас проблема не в том, что вы имя базы неправильно пишете, а в том что dbcc indexdefrag в sql server 2000 требует трех параметров, а вы ей даете только два.
|
|||
21
askn
26.04.11
✎
14:58
|
(20) пример Б вроде пошел
тока бы базу не убил - я его совершенно по обезьяньи скопипастил ) |
|||
22
askn
26.04.11
✎
14:59
|
(20) а что ж ему еще за параметр требуется?
|
|||
23
упс
26.04.11
✎
15:01
|
(22) имя индекса еще хочет. А "старшие" версии (2005, 2008), если имя индекса не указано, дефрагментируют все индексы. Что, имхо, странно, поскольку начиная с 2005-го советуют отказываться от indexdefrag.
Базу не убьете, но такие скрипты лучше запускать когда никто не работает. Может тупить. |
|||
24
askn
26.04.11
✎
15:01
|
(20) запрос из примера Б отработал
выдал две таблички из трех колонок и одной строки во всех ячейках обеих таблиц 0 |
|||
25
askn
26.04.11
✎
15:02
|
(23) спасибо за ликбез
прокомментируйте (24), если не сложно |
|||
26
упс
26.04.11
✎
16:14
|
(25) Это значит, что в той базе данных, в контексте которой выполнялся запрос нет индексов с уровнем фрагментации больше 30% (параметр @maxfrag в скрипте). То что дал две таблички с нулями - скорее всего есть таблица, в которой нет ни одной строки, которую он почему-то решил дефрагментировать. Я уже не помню как там в QA, но скорее всего там так же как и в SSMS есть вкладка "Messages" рядом с результатом запроса - в ней можете посмотреть какую таблицу и какой индекс SQL Server пытался дефрагментировать.
Перед использованием скрипта, дописывайте в начале USE [имя бд в которой надо дефрагментировать индексы]. |
|||
27
askn
27.04.11
✎
08:39
|
(26) Большое спасибо за ответы и подробное разъяснение )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |