Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как получить размер всех индексов по всем таблицам БД?  [new]
NoviceSQL
Guest
Здравстуйте.

Облазил весь интернет, неужели нет скрипта,
который возвращал бы следующий результат, в виде таблицы с колонками?
Так, как это сделано в SMSS через стандартные отчеты.

БД - Reports - Standart Reports - Disk Usage By Table

Но, в отличие от стандартного отчета SMSS, мне обязательно необходимо
добавить еще колонку "Имя индекса", ну и соответственно развертку по каждому индексу таблицы.

Подскажите, может кто делал подобное?

К сообщению приложен файл. Размер - 49Kb
16 июл 13, 15:48    [14573931]     Ответить | Цитировать Сообщить модератору
 Re: Как получить размер всех индексов по всем таблицам БД?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Облазил весь интернет, неужели нет скрипта,
который возвращал бы следующий результат, в виде таблицы с колонками?
Так, как это сделано в SMSS через стандартные отчеты.


Запустить профайлер и посмотреть какой скрипт отправляет "SMSS через стандартные отчеты" было бы проще, чем по всему интернету лазить.
16 июл 13, 15:52    [14573954]     Ответить | Цитировать Сообщить модератору
 Re: Как получить размер всех индексов по всем таблицам БД?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
профайлер включите когда отчет делаете и все узнаете
А так ,яж не знаю,чтио вы там искали но почти все есть в sys.indexes + пара вьюсов
16 июл 13, 15:53    [14573957]     Ответить | Цитировать Сообщить модератору
 Re: Как получить размер всех индексов по всем таблицам БД?  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
sys.dm_db_index_physical_stats?
16 июл 13, 15:54    [14573962]     Ответить | Цитировать Сообщить модератору
 Re: Как получить размер всех индексов по всем таблицам БД?  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Можно через стандартный отчет: Disck Usage

Правой кнопкой в ssms на БД - > Reports->Standart Reports-> Disk Usage
16 июл 13, 16:42    [14574235]     Ответить | Цитировать Сообщить модератору
 Re: Как получить размер всех индексов по всем таблицам БД?  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Andrey Sribnyak,

Хотя он так только на графике показывает, а цифру не дает...

SELECT  SUM(s.[used_page_count]) * 8 AS IndexSizeKB 
FROM sys.dm_db_partition_stats AS s 
JOIN sys.indexes AS i 
ON s.[object_id] = i.[object_id] 
AND s.[index_id] = i.[index_id] 
16 июл 13, 16:45    [14574249]     Ответить | Цитировать Сообщить модератору
 Re: Как получить размер всех индексов по всем таблицам БД?  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Andrey Sribnyak,

А как выхотите можно так:

SELECT [DatabaseName]
      ,[ObjectId]
      ,[ObjectName]
      ,[IndexId]
      ,[IndexDescription]
      ,CONVERT(DECIMAL(16,1)
                ,(SUM([avg_record_size_in_bytes] * [record_count])
                        / (1024.0 *1024))) AS  [IndexSize(MB)]
      ,[lastupdated] AS [StatisticLastUpdated]
      ,[AvgFragmentationInPercent] 
FROM (SELECT 
        DISTINCT DB_Name(Database_id) AS 'DatabaseName'
       ,OBJECT_ID AS ObjectId, Object_Name(Object_id) AS ObjectName
       ,Index_ID AS IndexId
       ,Index_Type_Desc AS IndexDescription
       ,avg_record_size_in_bytes 
       ,record_count
       ,STATS_DATE(object_id,index_id) AS 'lastupdated'
       ,CONVERT([varchar](512)
                 ,round(Avg_Fragmentation_In_Percent,3)) AS 'AvgFragmentationInPercent' 
      FROM sys.dm_db_index_physical_stats(db_id('PM_Db'), NULL, NULL, NULL, 'detailed') 
      WHERE OBJECT_ID IS NOT NULL 
        AND Avg_Fragmentation_In_Percent <> 0) T 
GROUP BY DatabaseName
        ,ObjectId
        ,ObjectName
        ,IndexId
        ,IndexDescription
        ,lastupdated
        ,AvgFragmentationInPercent
16 июл 13, 16:48    [14574260]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить