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

Откуда:
Сообщений: 121
Передыстория такая.
Microsoft SQL Server 2005 - 9.00.4035.00 (X64)
Nov 24 2008 16:17:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

БД порядка 200 ГБ, высоконагруженная.

Повелся на подсказку оптимизатора и создал индекс, как он просил, хотя в базе был похожий (отличия по Included Columns).
Думал он переключится на новый индекс, а старый я потом удалю, как неиспользуемый.
Но старый индекс в неиспользуемы не перешел. Видимо он оптимизатору тоже нравится при каких-то условиях.

БД, как я уже говорил не маленькая, останавливать нельзя. Индекс занимает уже много много гигабайт. Жалко места.

Вопрос: можно ли как нибудь запретить оптимизатору использовать индекс вообще, без его удаления?

Раньше думал, что можно, но после изучения BOL пришел к выводу, что сильно заблуждался. ALTER INDEX DISABLE удаляет все данные, а ENABLE отсутствует (просят построить заново).
27 мар 13, 17:11    [14103197]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
tyratam
Видимо он оптимизатору тоже нравится при каких-то условиях.

Индекс занимает уже много много гигабайт. Жалко места.
Видимо да, нужны оба. Это уж вы решайте, что важнее - место или производительность.


tyratam
Вопрос: можно ли как нибудь запретить оптимизатору использовать индекс вообще, без его удаления?
Цель то какая? Если индекс не будет использоваться, он же продолжит занимать место. Так что нужно либо удалить, либо не удалять.
27 мар 13, 17:17    [14103235]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
Это можно сделать в самом индексе. там есть крыжик типа Use index
27 мар 13, 17:18    [14103241]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
tyratam
ALTER INDEX DISABLE удаляет все данные, а ENABLE отсутствует (просят построить заново).
Жёстко!
А проверить слабО?

Да и с чего бы вдруг удалялись какие-то данные?
Для этого есть DELETE
27 мар 13, 17:20    [14103261]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
kalimba
Member

Откуда:
Сообщений: 297
tyratam,
Можно отключить индекс командой
ALTER INDEX <index_name> ON <table> DISABLE;

Единственный момент:
BOL
Чтобы активировать индекс, следует использовать инструкцию ALTER INDEX REBUILD или CREATE INDEX WITH DROP_EXISTING
27 мар 13, 17:22    [14103274]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Ozerov
Это можно сделать в самом индексе. там есть крыжик типа Use index

Который общается с сервером при помощи команд "ALTER INDEX DISABLE" и "ALTER INDEX REBUILD", а это не устраивает ТСа.
27 мар 13, 17:23    [14103278]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
Гость333
Ozerov
Это можно сделать в самом индексе. там есть крыжик типа Use index

Который общается с сервером при помощи команд "ALTER INDEX DISABLE" и "ALTER INDEX REBUILD", а это не устраивает ТСа.

Хм, точно, прочитал через строку...
27 мар 13, 17:24    [14103288]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Гость333
Ozerov
Это можно сделать в самом индексе. там есть крыжик типа Use index

Который общается с сервером при помощи команд "ALTER INDEX DISABLE" и "ALTER INDEX REBUILD", а это не устраивает ТСа.
Потому что он опасается, что все данные на сервере взорвутся от этого.
А так бы, может, и устроило?
27 мар 13, 17:26    [14103302]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
tyratam
ALTER INDEX DISABLE удаляет все данные, а ENABLE отсутствует (просят построить заново).
Жёстко!
А проверить слабО?

Наверное, имелось в виду, что от индекса остаются только метаданные, тогда как данных не остаётся (соответствующие страницы данных освобождаются).
27 мар 13, 17:28    [14103327]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
tyratam
Вопрос: можно ли как нибудь запретить оптимизатору использовать индекс вообще, без его удаления?

Правильно ли я понимаю ваш вопрос: операции insert/update/delete должны этот индекс обновлять/поддерживать в актуальном состоянии, но чтобы select'ы его не использовали?
27 мар 13, 17:37    [14103406]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
tyratam
Member

Откуда:
Сообщений: 121
tyratam
Цель то какая? Если индекс не будет использоваться, он же продолжит занимать место. Так что нужно либо удалить, либо не удалять.

Посмотреть как отсутствие индекса скажется на системе. И если будет существенное ухудшение - быстро все вернуть "взад".
А перестройка займет не меньше 20 минут (оценка). Что неприемлемо
27 мар 13, 17:45    [14103462]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
tyratam
Member

Откуда:
Сообщений: 121
Ozerov
Это можно сделать в самом индексе. там есть крыжик типа Use index

Увы. Отключение крыжика генерит команду ALTER INDEX _____ DISABLE
А Возвращение в ENABLE - REBUILD. Перестроение займет неприемлемо много времени.
27 мар 13, 17:47    [14103476]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
tyratam
Member

Откуда:
Сообщений: 121
iap
tyratam
ALTER INDEX DISABLE удаляет все данные, а ENABLE отсутствует (просят построить заново).
Жёстко!
А проверить слабО?

Да и с чего бы вдруг удалялись какие-то данные?
Для этого есть DELETE


На слабо не надо. Все проверяю сначало. И это проверил. Даже после прочтения мануала о том, что команда удаляет данные индекса. А DELETE заодно стирает и метаданные о индексе.
27 мар 13, 17:48    [14103490]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
tyratam
Member

