Este proceso de background: database writer process (DBWn) es el encargado de escribir el contenido de los buffers en los datafiles. Los procesos DBWn son los responsables de escribir los buffers modificados (dirty) en la cache de buffer a disco. A pesar de que un solo proceso (DBW0) normalmente es suficiente para una base de datos se pueden especificar más de uno (de DBW1 al DBW9 y de DBWa a DBWj). Esto mejorar el rendimiento en la escritura a disco, en el caso de que la base de datos modifique mucha cantidad de datos. Estos procesos adicionales no tienen ningún sentido si el sistema no es multiprocesador.
Cuando se modifica un buffer en la cache de datos se marca como dirty. Un “cold buffer” es un bufuer que no ha sido utilizado recientemente de acuerdo con el algoritmo “least recently used” -lo menos recientemente usado- (LRU). Los procesos DBWn escriben los cold, dirty buffers a disco para asegurar que los procesos de usuario sean capaces de encontrar cold, clean buffers que se pueden utilizar para leer los nuevos bloques en la cache. A medida que los buffer se van escribiendo por los procesos de usuario, el número de buffers libre disminuye. Si el número de buffers libres alcanza un número demasiado bajo, los procesos de usuario que tiene que leer los bloques de disco a la cache, no son capaces de encontrar buffers libres.
Escribiendo los cold, dirty buffers a disco, el DBWn mejora el rendimiento a la hora de encontrar buffers libres, mientras mantiene los más usados en memoria: Por ejemplo los bloques que son parte de tablas pequeñas o índices a los que se accede frecuentemente se mantiene en cache, con lo cual no se necesita estar constantemente recuperándooslos del disco. El algoritmo LRU mantiene los bloques a los que se llama más frecuentemente, así que cuando un buffer se escribe en disco es porque normalmente no se va a necesitar pronto.
El parámetro de inicialización DB_WRITER_PROCESSES específica el número de procesos. El número máximo es 20. Y si no se especifica al principio Oracle lo determina basandose en el número de CPU y los grupos de procesadores.
Basado en el siguiente documento: http://docs.oracle.com/cd/B14117_01/server.101/b10743/process.htm#i7259