Espacio utilizado por los ficheros de base de datos

27/01/2005 - 12:05 por Alberto Jimenez | Informe spam
Buenos dias,
Se puede saber como calcula el espacio asignado a los ficheros de una base
de datos que aparece en el Enterprise Manager, tanto el ocupado como el
libre y si es posible en que tablas del sistema los guarda, me imagino que
sera en la master o con algun procedimiento almacenado,
Muchas gracias a todos.

Preguntas similare

Leer las respuestas

#1 Tinoco
27/01/2005 - 13:29 | Informe spam
Alberto,

Para administrar el tamaño de los archivos, SQL Server maneja una estructura
de Extents y paginas, estas ultimas ocupan 8KB[8060 bytes], los datos son
almacenados en esta estructura muy similar a un disco duro, dejando espacio
libre cuando algo es modificado o eliminado.

De manera global se puede decir que el tamaño es definido por la sumatoria
del tamaño de las tablas e indices, y las tablas se definen por la sumatoria
del tamaño de sus columnas multiplicado por la cantidad de registros.

Para ver el tamaño de los archivos puedes utilizar:
* Enterprise manager
* sp_helpdb BD, para ver el tamaño de la BD y sus archivos.
* sp_spaceused, para ver el espacio usado y libre de una BD.

Tinoco
Colombia

"Alberto Jimenez" wrote:

Buenos dias,
Se puede saber como calcula el espacio asignado a los ficheros de una base
de datos que aparece en el Enterprise Manager, tanto el ocupado como el
libre y si es posible en que tablas del sistema los guarda, me imagino que
sera en la master o con algun procedimiento almacenado,
Muchas gracias a todos.



Respuesta Responder a este mensaje
#2 Alberto Jimenez
27/01/2005 - 13:42 | Informe spam
Ticono,
Gracias
Pero lo que quiero sacar es la misma informacion que da el enterprise, esto
es separado por ficheros fisicos, que cantidad esta ocupada y que cantidad
esta libre.
"Tinoco" escribió en el mensaje
news:
Alberto,

Para administrar el tamaño de los archivos, SQL Server maneja una


estructura
de Extents y paginas, estas ultimas ocupan 8KB[8060 bytes], los datos son
almacenados en esta estructura muy similar a un disco duro, dejando


espacio
libre cuando algo es modificado o eliminado.

De manera global se puede decir que el tamaño es definido por la sumatoria
del tamaño de las tablas e indices, y las tablas se definen por la


sumatoria
del tamaño de sus columnas multiplicado por la cantidad de registros.

Para ver el tamaño de los archivos puedes utilizar:
* Enterprise manager
* sp_helpdb BD, para ver el tamaño de la BD y sus archivos.
* sp_spaceused, para ver el espacio usado y libre de una BD.

Tinoco
Colombia

"Alberto Jimenez" wrote:

> Buenos dias,
> Se puede saber como calcula el espacio asignado a los ficheros de una


base
> de datos que aparece en el Enterprise Manager, tanto el ocupado como el
> libre y si es posible en que tablas del sistema los guarda, me imagino


que
> sera en la master o con algun procedimiento almacenado,
> Muchas gracias a todos.
>
>
>
Respuesta Responder a este mensaje
#3 Salvador Ramos
27/01/2005 - 14:00 | Informe spam
Mira el procedimiento almacenado sp_spaceused

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Alberto Jimenez" escribió en el mensaje
news:%23c09t$
Buenos dias,
Se puede saber como calcula el espacio asignado a los ficheros de una base
de datos que aparece en el Enterprise Manager, tanto el ocupado como el
libre y si es posible en que tablas del sistema los guarda, me imagino que
sera en la master o con algun procedimiento almacenado,
Muchas gracias a todos.


Respuesta Responder a este mensaje
#4 qwalgrande
27/01/2005 - 14:23 | Informe spam
Hola.

Creo que es la tercera o cuarta vez que respondo a lo mismo en el foro,
ahora que yo encantado de hacerlo las veces que haga falta con tal de echar
un cable.

Te adjunto lo que yo uso, que es una adaptación de algo que encontré ya no
me acuerdo donde. Es un procedimiento almacenado temporal que devuelve lo que
creo que vas buscando. Es un poco largo, así que me despido antes.

qwalgrande

use master
go

if exists (select * from dbo.sysobjects where id object_id(N'[dbo].[#sp_dbspaceall]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_dbspaceall]
GO


CREATE procedure #sp_dbspaceall(@all char(1)='N')
as

set nocount on

declare @cmd varchar(500)
declare @db varchar(128)

create table #results(FileType varchar(4) NOT NULL,
[Name] sysname NOT NULL,
Total numeric(9,2) NOT NULL,
Used numeric(9,2) NOT NULL,
[Free] numeric(9,2) NOT NULL,
dbname sysname NULL)

create table #data(Fileid int NOT NULL,
[FileGroup] int NOT NULL,
TotalExtents int NOT NULL,
UsedExtents int NOT NULL,
[Name] sysname NOT NULL,
[FileName] varchar(300) NOT NULL)

create table #log(dbname sysname NOT NULL,
LogSize numeric(15,7) NOT NULL,
LogUsed numeric(9,5) NOT NULL,
Status int NOT NULL)

If @all='N' /* just the current database */
begin
/* Get data file(s) size */
insert #data
exec('DBCC showfilestats')

/* Get log file(s) size */
insert #log
exec('dbcc sqlperf(logspace)')

insert #results(FileType,[Name],Total,Used,[Free])
select 'Data',
left(right([FileName],charindex('\',reverse([FileName]))-1),
charindex('.',right([FileName],
charindex('\',reverse([FileName]))-1))-1),
CAST(((TotalExtents*64)/1024.00) as numeric(9,2)),
CAST(((UsedExtents*64)/1024.00) as numeric(9,2)),
(CAST(((TotalExtents*64)/1024.00) as numeric(9,2))
-CAST(((UsedExtents*64)/1024.00) as numeric(9,2)))
from #data

union all

select 'Log',dbname+'_log',LogSize,
((LogUsed/100)*LogSize),LogSize-((LogUsed/100)*LogSize)
from #log
where dbname = db_name()

select FileType,[Name],Total,Used,[Free]
from #results order by FileType

drop table #data
drop table #log
drop table #results

return
end
else
begin

/* Get data file(s) size */
declare dcur cursor local fast_forward
for
select CATALOG_NAME
from INFORMATION_SCHEMA.SCHEMATA
where has_dbaccess(CATALOG_NAME) = 1

open dcur

fetch next from dcur into @db

while @@fetch_status=0
begin

set @cmd = 'use ' + @db + ' DBCC showfilestats'
insert #data
exec(@cmd)

insert #results(FileType,[Name],Total,Used,[Free],dbname)
select 'Data',

left(right([FileName],charindex('\',reverse([FileName]))-1),
charindex('.',right([FileName],
charindex('\',reverse([FileName]))-1))-1),
CAST(((TotalExtents*64)/1024.00) as numeric(9,2)),
CAST(((UsedExtents*64)/1024.00) as numeric(9,2)),
(CAST(((TotalExtents*64)/1024.00) as numeric(9,2))
-CAST(((UsedExtents*64)/1024.00) as numeric(9,2))),
@db
from #data

delete #data

fetch next from dcur into @db

end
close dcur
deallocate dcur

/* Get log file(s) size */
insert #log
exec('dbcc sqlperf(logspace)')

insert #results(FileType,[Name],Total,Used,[Free],dbname)
select 'Log',dbname+'_log',LogSize,
((LogUsed/100)*LogSize),LogSize-((LogUsed/100)*LogSize),
dbname
from #log


select dbname,FileType,[Name],Total,Used,[Free]
from #results order by dbname,FileType

drop table #data
drop table #log
drop table #results

return

end

GO

exec #sp_dbspaceall 'Y'
GO

drop procedure #sp_dbspaceall

GO



"Alberto Jimenez" wrote:

Ticono,
Gracias
Pero lo que quiero sacar es la misma informacion que da el enterprise, esto
es separado por ficheros fisicos, que cantidad esta ocupada y que cantidad
esta libre.
"Tinoco" escribió en el mensaje
news:
> Alberto,
>
> Para administrar el tamaño de los archivos, SQL Server maneja una
estructura
> de Extents y paginas, estas ultimas ocupan 8KB[8060 bytes], los datos son
> almacenados en esta estructura muy similar a un disco duro, dejando
espacio
> libre cuando algo es modificado o eliminado.
>
> De manera global se puede decir que el tamaño es definido por la sumatoria
> del tamaño de las tablas e indices, y las tablas se definen por la
sumatoria
> del tamaño de sus columnas multiplicado por la cantidad de registros.
>
> Para ver el tamaño de los archivos puedes utilizar:
> * Enterprise manager
> * sp_helpdb BD, para ver el tamaño de la BD y sus archivos.
> * sp_spaceused, para ver el espacio usado y libre de una BD.
>
> Tinoco
> Colombia
>
> "Alberto Jimenez" wrote:
>
> > Buenos dias,
> > Se puede saber como calcula el espacio asignado a los ficheros de una
base
> > de datos que aparece en el Enterprise Manager, tanto el ocupado como el
> > libre y si es posible en que tablas del sistema los guarda, me imagino
que
> > sera en la master o con algun procedimiento almacenado,
> > Muchas gracias a todos.
> >
> >
> >



Respuesta Responder a este mensaje
#5 Alberto Jimenez
27/01/2005 - 15:06 | Informe spam
Muchas gracias esto es lo que estaba buscando.
saludos.
alberto
"qwalgrande" <qwalgrande*nospam*@yahoo.es> escribió en el mensaje
news:
Hola.

Creo que es la tercera o cuarta vez que respondo a lo mismo en el foro,
ahora que yo encantado de hacerlo las veces que haga falta con tal de


echar
un cable.

Te adjunto lo que yo uso, que es una adaptación de algo que encontré ya no
me acuerdo donde. Es un procedimiento almacenado temporal que devuelve lo


que
creo que vas buscando. Es un poco largo, así que me despido antes.

qwalgrande

use master
go

if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[#sp_dbspaceall]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_dbspaceall]
GO


CREATE procedure #sp_dbspaceall(@all char(1)='N')
as

set nocount on

declare @cmd varchar(500)
declare @db varchar(128)

create table #results(FileType varchar(4) NOT NULL,
[Name] sysname NOT NULL,
Total numeric(9,2) NOT NULL,
Used numeric(9,2) NOT NULL,
[Free] numeric(9,2) NOT NULL,
dbname sysname NULL)

create table #data(Fileid int NOT NULL,
[FileGroup] int NOT NULL,
TotalExtents int NOT NULL,
UsedExtents int NOT NULL,
[Name] sysname NOT NULL,
[FileName] varchar(300) NOT NULL)

create table #log(dbname sysname NOT NULL,
LogSize numeric(15,7) NOT NULL,
LogUsed numeric(9,5) NOT NULL,
Status int NOT NULL)

If @all='N' /* just the current database */
begin
/* Get data file(s) size */
insert #data
exec('DBCC showfilestats')

/* Get log file(s) size */
insert #log
exec('dbcc sqlperf(logspace)')

insert #results(FileType,[Name],Total,Used,[Free])
select 'Data',
left(right([FileName],charindex('\',reverse([FileName]))-1),
charindex('.',right([FileName],
charindex('\',reverse([FileName]))-1))-1),
CAST(((TotalExtents*64)/1024.00) as numeric(9,2)),
CAST(((UsedExtents*64)/1024.00) as numeric(9,2)),
(CAST(((TotalExtents*64)/1024.00) as numeric(9,2))
-CAST(((UsedExtents*64)/1024.00) as numeric(9,2)))
from #data

union all

select 'Log',dbname+'_log',LogSize,
((LogUsed/100)*LogSize),LogSize-((LogUsed/100)*LogSize)
from #log
where dbname = db_name()

select FileType,[Name],Total,Used,[Free]
from #results order by FileType

drop table #data
drop table #log
drop table #results

return
end
else
begin

/* Get data file(s) size */
declare dcur cursor local fast_forward
for
select CATALOG_NAME
from INFORMATION_SCHEMA.SCHEMATA
where has_dbaccess(CATALOG_NAME) = 1

open dcur

fetch next from dcur into @db

while @@fetch_status=0
begin

set @cmd = 'use ' + @db + ' DBCC showfilestats'
insert #data
exec(@cmd)

insert #results(FileType,[Name],Total,Used,[Free],dbname)
select 'Data',

left(right([FileName],charindex('\',reverse([FileName]))-1),
charindex('.',right([FileName],
charindex('\',reverse([FileName]))-1))-1),
CAST(((TotalExtents*64)/1024.00) as numeric(9,2)),
CAST(((UsedExtents*64)/1024.00) as numeric(9,2)),
(CAST(((TotalExtents*64)/1024.00) as numeric(9,2))
-CAST(((UsedExtents*64)/1024.00) as numeric(9,2))),
@db
from #data

delete #data

fetch next from dcur into @db

end
close dcur
deallocate dcur

/* Get log file(s) size */
insert #log
exec('dbcc sqlperf(logspace)')

insert #results(FileType,[Name],Total,Used,[Free],dbname)
select 'Log',dbname+'_log',LogSize,
((LogUsed/100)*LogSize),LogSize-((LogUsed/100)*LogSize),
dbname
from #log


select dbname,FileType,[Name],Total,Used,[Free]
from #results order by dbname,FileType

drop table #data
drop table #log
drop table #results

return

end

GO

exec #sp_dbspaceall 'Y'
GO

drop procedure #sp_dbspaceall

GO



"Alberto Jimenez" wrote:

> Ticono,
> Gracias
> Pero lo que quiero sacar es la misma informacion que da el enterprise,


esto
> es separado por ficheros fisicos, que cantidad esta ocupada y que


cantidad
> esta libre.
> "Tinoco" escribió en el mensaje
> news:
> > Alberto,
> >
> > Para administrar el tamaño de los archivos, SQL Server maneja una
> estructura
> > de Extents y paginas, estas ultimas ocupan 8KB[8060 bytes], los datos


son
> > almacenados en esta estructura muy similar a un disco duro, dejando
> espacio
> > libre cuando algo es modificado o eliminado.
> >
> > De manera global se puede decir que el tamaño es definido por la


sumatoria
> > del tamaño de las tablas e indices, y las tablas se definen por la
> sumatoria
> > del tamaño de sus columnas multiplicado por la cantidad de registros.
> >
> > Para ver el tamaño de los archivos puedes utilizar:
> > * Enterprise manager
> > * sp_helpdb BD, para ver el tamaño de la BD y sus archivos.
> > * sp_spaceused, para ver el espacio usado y libre de una BD.
> >
> > Tinoco
> > Colombia
> >
> > "Alberto Jimenez" wrote:
> >
> > > Buenos dias,
> > > Se puede saber como calcula el espacio asignado a los ficheros de


una
> base
> > > de datos que aparece en el Enterprise Manager, tanto el ocupado como


el
> > > libre y si es posible en que tablas del sistema los guarda, me


imagino
> que
> > > sera en la master o con algun procedimiento almacenado,
> > > Muchas gracias a todos.
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida