Buscar este blog

jueves, 2 de junio de 2016

INITRANS Oracle como se calcula?

El valor máximo sugerido para INITRANS es 100 y la configuración más de este tamaño rara vez mejorar el rendimiento. Por lo tanto un ajuste de INITRANS al número promedio de usuarios simultáneos DML y ajuste MAXTRANS a 100 resultado muy probablemente en la mejor utilización de los recursos y el rendimiento. Recuerde, cada ITL requiere aproximadamente 23 bytes en la cabecera del bloque.

INITRANS Relationship with DB_BLOCK_SIZE. 
(Doc ID 151473.1)

  1.   Calcular el espacio requerido por la cabecera del bloque:
bloque de tamaño de la cabecera encabezado fijo 
encabezado transacción variable 
donde:
encabezado fijo 113 bytes
encabezado transacción variable = 23 * i donde i es el valor de INITRANS
                                             
Suponiendo que el INITRANS = 2 (el valor por defecto para los índices), 
la fórmula anterior pueden 
reducirse a:
tamaño de cabecera de bloque = 113 + (23 * 2) bytes
                    = 159 bytes

El espacio reservado para datos de índice, según lo especificado por PCTFREE
se calcula como un porcentaje del tamaño de bloque menos la cabecera del bloque.

espacio de datos disponible = (bloque de tamaño - Tamaño de bloque de 
encabezado) - ((Tamaño de bloque - tamaño del encabezado del bloque) * 
(PCTFREE / 100))

Suponiendo un tamaño de bloque de 2048 bytes y PCTFREE de 10:

espacio de datos disponible =
(16384 bytes - 159 bytes) - ((16384 bytes - 159 bytes) * (10/100))
                              = 16225 bytes - 1622,5 bytes
                              = 14602,5 bytes

El cálculo de las longitudes de columna combinada de un valor medio del índice es 
el mismo que el cálculo de tamaño de la tabla, a excepción sólo es necesario 
para calcular la longitudes promedio combinado de columna de las columnas en el 
índice. Esta fórmula es que aparece arriba.

Una vez que la longitud de la columna combinada de una entrada promedio del 
índice se ha calculado, el tamaño de entrada promedio total se puede calcular,
usando la fórmula:

  bytes por entrada = encabezado de la entrada + longitud ROWID + F + V + D
  donde:
        encabezado de la entrada = 1 byte

        Longitud ROWID = 6 bytes

        F = longitud bytes totales de todas las columnas con la columna 1 byte 
                       longitudes (CHAR, NÚMERO, FECHA tipos, y ROWID)

        V = bytes longitud total de todas las columnas con la columna 3 byte 
                       longitudes (VARCHAR2 y tipos de datos RAW)

        D = espacio de datos combinado de todas las columnas (desde arriba)

 Aquí, de nuevo se aplica que habría un byte para columnas
 con una longitud real entre 1 y 250 A continuación, para longitudes de
 251 a 64 K, utilizamos 3 bytes (byte de marcas 0xFE, 2 bytes de longitud real). 

Nota 231214.1 describe este aspecto con más precisión.

Por ejemplo, dado que D se calcula que es 22 bytes (de la tabla 
cálculos anteriores), y que el índice se compone de tres columnas CHAR, la
tamaño total de entrada promedio del índice es:

  bytes por entrada = 1 + 6 + (3 * 1) + (3 * 0) + 22 bytes
                  = 32 bytes

Para calcular el número de bloques y bytes requeridos para el índice, utilice:

  número de bloques 
  para index = 1.1 * ((número de filas no nulas * promedio. tamaño de entrada) / 
                     ((Piso (en vano. Espacio de datos / promedio. 
Tamaño de entrada)) *
                     (Promedio. Tamaño de entrada))

Nota: El 10% adicional añadido a este resultado las cuentas por el espacio extra
      necesaria para los bloqueos de rama del índice.

  número de bloques
  para index = 1.1 * ((10000 * 32 bytes) / ((piso (1700-1732 bytes)) *
                           (32 bytes))
                   = 208 bloques

El número de bytes se puede calcular multiplicando el resultado por la base de 
datos
tamaño de bloque. Este método de índices es más aproximado que para tablas.
http://oraclesniplets.tumblr.com/page/57


SELECT dbms_rowid.rowid_relative_fno(rowid), DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid),COUNT(*)NUMBER_ROWS_PER_BLOCK
FROM prog_programa_bin
GROUP BY dbms_rowid.rowid_relative_fno(rowid), DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)
Order by COUNT(*) desc;
                   

select name, blocks  "ALLOCATED|BLOCKS", lf_blks "LEAF|BLOCKS",  br_blks "BRANCH|BLOCKS", blocks-(lf_blks+br_blks) "UNUSED|BLOCKS" from index_stats;

SELECT NAME, BTREE_SPACE, USED_SPACE, PCT_USED FROM INDEXes_STATS;

select tablespace_name,segment_name,sum(blocks) Bloques, sum(bytes/1024/1024) Espacio_Mb
from dba_extents
where segment_type='INDEX'
and owner='SIGFE_TX'
group by tablespace_name,segment_name;

No hay comentarios.: