Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Bloques oracle

Estas en el tema de Bloques oracle en el foro de Oracle en Foros del Web. Compañeros Espero no aburrirlos. Queriendo llevar un poco mas a la practica la teoria de las estructuras de memoria de Oracle (En este caso el ...
  #1 (permalink)  
Antiguo 11/01/2013, 08:29
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Bloques oracle

Compañeros

Espero no aburrirlos.

Queriendo llevar un poco mas a la practica la teoria de las estructuras de memoria
de Oracle (En este caso el data buffer cache) quise hacer un par de ejemplos:

Código SQL:
Ver original
  1. SELECT b.block#, b.STATUS, object_name, object_type, dirty "Dirty"
  2. FROM v$bh b, dba_objects o
  3. WHERE b.objd = o.data_object_id
  4. AND o.owner = 'SCOTT'

Con esta consulta traigo los bloques en memoria bajo el esquema scott.
Recien iniciada la instancia no trae datos. El databuffer cache está vacio.

Desde una sesión de scott (o cualquier otra) hago un select a la tabla emp (14 reg). Toma los bloques
de disco y los sube a memoria. Ejecuto nuevamente la consulta anterior y me sube 7 bloques con estado xcur (exclusive).

Al ejecutar un UPDATE a un registro de la tabla emp, solo un bloque (151 en este caso) pasa a estado
Dirty. Según la documentación, un bloque es dirty cuando no se garantiza que el bloque que esta en memoria
no es igual a lo que se encuentra en disco.

Al ejecutar la consulta
Código SQL:
Ver original
  1. SELECT dbms_rowid.rowid_block_number(ROWID)
  2. FROM scott.emp

los 14 regitros se encuentran en el bloque 151.

Mi primera pregunta sería.... Que contienen los otros bloques? Por que los sube a memoria al consultar la tabla emp?

Ejecuto durante 5 min aprox. la misma consulta y el bloque sigue dirty.
2. Cada cuanto se ejecuta el DBWR para llevar datos a disco?

Si ejecuto inmediatamente un checkpoint forzado y consulto nuevamente, los bloques ya no aparecen como dirty.

3. Por defecto cada cuanto se ejecuta el checkpoint?

Al ejecutar:
alter system flush buffer_cache;

Todos los bloques siguen en memoria, pero pasan de estado exclusivo a libre.
Si traigo datos de otras tablas, suben en bloques nuevos y aún se conservan los otros en estado free.

4. Estos bloques se llenan cuando todo el espacio en el Data buffer cache se llena? Continua con los libres?

Entiendo que si la memoria se llena se utiliza el algoritmo LRU para volar memoria.
5. Durante cuanto tiempo un bloque permanece en estado exclusivo?

Muchas gracias compañeros.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: bloques, select, tabla, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:45.