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

Откуда: Moscow
Сообщений: 610
СУБД:Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)


Цель: Хочу знать список используемых индексов в разрезе таблицы

Пробую:

select  *
from sys.dm_db_index_usage_stats
where object_id =   object_ID('DB.dbo.Table') and
      user_seeks > 0 


Охота увидеть более человечный результат - имя индекса вместо index_id
но выражение

select object_name(index_id)
from sys.dm_db_index_usage_stats
where object_id =   object_ID('DB.dbo.Table') and
      user_seeks > 0 


возвращает
NULL


Как получить имя индекса по его ID?
16 апр 12, 11:56    [12421661]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
iljy
Member

Откуда:
Сообщений: 8711
andrew shalaev,

sys.indexes
16 апр 12, 12:03    [12421715]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
iljy,

спасибо

В итоге получился такой запрос

      
Select i1.name, t1.*
from sys.dm_db_index_usage_stats t1
left join sys.sysindexes i1 on (t1.index_id = i1.indid) and (i1.name in ('index_table1', 'index_table2', 'index_table3', 'index_table4'))
where object_id =   object_ID('DB.dbo.Table') and
      t1.user_seeks > 0 
order by user_scans desc


где index_table1 - перечисление индексов существующей таблицы
16 апр 12, 12:27    [12421868]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
andrew shalaev,

я использую такой( чей-то исходный запрос использовал):
declare @db_id int =db_id('name_bd') -- номер БД
select object_name(i.object_id) as tableName, i.name as IndexName,i.index_id,
(s.user_lookups+s.user_scans+s.user_seeks) as max_user_view,s.user_seeks,
s.user_scans,s.user_lookups,s.user_updates
, s.last_user_scan,s.last_user_lookup,s.last_user_update
--,s.*
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 s.database_id=@db_id
and i.object_id in (select object_id from sys.partitions where-- rows>2000 and
index_id=1)
and i.object_id=object_id('dbo.table_name)
order by max_user_view desc -- s.user_seeks desc,s.user_scans desc ,s.last_user_update desc

показывает все индексы таблицы и сортирует их по использованию индексов.
16 апр 12, 12:37    [12421937]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
nezhadnye_my
Guest
andrew shalaev,

вообще-то имя индекса найдете в
sys.indexes.name
, как сказал iljy.
не
sys.sysindexes 
, а
sys.indexes
16 апр 12, 12:44    [12421982]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
nezhadnye_my,

спасибо, исправил, правда на результат это не как не отразилось
16 апр 12, 13:29    [12422260]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
iljy
Member

Откуда:
Сообщений: 8711
andrew shalaev,

sysindexes - устаревшее представление, оставленное для совместимости, в дальнейшем будет удалено, так что лучше его не использовать.
16 апр 12, 13:31    [12422270]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Slava_Nik,

не смог понять зачем нужно условие
i.object_id in (select object_id from sys.partitions where-- rows>2000 and
index_id=1)
16 апр 12, 13:35    [12422291]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
В итоге сделал так

Select  i.name as 'index name', 
		object_name(i.object_id) as 'table name',
		(s.user_lookups+s.user_scans+s.user_seeks) as max_user_view,s.user_seeks,
		 s.*
from sys.dm_db_index_usage_stats s left join sys.indexes i on (s.index_id = i.index_id) and  s.object_id = i.object_id

where s.object_id =   object_ID('FM.dbo.mRQRequest') and
         s.user_seeks > 0 
order by user_scans desc
16 апр 12, 13:49    [12422373]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
nezhadnye_my
Guest
andrew shalaev
Slava_Nik,

не смог понять зачем нужно условие
i.object_id in (select object_id from sys.partitions where-- rows>2000 and
index_id=1)


видимо чтоб отсеить добро из master-а и msdb
(поиск по sys.partitions Вашей базы отдаст только объекты Вашей базы)
+ кучи (index_id=0).
хотя непонятно, почему бы не фильтровать само sys.dm_db_index_usage_stats
(наверное относится ко временам, когда еще не закомментировали число строк, и его надо было вынимать из sys.partitions )
16 апр 12, 15:36    [12423127]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
andrew shalaev
Цель: Хочу знать список используемых индексов в разрезе таблицы

Детальная статистика по индексам (выбранные таблицы)
16 апр 12, 22:12    [12424544]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
gds
andrew shalaev
Цель: Хочу знать список используемых индексов в разрезе таблицы

Детальная статистика по индексам (выбранные таблицы)

пардон не то скопировал. конечно же
-- список неиспользуемых индексов
...
16 апр 12, 23:00    [12424688]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Из "dbatools. Часть 3. Обслуживание индексов"
gds
Получается что при перестроении кластерного индекса происходит
2) запись в каждой страницы некластерного индекса о местонахождение страницы кластерного индекса;
На моей памяти был случай, когда, проще было убить все некластерные индексы, перестроить кластерный и создать все некластерные обратно.
Простите, но это в корне неверно. Некластерному индексу сугубо фиолетово местоположение кластерного. Учите матчасть.
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2007/06/07/what-happens-to-non-clustered-indexes-when-the-table-structure-is-changed.aspx


А еще, обычно вместе с обслуживанием индексов также обновляют статистику.
17 апр 12, 02:04    [12424982]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Mind
А еще, обычно вместе с обслуживанием индексов также обновляют статистику.

Ага коммандой sp_updatestats или update statistics.
17 апр 12, 09:41    [12425470]     Ответить | Цитировать Сообщить модератору
 Re: sys.dm_db_index_usage_stats  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Mind
Простите, но это в корне неверно. Некластерному индексу сугубо фиолетово местоположение кластерного.

Спасибо, поправил, видимо когда писал думал о удалении и создании кластерного индекса.
17 апр 12, 11:46    [12426286]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить