Cálculo de La Metrica de Una Base de Datos.
Cálculo de La Metrica de Una Base de Datos.
Cálculo de La Metrica de Una Base de Datos.
Estimación de crecimiento de
tablas
En general para realizar una estimación del tamaño de una base de datos, esta debe
efectuarse del tamaño de cada tabla por separado, luego sumar los valores
obtenidos. El tamaño de una tabla depende de si tiene índices y, si los tiene, del
tipo de índices, así como columnas y sus tipos de datos.
Calcular la estimación del crecimiento de las tablas, es una tarea poco exacta
cuando se trata de una base de datos nueva, pues no se tienen estadísticas reales
del crecimiento y los cálculos deben realizarse de forma manual o simulando datos
en las tablas para que se generen estadísticas de los mismos.
Estimación manual
Para obtener la estimación de espacio necesario para almacenar la base datos si esta es nueva, se han
definido los siguientes tamaños:
Para calcular de forma manual el tamaño de las tablas, debe seguir los siguientes pasos:
Número de filas libres por página (filasLibresPorPág) = 8096 x ((100 - factorRelleno) / 100)
/ tñoFila
7. Cálculo de la cantidad de espacio necesario para almacenar los datos en una tabla (8192 bytes
por página):
Para calcular en tamaño total de las tablas, primero se deben calcular el tamaño de sus índices
(agrupados y no agrupados).
Para calcular de forma manual el tamaño de los índices agrupados(non clustered), debe seguir los
siguientes pasos:
1. Se repite el cálculo hasta que el número de páginas para un nivel n dado (númPágsNiveln)
sea igual a uno.
2. Luego se calcula:
Lo que tenemos que hacer es sumar el espacio de las columnas, a ese resultado
multiplicarlo por la cantidad de filas que se estima para la tabla y luego agregarle
un porcentaje de overhead del motor de un 5% y luego un riesgo al crecimiento que
puede ir entre un 5% o 15%.
El query que nos dará la información es el siguiente, para ello debemos indicar la
cantidad de registros estimados que tendrá la tabla, si se trata de un catálogo, esto
es muy simple determinar, pero si se trata de una tabla operativa, esto deberá
determinarse por juicio de experto.
select (sum(data_lenght)*&cantidad_de_registros* 1.2*1.05)/1024/1024
\"Espacio a reservar en Mb\"
from dba_tab_columns
where owner = &owner
and table_name = &table_name;
DECLARE
ub NUMBER;
ab NUMBER;
cl sys.create_table_cost_columns;
BEGIN
cl := sys.create_table_cost_columns( sys.create_table_cost_colinfo('CHAR',3),
sys.create_table_cost_colinfo('VARCHAR2',256),
sys.create_table_cost_colinfo('CHAR',3),
sys.create_table_cost_colinfo('VARCHAR2',20),
sys.create_table_cost_colinfo('CHAR',4),
sys.create_table_cost_colinfo('NUMBER',2));
DBMS_SPACE.CREATE_TABLE_COST('SYSTEM',cl,100,0 ,ub,ab);
DBMS_OUTPUT.PUT_LINE('Used MB: ' || round(ub/1024/1024,2));
DBMS_OUTPUT.PUT_LINE('Alloc MB: ' || round(ab/1024/1024,2));
END;
/
Donde 100, es el número de filas con el cual se desea realizar el cálculo, este valor
como se comentó anteriormente se debe estimar en función del tipo de tabla y una
estimación a juicio de experto del número de registros que se espera que almacene.
Es posible calcular el espacio que ocuparan los índices que deseamos crear, para
ello existe el SP CREATE_INDEX_COST, basta con que pasemos por parámetro el
script de creación del índices al índice y nos regresara el espacio que debemos
considerar.
declare
l_used_bytes int;
l_alloc_bytes int;
begin
dbms_space.create_index_cost(ddl => 'create index t_idx1 on t(c1,c2,c3)',
used_bytes => l_used_bytes,
alloc_bytes => l_alloc_bytes);
dbms_output.put_line('Espacio ocupado ' || round(l_used_bytes/1024/1024,2));
dbms_output.put_line('Espacio alocado ' || round(l_alloc_bytes/1024/1024,2));
end;
/
Donde, en create index t_idx1 on t(c1,c2,c3), se indica el script del índice que
deseamos crear.
Nota: La sumatoria del tamaño total de todas las tablas de una base de datos,
determinaran por lo consiguiente el tamaño que ocupara la base de datos.
Tamaño de la base de datos = ∑ Tamaño total de la tabla (bytes)
El siguiente script nos será útil para calcular el UNDO Tablespace, &hs
corresponde a la cantidad de horas de retención de la información, este valor debe
establecerse según nuestras necesidades.
set linesize 200
col retention_segs format a15
col management format a10
col TABLESPACE_NAME format a30
select tablespace_name,
(select value from v$parameter where name = 'undo_management') management,
(select value from v$parameter where name = 'undo_retention') retention_segs,
(select sum(bytes)/1024/1024 from
dba_data_files where tablespace_name = a.tablespace_name) Tamano_Actual,
(&hs*3600*(select avg(UNDOBLKS)/10/60*1.5 UPS
from V$UNDOSTAT)*block_size)/1024/1024 Tamano_req_MB_AVG,
(&&hs*3600*(select max(UNDOBLKS)/10/60*1.5 UPS
from V$UNDOSTAT)*block_size)/1024/1024 Tamano_req_MB_MAX
from dba_tablespaces a
where contents = 'UNDO';
PARAMETROS DE CONFIGURACION DE LA
BASE DE DATOS
select name, type, value from v$parameter;
set pagesize 0
select * from v$version;
VOLUMETRIA FISICA
VOLUMETRIA LOGICA
TABLESPACES
select tablespace_name as \"TABLESPACE\", block_size as \"BLOQUE DE
DATOS\", status as \"ESTATUS\", logging as \"LOGGING\",
extent_management as \"EXTENCION\", allocation_type as \"TIPO DE
ASIGNACION\", segment_space_management as \"SEGMENTO\",
retention as \"RETENCION\"
from dba_tablespaces;
VERIFICACION DE ESTADISTICAS EN
INDICES
select decode(to_char(last_analyzed,'DD-MM-RRRR'),null,'CON FALTA DE
ESTADISTICAS',to_char(last_analyzed,'DD-MM-RRRR')) as \"ANALISIS\",
count(index_name) as \"TOTAL DE INDICES\"
from dba_indexes
group by to_char(last_analyzed,'DD-MM-RRRR')
order by to_char(last_analyzed,'DD-MM-RRRR');