SQL-скрипт для определения размера таблиц

06.12.2011 | Автор: | Рубрика: SQL, Новичкам

Так как статья про статистику использования индексов (читать здесь) пользуется популярностью, выложу еще один скрипт. Он показывает списком перечень всех таблиц с размерами данных и индексов.

Работает на текущей базе.

Работает даже на SQL Server 2000.

Интересная для анализа вещь:

DECLARE @pagesizeKB INT
SELECT @pagesizeKB = low / 1024
FROM master.dbo.spt_values
WHERE NUMBER = 1 AND TYPE = 'E'

SELECT
  TABLE_NAME = OBJECT_NAME(o.id),
  ROWS = i1.rowcnt,
  reservedMB = (ISNULL(SUM(i1.reserved), 0) + ISNULL(SUM(i2.reserved), 0)) * @pagesizeKB/1024,

  dataMB = (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0)) * @pagesizeKB/1024,

  index_sizeMB = ((ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 0))
    - (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0))) * @pagesizeKB/1024,

  unusedMB = ((ISNULL(SUM(i1.reserved), 0) + ISNULL(SUM(i2.reserved), 0))
    - (ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 0))) * @pagesizeKB/1024

FROM sysobjects o
    LEFT OUTER JOIN sysindexes i1
    ON i1.id = o.id AND i1.indid < 2

    LEFT OUTER JOIN sysindexes i2
    ON i2.id = o.id AND i2.indid = 255

WHERE OBJECTPROPERTY(o.id, N'IsUserTable') = 1 --same as: o.xtype = 'IsView'
OR (OBJECTPROPERTY(o.id, N'IsView') = 1 AND OBJECTPROPERTY(o.id, N'IsIndexed') = 1)

GROUP BY o.id, i1.rowcnt

ORDER BY
    --(ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0)) * @pagesizeKB desc --3 DESC
    --i1.rowcnt desc
    dataMB DESC

Автор:

В области Navision - с 2003 года. Профессиональные интересы: NAV, MS SQL, .NET, BPMN, IT-менеджмент. Предметная область: логистика, финансы, склады, 3PL.

Количество статей, опубликованных автором: 86.

Комментарии (Один комментарий)

  1. Скрипт выдает не верные результаты. Например, если в таблице есть поля BLOB — размер в мб равен 0.

Добавить комментарий