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

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

03 апрель 2019, Среда
213
0
+ 0 -
Для определения размера таблиц в базе данных, размещенной на сервере 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
Комментарии:
Прокомментировать
Кликните на изображение чтобы обновить код, если он неразборчив
При использовании материалов ссылка на сайт UserMan.ru обязательна. UserMan.ru © 2017-2019
Мы в Соцсетях: