Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определение размера таблиц базы данных  [new]
nick1907
Member

Откуда:
Сообщений: 7
Добрый день!
Подскажите, пожалуйста, запрос для вывода списка всех имеющихся в БД таблиц и информации о них (интересует прежде всего размер).
17 июн 09, 10:30    [7308538]     Ответить | Цитировать Сообщить модератору
 Re: Определение размера таблиц базы данных  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
select
	object_schema_name(object_id)+'.'+object_name(object_id), 
	sum(p.used_page_count)/128. as [used (KB)], 
	sum(p.reserved_page_count)/128. as [reserved (KB)],
	max(p.row_count) as [rowcount] 
from sys.dm_db_partition_stats p
where p.[object_id] > 1000
group by p.[object_id]
order by [rowcount] desc
17 июн 09, 10:58    [7308763]     Ответить | Цитировать Сообщить модератору
 Re: Определение размера таблиц базы данных  [new]
nick1907
Member

Откуда:
Сообщений: 7
DeColo®es, спасибо большое.
17 июн 09, 11:43    [7309168]     Ответить | Цитировать Сообщить модератору
 Re: Определение размера таблиц базы данных  [new]
nick1907
Member

Откуда:
Сообщений: 7
DeColo®es, только размер похоже в мегабайтах будет...
17 июн 09, 13:56    [7310268]     Ответить | Цитировать Сообщить модератору
 Re: Определение размера таблиц базы данных  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
nick1907
DeColo®es, только размер похоже в мегабайтах будет...
Это да.
17 июн 09, 14:09    [7310366]     Ответить | Цитировать Сообщить модератору
 Re: Определение размера таблиц базы данных  [new]
RMih
Member

Откуда: Москва
Сообщений: 161
Могу предложить еще один запрос :-)))
SELECT Obj.name AS TableName,
	ObjectsSpaces.Rows,
	ObjectsSpaces.Allocated / 128 AS AllocatedMB,
	ObjectsSpaces.DataUsed / 128 AS DataUsedMB,
	ObjectsSpaces.IndexesUsed / 128 AS IndexesUsedMB,
	(ObjectsSpaces.Allocated - ObjectsSpaces.DataUsed - ObjectsSpaces.IndexesUsed) / 128 AS UnusedMB

FROM sys.objects AS Obj
LEFT OUTER JOIN 
	(SELECT Obj.object_id,
		MAX(CASE
				-- Heap or Clustered
				WHEN Idx.index_id IN (0, 1) THEN Parts.rows
				ELSE 0
			END
		) AS [Rows],
		
		SUM(AllocUnits.total_pages) AS Allocated,
		SUM(CASE
				WHEN Idx.index_id IN (0, 1) THEN AllocUnits.used_pages
				ELSE 0
			END
		) AS DataUsed,

		SUM(CASE
				WHEN Idx.index_id > 1 THEN AllocUnits.used_pages
				ELSE 0
			END
		) AS IndexesUsed
		
	FROM sys.objects AS Obj
	LEFT OUTER JOIN sys.indexes AS Idx
		ON Idx.object_id = Obj.object_id
	LEFT OUTER JOIN sys.partitions AS Parts
		ON Parts.object_id = Obj.object_id AND Parts.index_id = Idx.index_id
	LEFT OUTER JOIN sys.allocation_units AS AllocUnits
		ON AllocUnits.container_id =
			CASE AllocUnits.type
				WHEN 2 THEN Parts.partition_id
				ELSE Parts.hobt_id
			END
	LEFT OUTER JOIN sys.data_spaces AS DataSpaces
		ON DataSpaces.data_space_id = AllocUnits.data_space_id
	WHERE Obj.type = 'U' AND DataSpaces.type = 'FG'
	GROUP BY Obj.object_id
	) AS ObjectsSpaces
	ON ObjectsSpaces.object_id = Obj.object_id
WHERE Obj.type = 'U'
ORDER BY ObjectsSpaces.Allocated DESC
17 июн 09, 14:16    [7310408]     Ответить | Цитировать Сообщить модератору
 Re: Определение размера таблиц базы данных  [new]
Slider_spb
Member

Откуда:
Сообщений: 800
Можно и так:
DBCC UPDATEUSAGE (0)
create table #t(name varchar(255), row varchar(255), reserved varchar(255), data varchar(255), inxex_size varchar(255), unused varchar(255))

insert into #t
exec sp_msforeachtable N'exec sp_spaceused ''?''' 

select * from #t order by data desc
drop table #t
17 июн 09, 14:26    [7310516]     Ответить | Цитировать Сообщить модератору
 Re: Определение размера таблиц базы данных  [new]
nick1907
Member

Откуда:
Сообщений: 7
Всем спасибо)
Воспользовался первым вариантом, только немного подкорректировал...

select
object_name(object_id) as [Table name],
sum(p.used_page_count)/128. as [used (MB)],
sum(p.reserved_page_count)/128. as [reserved (MB)],
max(p.row_count) as [rowcount]
from sys.dm_db_partition_stats p
where p.[object_id] IN (select object_id from sys.objects where type_desc='USER_TABLE')
group by p.[object_id]
order by [rowcount] desc
17 июн 09, 15:23    [7310986]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить