Calculo tamaño tabla

morgana
18 de Septiembre del 2004
Hola buenos dias,
Podriais indicarme como puedo calcular el tamaño exacto de una tabla?.
Muchas gracias.
Un saludo

Jorge-DBA
18 de Septiembre del 2004
Que tal morgana :

El cálculo de dimensionamiento de los segmentos de la base de datos es una tarea que tiene responsabilidad el DBA, en mi caso he dimencionado tablas, índices, Vistas Materializadas, etc. cualquier tipo de objeto que tenga que ver con el storage de la base, duarante casi 5 años, es una tarea muy compleja y que lleva bastante comprención sobre el comportamiento del crecimiento semanal, mensual o anual de la base de datos, he dimencionado Bases de datos pequeñas y las llamadas VLDB (Very large Data Base), que generalmente son data Ware Houses aproximadamente de 40 Tera Bytes de crecimiento anual, dependiendo de su dimencionamiento es como se verá afectado a futuro la fragmentación, una tabla o índice mal calculado puede provocar serios problemas en el entorno, en las nuevas versiones se ha trabajado mucho para simplificar la tarea de mantenimiento.

Tienes que tomar en cuenta el Bloque del sistema operativo y el bloque de datos de Oracle que se configuró en su creación que debe ser múltiplo del S.O., o bien a partir de Oracle 9.X puedes tener diferentes mediadas de bloques de datos en los Tablespaces, ademas que los puedes gestionar localmente haciendo cuadrículasd de información.

En el siguiente ejemplo te muestro como es que se dimencionan los objetos, es casi preciso y tiene una variación ya que son estimaciones dependiendo la tendencia de la tabla, ya que puedes dividirla en tablas históricas, de catálogo, temporales o de agregación, dependiendo de estas tendencias, la configuración es diferente por su dinamísmo que cumplen en la BD.

Calculo sobre un segmento de tipo tabla no agrupada.

Calcula la cantidad de espacio que se va a utilizar en la cabecera del bloque, el tamaño de la cabecera es de 90 bytes, si utilizas un bloque de 2K quedarán 1.958 libres minetras que si utilizas uno de 4K habría 4.006 bytes libres

2048 - 90 = 1958 bytes disponibles.

A continuación multiplica el espacio libre por el factor que viene determinado el enl parámetro PCTFREE del segmento para determinar el espacio que se va a reservar para la actualización de filas.

Si utilizas un valor de PCTFREE de 10, multiplica el espacio libre disponible por 0,10 tal y como se muestra a continuación:

1958*(pctfree/100) = 1958*.01 = 196 (redondeado)

del espacio disponible, 196 bytes son para las aplicaciones de las filas. El espacio libre disponible es el espacio libre del bloque menos el espacio rerservado por PCTFREE:

1958 - 196 = 1762 BYTES DISPONIBLES.

De los 2.048 bytes del bloque, 1762 se utilizan para almacenar filas.

En el siguinete paso habrá que calcular el espacio que se va a utilizar por fila. para ello hayq ue estimar primero la "longitud media de las filas" AVERAGE LENGTH de cada valor de una fila. si no dispones de ningun dato, realiza una estimación de la longitud real de los valores de una columna. No utilices como longitud real la longitud de una columna a menos que los datos vayan a llenar siempre por completo la columna.

Por ejemplo vamos a suponer que tenemos una tabla de tres columnas de tipo VARCHAR2(10). La longitud media de las filas no puede excder de 30 posiciones su longitud real depende de los daros que se vayan a almacenar en ellas.

Si dispones de algún dato de ejemplo, podrías utilizar la función de Oracle VSIZE para determinar el espacio real que han utilizado los datos. ejemplo:

select AVG(NVL(VSIZE(Columna1),0))+
AVG(NVL(VSIZE(Columna2),0))+
AVG(NVL(VSIZE(Columna3),0))) Long_media
from tabla
/

En este ejemplo se han calculado la longitud media de cada columna y luego se han sumado esas medias para determinar la longitud media o el Average Lenght.

Vamos a suponer que en el ejemplo la longitud media de las filas es de 24 bytes. A esta cantidad total vamos a sumarle 1 byte por cada columna que ya haya en la tabla, da un total de 27 bytes por fila. Si en la tabla hay columnas que contienen datos de más de 250 caracteres, añade un byte adicional por cada una de esas columnas, por último añade 3 bytes para la cabecera de la fila.

Espacio utilizado = longitud media + 3 + numero de columnas +numero de columnas extensas.

En la tabla ejemplo el espacio por fila es el siguinete:

espacio utilizado por file= 24 + 3 + 3 + 0 = 30 bytes por fila.

Dado que disponemos de 1.762 bytes y 30 bytes por fila, se puede incluir 58 filas pen cada bloque.

filas por bloque =TRUNC(1762 BYTES LIBRES / 30 BYTES OIR FILA) = 58 FILAS POR BLOQUE.

al poderse incluir 58 filas por bloque, en cuanto puedas estimar el número de filas que esperas que haya, podrás estimar eñ númro de bloques de datos de Oracle que se requieren.


Saludos y Suerte!