Как определить, какие таблицы занимают больше всего места в базе данных SQL Server 2005?


Как вы можете сказать, какие таблицы занимают больше всего места в базе данных SQL Server 2005?

Я уверен, что есть какая-то системная хранимая процедура, которая показывает эту информацию.

У меня есть тестовая база данных, которая выросла с 1 ТБ до 23 ТБ. В настоящее время мы проводим много клиентских тестов преобразования в базе данных, что влечет за собой запуск одной и той же хранимой процедуры преобразования несколько раз. Он удаляет, что я уверен, увеличивает журнал транзакций. Но это меня достало думаю задать этот вопрос.

спасибо заранее.

3 64

3 ответа:

попробуйте этот скрипт-он будет перечислять количество строк и пространство, используемое строками данных (и общее пространство, используемое) для всех таблиц в вашей базе данных:

SELECT 
 t.NAME AS TableName,
 i.name AS indexName,
 SUM(p.rows) AS RowCounts,
 SUM(a.total_pages) AS TotalPages, 
 SUM(a.used_pages) AS UsedPages, 
 SUM(a.data_pages) AS DataPages,
 (SUM(a.total_pages) * 8) / 1024 AS TotalSpaceMB, 
 (SUM(a.used_pages) * 8) / 1024 AS UsedSpaceMB, 
 (SUM(a.data_pages) * 8) / 1024 AS DataSpaceMB
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
WHERE 
 t.NAME NOT LIKE 'dt%' AND
 i.OBJECT_ID > 255 AND  
 i.index_id <= 1
GROUP BY 
 t.NAME, i.object_id, i.index_id, i.name 
ORDER BY 
 OBJECT_NAME(i.object_id) 

использовать sp_spacedUsed

Exec sp_spaceused N'YourTableName'

или если вы хотите выполнить sp_spaceused для каждой таблицы в вашей базе данных, то вы можете использовать этот SQL-код:

set nocount on
create table #spaceused (
  name nvarchar(120),
  rows char(11),
  reserved varchar(18),
  data varchar(18),
  index_size varchar(18),
  unused varchar(18)
)

declare Tables cursor for
  select name
  from sysobjects where type='U'
  order by name asc

OPEN Tables
DECLARE @table varchar(128)

FETCH NEXT FROM Tables INTO @table

WHILE @@FETCH_STATUS = 0
BEGIN
  insert into #spaceused exec sp_spaceused @table
  FETCH NEXT FROM Tables INTO @table
END

CLOSE Tables
DEALLOCATE Tables 

select * from #spaceused
drop table #spaceused

exec sp_spaceused

выше SQL от здесь

комментарий Rossisdead ответил на этот вопрос лучше всего для меня, я хотел бы, чтобы он не был похоронен в комментарии. Это будет полезно для таких людей, как я, не пытаясь написать сценарий решения (ОП сделал не попросите фрагмент кода)

Если вы используете Management Studio, вы также можете щелкнуть правой кнопкой мыши база данных и перейдите в отчеты - > использование диска по таблице для того же результаты