Discussion:
Espacio reservado en una tabla
(demasiado antiguo para responder)
N30
2009-05-25 16:08:08 UTC
Permalink
Hola a todos:

Tengo un problema que llevo tiempo intentando solucionar, pero esta
llegando a un punto que es totalmente inviable.

Actualmente tengo una DB que ocupa 6,5 GB de los cuales 4.4 GB los
ocupa el espacio reservado de una tabla. He intentado con un DBCC
REINDEX y UN SHRINK a la DB, pero sigue igual.

¿Alguién puede ayudarme?

Muchas gracias por todo.

PD: A continuación escribo un resumen del SP_SPACEUSED

DB

RESERVED DATA INDEX SIZE UNNUSED
7438768 KB 2161096 KB 287656 KB 4990016 KB



TABLA
ROWS RESERVED DATA
INDEX_SIZE UNNUSED
Historico 548773 4443264 KB 557480 KB 14744 KB 3871040
KB
Alejandro Mesa
2009-05-25 16:35:13 UTC
Permalink
1 - Trata de ejecutar el procedimiento pidiendole a SQL Server que actualize
los valores.

EXEC sp_spaceused 'dbo.historico', @updateusage = 'True';
GO

2 - Si no cambia el valor, entonces significa que por alguna razon SQL
Server no esta liberando el espacio no usado.

2.a - Tienes un indice clustered en esa tabla?

Si no tienes, entonces deberias crearlo para que SQL Server pueda
manejar mejor el espacio no usado.

2.b - Haz eliminado alguna columna de tamanio variable en esa tabla?

Si es asi, entonces prueba con el comando "dbcc cleantable"

DBCC CLEANTABLE (tu_db,"dbo.historico", 0)
WITH NO_INFOMSGS;
GO


AMB
Post by N30
Tengo un problema que llevo tiempo intentando solucionar, pero esta
llegando a un punto que es totalmente inviable.
Actualmente tengo una DB que ocupa 6,5 GB de los cuales 4.4 GB los
ocupa el espacio reservado de una tabla. He intentado con un DBCC
REINDEX y UN SHRINK a la DB, pero sigue igual.
¿Alguién puede ayudarme?
Muchas gracias por todo.
PD: A continuación escribo un resumen del SP_SPACEUSED
DB
RESERVED DATA INDEX SIZE UNNUSED
7438768 KB 2161096 KB 287656 KB 4990016 KB
TABLA
ROWS RESERVED DATA
INDEX_SIZE UNNUSED
Historico 548773 4443264 KB 557480 KB 14744 KB 3871040
KB
N30
2009-05-25 22:33:22 UTC
Permalink
Estimado Alejandro:

La base de datos a la que hace referencia es la DB de un programa por
lo que no se exactamente que es lo que ha podido pasarle.

He probado el comando sp_spaceused que me comentas en el punto 1 y el
comando DBCC CELANTABLE que me comentas en el punto 2.b y sigue
exactamente igual que al principio. No he probado el 2.a por que no se
a que te refieres con el indice clustered.

Muchas gracias por tu ayuda.
N30
2009-05-25 22:46:58 UTC
Permalink
Una cosa importante que no he comentado, el servidor SQL es SQL 2000
P.E.
Alejandro Mesa
2009-05-26 00:33:11 UTC
Permalink
Execute este script y postea el resultado si es posible.

USE tu_db;
GO

EXEC sp_helpindex 'dbo.historico';
GO


AMB
Post by N30
Una cosa importante que no he comentado, el servidor SQL es SQL 2000
P.E.
N30
2009-05-26 22:12:57 UTC
Permalink
Estimado Alejandro acabo de ejecutar el comando que me has comentado,
el resultado es el siguiente.


INDEX_NAME INDEX
DESCRIPTION
INDEX_KEYS

PK_Historico nonclustered, unique, primary key located on
PRIMARY IdOrden, IdAlmacen


Muchisimas gracias por tu ayuda.
Alejandro Mesa
2009-05-27 13:22:01 UTC
Permalink
Como me inmagine, esta tabla no tiene un indice clustered. Debes crear uno
para en caso de eliminacion, poder manejar mejor el espacio no usado.

Si esta tabla guarda datos historicos, de seguro tendras alguna columna tipo
datetime en la que guardes la fecha/hora de la transaccion o la orden. esta
columna pudiera ser una buena candidata para crear el indice clustered.

create clustered index idx_historico_FechaOrden_c
on dbo.historico(FechaOrden);
go

Yo no se que tipo de operacion realizas sobre esta tabla
(insert/update/delete) ni con que frecuencia asi que no puedo sugerir el
valor de fillfactor para este indice.

Ejecuta el procedimiento sp_spaceused despues de haber creado el indice
clustered y dinos que pasa.


AMB
Post by N30
Estimado Alejandro acabo de ejecutar el comando que me has comentado,
el resultado es el siguiente.
INDEX_NAME INDEX
DESCRIPTION
INDEX_KEYS
PK_Historico nonclustered, unique, primary key located on
PRIMARY IdOrden, IdAlmacen
Muchisimas gracias por tu ayuda.
N30
2009-05-27 13:50:49 UTC
Permalink
Estimado Alejandro:

Muchísimas gracias por tu ayuda, gracias a lo que me has dicho parece
ser que se ha solucionado el problema, actualmente los datos que me
devuelve el SPACEUSED son los siguientes


Name Rows Reserved
Data Index_size Unnused

Historico 538424 28096
16944 11104 48


Asimismo aprovecho la ocasión para que me recomiendes algún manual
sobre SQL SERVER ya que veo que estoy muy verde en el tema.

Muchas gracias por tu inestimable ayuda
Alejandro Mesa
2009-05-27 16:12:01 UTC
Permalink
Me alegra haber podido ayudarte.

En cuanto a libros, yo te recomiendo la linea de "Inside Microsoft SQL
Server ...". Tienes para 2005 y 2008.

Microsoft® SQL Server® 2008 Internals
http://www.amazon.com/Microsoft%C2%AE-SQL-Server%C2%AE-2008-Internals/dp/0735626243/ref=pd_bxgy_b_text_b

Microsoft® SQL Server® 2008 T-SQL Fundamentals
http://www.amazon.com/Microsoft%C2%AE-Server%C2%AE-T-SQL-Fundamentals-PRO-Developer/dp/0735626014/ref=pd_bxgy_b_text_c

Inside Microsoft® SQL Server® 2008: T-SQL Querying
http://www.amazon.com/Inside-Microsoft%C2%AE-SQL-Server%C2%AE-2008/dp/0735626030/ref=pd_sim_b_2

-- Este no ha salido aun, pero lo hara pronto
Inside Microsoft® SQL Server® 2008: T-SQL Programming


Si todavia trabajas con la version 2005, entonces te recomiendo estos para
aprender sobre como funciona SQL Server y como tunearlo.

Inside Microsoft SQL Server(TM) 2005: The Storage Engine
http://www.amazon.com/Inside-Microsoft-SQL-Server-2005/dp/0735621055/ref=pd_bxgy_b_text_b

Inside Microsoft® SQL Server(TM) 2005: Query Tuning and Optimization
http://www.amazon.com/Inside-Microsoft%C2%AE-SQL-Server-2005/dp/0735621969/ref=pd_bxgy_b_text_c

Microsoft SQL Server 2005 Unleashed
http://www.amazon.com/Microsoft-SQL-Server-2005-Unleashed/dp/0672328240/ref=pd_sim_b_13

Microsoft® SQL Server(TM) 2005 Administrator's Companion
http://www.amazon.com/Microsoft%C2%AE-Server-2005-Administrators-Companion/dp/0735621985/ref=pd_sim_b_2

Uno mas que considero muy importante y son los libros en linea. El team de
documentacion ha hecho un magnifico trabajo y creo que debe ser el primer
lugar donde buscar sobre topicos de importancia.

AMB
Post by N30
Muchísimas gracias por tu ayuda, gracias a lo que me has dicho parece
ser que se ha solucionado el problema, actualmente los datos que me
devuelve el SPACEUSED son los siguientes
Name Rows Reserved
Data Index_size Unnused
Historico 538424 28096
16944 11104 48
Asimismo aprovecho la ocasión para que me recomiendes algún manual
sobre SQL SERVER ya que veo que estoy muy verde en el tema.
Muchas gracias por tu inestimable ayuda
Alejandro Mesa
2009-05-27 15:43:06 UTC
Permalink
Olvide comentar que en la version 2008, podemos rehacer una tabla aunque esta
no tenga indice clustered, lo cual nos permite recuperar el espacio no usado.


AMB
Post by Alejandro Mesa
Como me inmagine, esta tabla no tiene un indice clustered. Debes crear uno
para en caso de eliminacion, poder manejar mejor el espacio no usado.
Si esta tabla guarda datos historicos, de seguro tendras alguna columna tipo
datetime en la que guardes la fecha/hora de la transaccion o la orden. esta
columna pudiera ser una buena candidata para crear el indice clustered.
create clustered index idx_historico_FechaOrden_c
on dbo.historico(FechaOrden);
go
Yo no se que tipo de operacion realizas sobre esta tabla
(insert/update/delete) ni con que frecuencia asi que no puedo sugerir el
valor de fillfactor para este indice.
Ejecuta el procedimiento sp_spaceused despues de haber creado el indice
clustered y dinos que pasa.
AMB
Post by N30
Estimado Alejandro acabo de ejecutar el comando que me has comentado,
el resultado es el siguiente.
INDEX_NAME INDEX
DESCRIPTION
INDEX_KEYS
PK_Historico nonclustered, unique, primary key located on
PRIMARY IdOrden, IdAlmacen
Muchisimas gracias por tu ayuda.
Continúe leyendo en narkive:
Loading...