Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перестроить (оптимизировать) индексы во всех базах  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
Надо оптимизировать индексы во всех базах.

Во-первых, как для начала получить список всех индексов? [sys].[indexes] возвращает индексы только в одной схеме. Есть ли вьюха подобная dba_indexes из Oracle? Или единственный вариант - вытянуть список баз из master.sys.databases и затем в цикле динамическим запросом получать список индексов для каждой базы отдельно.

Во-вторых, какие типы индексов можно перестраивать: CLUSTERED, NONCLUSTERED, HEAP?

В третьих, как правильно перестроить и собрать статистику, если таблицы будут только на чтение?
23 ноя 12, 12:30    [13518375]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
Glory
Member

Откуда:
Сообщений: 104760
publexus
[sys].[indexes] возвращает индексы только в одной схеме.

Потому что
In SQL Server 2005 and later versions, the visibility of the metadata in catalog views is limited to securables that a user either owns or on which the user has been granted some permission
23 ноя 12, 12:34    [13518416]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
Glory
Member

Откуда:
Сообщений: 104760
publexus
Во-вторых, какие типы индексов можно перестраивать: CLUSTERED, NONCLUSTERED, HEAP?

HEAP - это не индекс. Это отсутствие индекса
23 ноя 12, 12:36    [13518444]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
Glory,

Даже если я использую пользователя SA, то все равно видимость ограничивается только одним каталогом.
23 ноя 12, 12:40    [13518495]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
publexus,

Перебор всех баз на сервере:
12876004
Обратите внимание на комментарии.
23 ноя 12, 12:44    [13518538]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
Glory
Member

Откуда:
Сообщений: 104760
publexus
Даже если я использую пользователя SA, то все равно видимость ограничивается только одним каталогом.

Потому что вы привыкли к Oracle.
В MSSQL базы независимы от друга. Это не схемы в Oracle.
Схемы в MSSQL находятся внутри базы.
А для регламентных работ для всех баз существюет Maintenance Plan-ы
23 ноя 12, 12:45    [13518554]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
publexus
Надо оптимизировать индексы во всех базах.

Во-первых, как для начала получить список всех индексов? [sys].[indexes] возвращает индексы только в одной схеме. Есть ли вьюха подобная dba_indexes из Oracle? Или единственный вариант - вытянуть список баз из master.sys.databases и затем в цикле динамическим запросом получать список индексов для каждой базы отдельно.

Во-вторых, какие типы индексов можно перестраивать: CLUSTERED, NONCLUSTERED, HEAP?

В третьих, как правильно перестроить и собрать статистику, если таблицы будут только на чтение?

1) вытянуть список баз из master.sys.databases и затем в цикле динамическим запросом получать список индексов для каждой базы отдельно.
2) все
3) сама собирётся если умолчание по автосбору не отключили
23 ноя 12, 12:46    [13518561]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
Гость333
Member

Откуда:
Сообщений: 3683
stavgreengo
publexus
Во-вторых, какие типы индексов можно перестраивать: CLUSTERED, NONCLUSTERED, HEAP?

2) все

Продемонстрируйте, пожалуйста, пример перестроения индекса типа HEAP.
23 ноя 12, 12:49    [13518592]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Гость333
Продемонстрируйте, пожалуйста, пример перестроения индекса типа HEAP.
Легко. Куча ребилдится созданием и удалением кластерного индекса.
23 ноя 12, 12:51    [13518615]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Гость333
stavgreengo
пропущено...

2) все

Продемонстрируйте, пожалуйста, пример перестроения индекса типа HEAP.

ну это не индекс, а его отсутствие, как заметил Glory, точнее кластерного(я просто понял что хотел сказать ТС не поправляя его по определениям). Но это не означает что в ней отсутствуют некластерные индексы, которые можно дефрагментировать. Перестраиваются же кучи как раз созданием кластерного на ней индекса и его удалением, некластерные же индексы перед этим лучше отключить, но не обязательно.
23 ноя 12, 13:01    [13518723]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34619
publexus,

1 вый вопрос - да , по другому никак.
Или если баз немного, можно в одной из баз сделать view по принципу

Select ... From DB1..sysindexes
Union all
Select ... From DB2..sysindexes

И так далее

Учти, что схемы и бд — разные вещи.
В mssql бд — это реально разные бд, а не просто пространства имён для таблиц, как в оракле.
23 ноя 12, 15:29    [13520058]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34619
На самом деле мало смысла в перестройке всех индексов....
23 ноя 12, 15:31    [13520073]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
MasterZiv
На самом деле мало смысла в перестройке всех индексов....


Базы несколько раз переносились из одного места в другое путем копирования датафайлов. Причем от источника они получались тоже в виде датафайлов. Базы были только на чтение, никаких изменений в данных не проводилось. А так как общий размер данных немаленький, то решили провести ревизию индексов на всякий случай. Есть ли в этом смысл?
23 ноя 12, 15:39    [13520146]     Ответить | Цитировать Сообщить модератору
 Re: Перестроить (оптимизировать) индексы во всех базах  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
publexus
MasterZiv
На самом деле мало смысла в перестройке всех индексов....


Базы несколько раз переносились из одного места в другое путем копирования датафайлов. Причем от источника они получались тоже в виде датафайлов. Базы были только на чтение, никаких изменений в данных не проводилось. А так как общий размер данных немаленький, то решили провести ревизию индексов на всякий случай. Есть ли в этом смысл?


Изучайте план обслуживания. Там в мастере легко и быстро выделить все базы сделать задание на реиндксацию. А так же бэкапы и тд и тп
23 ноя 12, 15:51    [13520243]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить