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

Откуда:
Сообщений: 113
В EM MS SQL 7.0 была замечательная вкладка на странице с инфой по базе данных где представлялся список всех таблиц и индексов БД , а также количество записей и мето занимаемое на диске.

В EM MS SQL 2000 не могу найти эту страницу... может быть я туплю?

Как получить список таблиц и индексов с инфой о том колько метс они занимают?
19 авг 05, 10:27    [1801191]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть сколько места занимает индекс или таблица?  [new]
tt12
Member

Откуда: Ленинград
Сообщений: 86
Встаете курсором на базу, включаете в меню Вид пункт Taskpad
19 авг 05, 10:32    [1801220]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть сколько места занимает индекс или таблица?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34274
Блог
или считаете по алгоритму из BOL->estimating table size
19 авг 05, 10:35    [1801236]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть сколько места занимает индекс или таблица?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

Критик wrote:
> или считаете по алгоритму из BOL->estimating table size
делаете вырезку из sp_spaceused
use master
go

if exists(select * from sysobjects where name = 'sp_HelpSpace' and type 
= 'P')
drop procedure sp_HelpSpace
go
/*
$Archive: /oep/master/sp_HelpSpace.sql $
$Author: Locky $
$Revision: 11 $ $Modtime: 24.10.04 16:55 $
*/


create procedure sp_HelpSpace
@table_name varchar(255) = '%',
@report_type int = 0,
@maxrow int = 0,
@IncludeSystemTables int = 0
with encryption
as begin
set nocount on
set arithabort off
set ansi_warnings off
create table #tab (name varchar(255),Reserved int,data int,IndexSpace 
int,Unused int,Rows int,so int,totalsize int,Percentage numeric(8,2))
declare	@maxlen int,@totalsize int
insert into #tab(name,reserved,data,indexspace,unused,rows,so)
select	Name,reserved*8 ,Data=((isnull(DPages,0)+isnull(Pages,0))*8)
	,IndexSpace = ((isnull(XPages,0)-isnull(DPages,0)+isnull(Pages,0))*8)
	,Unused = ((Reserved-isnull(used,0))*8),Rows
	,0
from
(select	ID,reserved = Sum(reserved)
from	SysIndexes(nolock)
where	indid in (0,1,255)
group by ID)S1 join sysobjects SO(nolock) on S1.ID = So.ID left outer join

(select	ID,DPages=sum(dpages)
from	sysindexes(nolock)
where	indid < 2
group by ID)S2 on S1.ID = S2.ID
left outer join

(select	ID,Pages=isnull(Sum(Used),0)
from	sysindexes(nolock)
where	indid = 255
group by ID)S3 on s1.ID = s3.ID
left outer join
(select ID,Used=sum(used)
from	sysindexes(nolock)
where indid in (0, 1, 255)
group by ID)S4 on s1.ID = s4.id
left outer join
(select ID,XPages=sum(used)
from	sysindexes(nolock)
where	indid in (0, 1, 255)
group by iD)S5 on S1.ID = S5.ID

left outer join
(select ID,Rows = Sum(Rows)
from	sysindexes(nolock)
where	indid in (0, 1, 255)
group by iD)S6 on S1.ID = S6.ID
where ((So.Type = 'U' and @IncludeSystemTables = 0) or ((So.Type in 
('U','S') and @IncludeSystemTables = 1))) and So.Name like @table_name

select @maxlen = max(datalength(Name)),@totalsize = sum(Reserved) from #tab
insert into #tab(name,reserved,data,indexspace,unused,rows,so)
select	'[T O T A 
L]',Sum(Reserved),Sum(data),Sum(IndexSpace),Sum(Unused),Sum(Rows),1
from	#tab
if @maxlen < 11 set @maxlen = 11
declare	@sql nvarchar(4000)

update	#tab set Percentage=round(Reserved*100./@totalsize,2)
if @report_type = 0 set @sql = 'select 
Name=convert(varchar('+convert(varchar(255),@MaxLen)+'),Name),Percentage,Reserved 
as ''Reserved-'',Data,IndexSpace,Unused,Rows from #tab order by so 
asc,reserved desc'
if @report_type = 1 set @sql = 'select 
Name=convert(varchar('+convert(varchar(255),@MaxLen)+'),Name),Percentage,Reserved 
as ''Reserved'',Data,IndexSpace,Unused,Rows as ''Rows-'' from #tab order 
by so asc,rows desc'
if @report_type = 2 set @sql = 'select 
''Name+''=convert(varchar('+convert(varchar(255),@MaxLen)+'),Name),Percentage,Reserved 
as ''Reserved'',Data,IndexSpace,Unused,Rows from #tab order by so 
asc,name asc'
set rowcount @maxrow
exec sp_executesql @sql

end

go


--
-------------------------
There's no silver bullet!

Posted via ActualForum NNTP Server 1.2

19 авг 05, 10:44    [1801281]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть сколько места занимает индекс или таблица?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

упс, только чуток поправьте там... форматирование пофачилось, появились
лишние переносы внутри строк....
--
-------------------------
There's no silver bullet!

Posted via ActualForum NNTP Server 1.2

19 авг 05, 10:46    [1801287]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть сколько места занимает индекс или таблица?  [new]
ProfSD
Member

Откуда:
Сообщений: 113
tt12
Встаете курсором на базу, включаете в меню Вид пункт Taskpad

Спасибо
Оно самое

Туплю однако .... но какого хрена они ее с всплывающего меню убрали....
19 авг 05, 10:47    [1801292]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть сколько места занимает индекс или таблица?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
exec sp_msforeachtable N'exec sp_spaceused ''?''' 
19 авг 05, 10:47    [1801294]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить