Анализ базы данных SQL Server с использованием T-SQL - PullRequest
4 голосов
/ 25 января 2010

У меня небольшое приложение, в базе которого около 38 таблиц (SQL Server 2000/2005). Теперь я хотел бы знать, сколько данных (в КБ / МБ, а не в записях) они получают с использованием T-SQL.
Говоря лучше, я хотел бы сделать анализ всей базы данных. Это возможно? Как ? Спасибо всем,

Ответы [ 2 ]

4 голосов
/ 25 января 2010

Если вы хотите найти место в каждой таблице, вы можете использовать следующее:

USE yourdbname
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"

Для дальнейшего чтения ознакомьтесь с Отображение размера таблиц базы данных SQL Server

3 голосов
/ 25 января 2010

для всей базы данных вы можете просто запустить эту

exec sp_helpdb 'YourDatabaseName'

за таблицу вы можете использовать это (2005 +)

declare @PageSize float
select @PageSize=v.low/1024.0 from master.dbo.spt_values v 
where v.number=1 and v.type='E'

SELECT tbl.name,

ISNULL((select @PageSize * SUM(CASE WHEN a.type <> 1 THEN a.used_pages 
WHEN p.index_id < 2 THEN a.data_pages ELSE 0 END)

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

where i.object_id = tbl.object_id),0.0) AS [DataSpaceUsed_KB],

ISNULL((select @PageSize * SUM(a.used_pages - CASE WHEN a.type <> 1 
THEN a.used_pages      WHEN p.index_id < 2 THEN a.data_pages ELSE 0 END)

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

where i.object_id = tbl.object_id),0.0) AS [IndexSpaceUsed_KB]

FROM

sys.tables AS tbl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...