SQL: Как определить размер таблиц в БД MS SQL

03 апрель 2019, Среда
72 542
5
5 4
Для определения размера таблиц в базе данных, размещенной на сервере Microsoft SQL Server, требуется выполнить следующие действия: 
1. Подключиться к серверу баз данных, при помощи SQL Server Management Studio (SSMS) 
2. Выбрать базу данных, размер таблиц которой необходимо определить
3. Выполнить SQL запрос:

USE {database_name};
GO 
 
SELECT
  t.Name                                       AS TableName,
  s.Name                                       AS SchemaName,
  p.Rows                                       AS RowCounts,
  SUM(a.total_pages) * 8                       AS TotalSpaceKB,
  SUM(a.used_pages) * 8                        AS UsedSpaceKB,
  (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
  sys.tables t
  INNER JOIN sys.indexes i ON t.object_id = i.object_id
  INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
  INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
  LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE
  t.Name NOT LIKE 'dt%'
  AND t.is_ms_shipped = 0
  AND i.object_id > 255
GROUP BY
  t.Name, s.Name, p.Rows
ORDER BY
  t.Name;
GO
где, "database_name" - имя базы данных, для которой необходимо получить список таблиц с размерами. 
Размер таблиц базы данных будет указан в Килобайтах

Если необходимо получить ограниченных список таблиц, например, содержащих определенные слова в названии, то можно сократить вывод добавив условие (t.Name Like '%Filter%') в конструкцию WHERE

WHERE
  t.Name NOT LIKE 'dt%'
  AND t.Name Like '%Filter%'
  AND t.is_ms_shipped = 0
  AND i.object_id > 255
где, Filter - это подстрока в названии таблицы

Другой способ получения размера таблиц в базе данных, это использование встроенной хранимой процедуры sp_spaceused. 
Хранимая процедура (stored procedure) sp_spaceused выводит количество строк, зарезервированное место на диске и место на диске, которое используется таблицей, индексированным представлением или очередью компонента Service Broker в текущей базе данных, либо выводит место на диске, зарезервированное и используемое всей базой данных.

Ниже показан пример, в котором предоставляются сведения о занимаемом месте на диске для таблицы table_name и ее индексах в базе данных database_name, используя хранимую процедуру sp_spaceused:
USE {database_name};  
GO  
EXEC sp_spaceused N'{dbo}.{table_name}';  
GO  

Ниже показан пример, в котором предоставляются сведения о занимаемом месте на диске для всех таблиц и ее индексах в базе данных database_name.
USE {database_name};  
GO  
sp_msforeachtable N'EXEC sp_spaceused [?]';  
GO

Определить дисковое пространство используемое индексами

Чтобы узнать сколько места занимают индексы таблиц базы данных можно использовать следующий запрос:
USE {database_name};  
GO  

SELECT
  OBJECT_NAME(i.object_id) AS TableName,
  i.name                   AS IndexName,
  i.index_id               AS IndexID,
  8 * SUM(a.used_pages)    AS 'Indexsize(KB)'
FROM
  sys.indexes AS i
  JOIN sys.partitions AS p ON p.object_id = i.object_id AND p.index_id = i.index_id
  JOIN sys.allocation_units AS a ON a.container_id = p.partition_id
GROUP BY
  i.OBJECT_ID, i.index_id, i.name
ORDER BY
  OBJECT_NAME(i.object_id),
  i.index_id

Приведенные примеры позволяют получить оперативно получить информацию о занимаемом дисковом пространстве.
Комментарии:
Прокомментировать
  1. Sergey 11 августа 2020 21:44
    более удобно было бы отсортировать таблицы по размеру
    1. ivanpub 20 августа 2020 10:06
      Ну тут кому как, зависит от того, что именно анализируется, поправить сортировку не сложно:
      ORDER BY t.Name; - по имени
      ORDER BY p.Rows DESC; - по количеству строк (по убыванию)
      ORDER BY TotalSpaceKB DESC; - по занимаемому месту (по убыванию)
  2. Колян 7 марта 2023 05:33
    куита полная . все можно проще сделать
    1. Vladimir 25 апреля 2023 12:03
      Такие Коляны бесят просто, так сделай, покажи
      1. борменталь 11 октября 2024 11:13
        колян не прав, это полная ку-та
При использовании материалов ссылка на сайт UserMan.ru обязательна.
Политика конфиденциальности
Пользовательское соглашение
UserMan.ru © 2017-2024
Соцсети: VK