Как найти неиспользуемые индексы?

Я работаю над хранилищем данных. У меня есть таблицы с до 200M записей. Некоторые из этих таблиц содержат около 20 + индексов (я не могу объяснить, почему они были созданы в первую очередь). Это делает работу по поддержанию этих индексов слишком болезненной и оказывает непосредственное влияние на работу импорта DWH как в производительности, так и во время выполнения.

Как найти наименее используемые индексы для каждой таблицы? (чтобы избавиться от них)

10 голосов | спросил Moslem Ben Dhaou 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 02 Sep 2013 11:49:34 +0400 2013, 11:49:34

3 ответа


10

Я обнаружил, что Brent Ozar Unlimited свободный скрипт BlitzIndex (написанный Kendra Little) - лучший способ изолировать неиспользуемые индексы (а также индексы, которые выгодно добавлять, индексы, дублирующие работа других индексов и т. д.)

http://www.brentozar.com/blitzindex/

Он скажет вам количество раз, когда какой-либо индекс был прочитан с момента последнего сброса статистики (или индекс был создан /воссоздан).

Кажется, я помню, как Брент Озар сказал в веб-трансляции, что хорошее правило не более 10 индексов для таблицы, которая часто читается, 20ish для таблиц, которые являются статическими /историческими /архивированными данными, которые не будут часто меняться.

Если у вас все еще есть проблемы с скоростью импорта, есть время, когда база данных не активно запрашивается (возможно, это нерабочее время). Может оказаться полезным сбросить индекс, импортировать данные и затем повторно применить индексы. (Статистические данные будут сбрасываться, конечно.) Причина этого заключается в том, что индекс (ы) будет обновляться по мере поступления каждой записи, страницы будут переупорядочены и потребуют времени и ввода-вывода. Построение индексов после требует отдельного сканирования таблицы.

Нет жесткого и быстрого правила, возможно, вам придется экспериментировать с этим в зависимости от типов индекса и данных. Индексы должны регулярно пересматриваться по мере изменения потребностей /запросов.

ответил Greg Robson 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 04 Sep 2013 16:36:46 +0400 2013, 16:36:46
0

Попробуйте следующее:

SELECT   OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME], 
             I.[NAME] AS [INDEX NAME], 
             USER_SEEKS, 
             USER_SCANS, 
             USER_LOOKUPS, 
             USER_UPDATES 
    FROM     SYS.DM_DB_INDEX_USAGE_STATS AS S 
             INNER JOIN SYS.INDEXES AS I 
               ON I.[OBJECT_ID] = S.[OBJECT_ID] 
                  AND I.INDEX_ID = S.INDEX_ID 
    WHERE    OBJECTPROPERTY(S.[OBJECT_ID],'IsUserTable') = 1 

Раджа

ответил Raj 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 02 Sep 2013 11:55:57 +0400 2013, 11:55:57
0

Я добавил последнюю использованную дату и код для вывода запроса Raj.

SELECT   OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME], 
             I.[NAME] AS [INDEX NAME], type_desc,
             coalesce(last_user_seek,last_user_scan,last_user_lookup,last_system_scan,last_system_seek,last_system_lookup) as LastUsed,
             USER_SEEKS, 
             USER_SCANS, 
             USER_LOOKUPS, 
             USER_UPDATES ,
             last_user_seek,last_user_scan,last_user_lookup,last_system_scan,last_system_seek,last_system_lookup,
             'drop index ['+I.[NAME]+'] on ['+OBJECT_NAME(S.[OBJECT_ID])+'];' as DropStatement
    FROM     SYS.DM_DB_INDEX_USAGE_STATS AS S 
             INNER JOIN SYS.INDEXES AS I 
               ON I.[OBJECT_ID] = S.[OBJECT_ID] 
                  AND I.INDEX_ID = S.INDEX_ID 
    WHERE    OBJECTPROPERTY(S.[OBJECT_ID],'IsUserTable') = 1 
    order by type_desc,coalesce(last_user_seek,last_user_scan,last_user_lookup,last_system_scan,last_system_seek,last_system_lookup) desc
ответил mike nelson 25 FebruaryEurope/MoscowbWed, 25 Feb 2015 02:18:07 +0300000000amWed, 25 Feb 2015 02:18:07 +030015 2015, 02:18:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132