Откуда:
Сообщений: 121
Гость333
tyratam
Вопрос: можно ли как нибудь запретить оптимизатору использовать индекс вообще, без его удаления?

Правильно ли я понимаю ваш вопрос: операции insert/update/delete должны этот индекс обновлять/поддерживать в актуальном состоянии, но чтобы select'ы его не использовали?

Совершенно верно! Причем править все процедуры с селектами не хочу.
27 мар 13, 17:49    [14103501]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
tyratam
А DELETE заодно стирает и метаданные о индексе.

Чего? Метаданные стираются при помощи DROP INDEX
27 мар 13, 18:03    [14103571]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
tyratam
Member

Откуда:
Сообщений: 121
Гость333
tyratam
А DELETE заодно стирает и метаданные о индексе.

Чего? Метаданные стираются при помощи DROP INDEX

Да. Вы правы. А по сути есть предложения?
27 мар 13, 18:19    [14103659]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
tyratam
А по сути есть предложения?

Штатных средств для желаемого вами не существует. Как нет и хинтов "не использовать такой-то индекс" (то есть даже если вы готовы править процедуры, неясно, как именно это нужно делать).

Насчёт нештатных средств — не знаю точно, но почти уверен, что их не существует.
27 мар 13, 18:38    [14103742]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
tyratam
Посмотреть как отсутствие индекса скажется на системе. И если будет существенное ухудшение - быстро все вернуть "взад".
А перестройка займет не меньше 20 минут (оценка). Что неприемлемо
Можно посмотреть самые часто выполняемые запросы на предмет выполнения без этого индекса.
Конечно, это хуже, чем отключить ипользование индекса. Но к сожалению такой возможности нету :-(
tyratam
На слабо не надо. Все проверяю сначало. И это проверил. Даже после прочтения мануала о том, что команда удаляет данные индекса. А DELETE заодно стирает и метаданные о индексе.
Если всё проверяете, то и это проверьте, на тестовой системе.
Вы же не проверяете всё на продакшене? Много чего нельзя "попробовать и быстро вернуть", не только индекс.
27 мар 13, 18:56    [14103822]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
tyratam
Member

Откуда:
Сообщений: 121
Гость333
tyratam
А по сути есть предложения?

Как нет и хинтов "не использовать такой-то индекс" .

Зато есть "использовать". Буду явно указывать нужный индекс.
27 мар 13, 18:59    [14103837]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
tyratam
Member

Откуда:
Сообщений: 121
alexeyvg
Если всё проверяете, то и это проверьте, на тестовой системе.

Проблема в создании соответствующей нагрузки на тестовую систему.
27 мар 13, 19:00    [14103844]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Гость333
Member

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

Как нет и хинтов "не использовать такой-то индекс" .

Зато есть "использовать". Буду явно указывать нужный индекс.

Чревато тем, что не будет использован какой-нибудь третий индекс, который будет более оптимален для прохинтованного запроса. Конечно, если сценарии запросов предопределены и предполагают использование только "нового индекса" или "старого индекса", а с "третьим индексом" план запроса заведомо неоптимален, то такое хинтование — вполне себе вариант...
27 мар 13, 19:13    [14103899]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
tyratam
alexeyvg
Если всё проверяете, то и это проверьте, на тестовой системе.

Проблема в создании соответствующей нагрузки на тестовую систему.
Скорее проблема в охвате всех видов запросов.
Вы ведь сможете оценить, повысилось или понизилось потребление ресурсов после отключения индекса.
tyratam
Гость333
пропущено...
Как нет и хинтов "не использовать такой-то индекс" .

Зато есть "использовать". Буду явно указывать нужный индекс.
Это не адекватная замена, ведь "нужный индекс" может быть ненужным для конкретного запроса, и даже для определённых значений параметров запроса.
27 мар 13, 19:29    [14103965]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
komrad
Member

Откуда:
Сообщений: 5764
Гость333
tyratam
А по сути есть предложения?

Штатных средств для желаемого вами не существует. Как нет и хинтов "не использовать такой-то индекс" (то есть даже если вы готовы править процедуры, неясно, как именно это нужно делать).

Насчёт нештатных средств — не знаю точно, но почти уверен, что их не существует.


есть такая вещь как гипотетические индексы
они не принимаются в расчет оптимизатором
27 мар 13, 19:44    [14104022]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
komrad
есть такая вещь как гипотетические индексы
они не принимаются в расчет оптимизатором

Индексы-то есть, но только гипотетический индекс (цитата из вашей ссылки) "itself will not be created, but only the statistic associated with the index". ТСу же нужен и сам индекс, а не только статистика по нему.
27 мар 13, 19:55    [14104064]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли сделать индекс временно не используемым?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
tyratam
iap
пропущено...
Жёстко!
А проверить слабО?

Да и с чего бы вдруг удалялись какие-то данные?
Для этого есть DELETE


На слабо не надо. Все проверяю сначало. И это проверил. Даже после прочтения мануала о том, что команда удаляет данные индекса. А DELETE заодно стирает и метаданные о индексе.
Так Вы имели в виду данные в индексе?
Так бы и говорили.
27 мар 13, 20:12    [14104140]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить