Как определить, какие таблицы занимают больше всего места в базе данных SQL Server 2005?
Как вы можете сказать, какие таблицы занимают больше всего места в базе данных SQL Server 2005?
Я уверен, что есть какая-то системная хранимая процедура, которая показывает эту информацию.
У меня есть тестовая база данных, которая выросла с 1 ТБ до 23 ТБ. В настоящее время мы проводим много клиентских тестов преобразования в базе данных, что влечет за собой запуск одной и той же хранимой процедуры преобразования несколько раз. Он удаляет, что я уверен, увеличивает журнал транзакций. Но это меня достало думаю задать этот вопрос.
спасибо заранее.
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, вы также можете щелкнуть правой кнопкой мыши база данных и перейдите в отчеты - > использование диска по таблице для того же результаты