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
SELECT b.block#, b.STATUS, object_name, object_type, dirty "Dirty" FROM v$bh b, dba_objects o WHERE b.objd = o.data_object_id 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
SELECT dbms_rowid.rowid_block_number(ROWID) 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.