Search This Blog

Thursday, June 11, 2009

Comprimir o no comprimir, esa es la cuestion

Muchas personas preguntan acerca de las ventajas de comprimir, muchos quieren saber si deben o no deben comprimir sus tablas, saber con cuales ganan y con cuales no, saber si van a mejorar o si por el contrario, los algoritmos pueden jugar en su contra.

Bueno, dedique una tarde a determinar como hacer para que cualquier persona pueda saber si debe o no debe comprimir sus datos.

1. Determinemos cuanto espacio podriamos ahorrar en una tabla, para esto usaremos el procedimiento almacenado sp_estimate_data_compression_savings, con este vamos a determinar que ventajas tenemos al comprimir una tabla, para esto vamos a ejecutar el siguiente codigo

EXEC sp_estimate_data_compression_savings 
'Production', 
'TransactionHistory', 
null, null, 'ROW'


Aqui, sencillamente estamos estimando el mejoramiento que tendremos al comprimir la tabla TransactionHistory, del esquema Production.



image



Aqui lo que podemos leer es lo siguiente:



Por ejemplo, en el indice 1, podemos determinar que tenemos un tamano actual de 6352 KB, y podemos estimar que al comprimirlo, lograriamos un tamano de 4208 KB, que es una reduccion del 33,5%.



Ahora, podemos hacer esto una y otra vez, objeto por objeto, o podemos sentarnos unos minutos y escribir una consulta que nos permita ejecutar esto para todos los objetos, yo decidi hacerlo, y aqui lo tengo para ustedes.





   1: Create table ##tb ([object_name] varchar(500), 



   2: [schema_name] varchar(500),  



   3: [index_id] int, partition_number int,



   4: [size_with_current_compression_setting (KB)] bigint,



   5: [size_with_requested_compression_setting (KB)] bigint,



   6: [sample_size_with_current_compression_setting (KB)] bigint,



   7: [sample_size_with_requested_compression_setting (KB)] bigint)



   8: Declare @Esquema varchar(200), @Tabla varchar(200)



   9: declare Tabla_Cursor cursor for



  10: Select s.[name] Esquema, t.[name] Tabla  from sys.schemas s



  11: inner join sys.tables t on s.[schema_id] = t.[schema_id]



  12: Order by s.[name], t.[name]



  13: OPEN Tabla_Cursor



  14: Fetch next from Tabla_Cursor into @Esquema, @Tabla



  15: While @@FETCH_STATUS = 0



  16: Begin



  17:     insert ##tb 



  18:     exec sp_estimate_data_compression_savings 



  19:     @Esquema, @Tabla, NULL, NULL, @Tipo ;



  20:     Fetch next from Tabla_Cursor into @Esquema, @Tabla;



  21: End



  22: Close Tabla_Cursor



  23: Deallocate Tabla_Cursor



  24: select * From ##tb



  25: Drop table ##tb






Sin embargo debemos tener en cuenta que esto debe ser ejecutado bajo el contexto de cada base de datos.





Igualmente, senti la necesidad de hacer un reporte que nos permitiera hacer esto mucho mas rapido.



image



Aqui lo que podemos ver es una diferenciacion simple, de cuanto podriamos llegar a ahorrar en espacio comparando la compresion actual de su base de datos, versus la compresion seleccionada.



Si quieres descargar este reporte puedes dar clic aqui



No comments:

LinkWithin

Related Posts Plugin for WordPress, Blogger...