Componentes de una BD Cada BD Oracle en ejecución está asociada a una instancia Oracle. Cuando se arranca el servidor, el software de Oracle reserva una zona de memoria compartida denominada System Global Area(SGA) y comienza la ejecución de un conjunto de procesos background. La combinación de SGA y los procesos Oracle se denomina instancia Oracle. Cuando se inicia la instancia, Oracle lee un archivo de parámetros de inicialización y la instancia se configura según las instrucciones que contenga dicho archivo de parámetros, asociándose a una BD concreta. Esto es lo que se denomina montaje de la BD. Una vez que se inicia la instancia y se abre la base de datos, los usuarios pueden acceder a la misma. Varias instancias pueden coexistir simultáneamente en una misma máquina, pero cada instancia trabaja sobre una sola BD. Es posible que múltiples instancias accedan a una misma BD. Cada instancia tiene sus propias características, por ejemplo, el tamaño de la zona de memoria reservada. Tal como se ha mencionado anteriormente, estas características están definidas mediante los parámetros almacenados en el fichero de inicialización (SPFILE o INIT). El archivo de inicialización se lee durante el inicio de la instancia y el administrador de la BD puede modificarlo. En este caso, las modificaciones que se realizan en este archivo no surten efecto hasta la siguiente operación de inicio de la instancia. Oracle Database 10g: Taller de Administración I 1-2
Estructuras de Memoria Oracle Las estructuras de memoria básicas asociadas a una instancia Oracle incluyen el System Global Area(SGA), compartida por todos los procesos de servidor y background, y el Program Global Area (PGA), privado para cada proceso de servidoryensegundoplano(hayunpgaparacadaproceso). 1) System Global Area (SGA): Es un área de memoria compartida que contiene datos e información de control para la instancia. Permite a los usuarios de la BD compartir la información sobre los datos, su estructura e incluso las instrucciones SQL que se emplean con más frecuencia. Su tamaño se establece mediante diferentes parámetros del fichero INIT.ORA. Esta zona se libera al parar la instancia. Es posible cambiar la configuración del SGA mientras la BD se encuentra en funcionamiento, sin necesidad de cerrarla. De este modo, es posible aumentar o reducir su tamaño según convenga en función de la carga de trabajo que soporte en cada instante. El tamaño del área SGA puede influir en los tiempos de respuesta. Cuanto másgrandeseamástrabajaráoracleenmemoriaymenosaccesosharáadisco. SGA incluye las siguientes estructuras de datos: Caché de buffersde la BD:Almacena en caché los bloquesde datos eíndices de usuarios correspondientes a la imagen anterior/posterior de una modificación. Está formada por el Buffer de Datos y el Buffer de Rollback. El número de bloques que forman la caché de datos viene establecido en el parámetro DB_BLOCK_BUFFERS de INIT.ORA. La caché de buffers de la BD incluye un conjunto de bloques que almacenan una parte del diccionario de datos en memoria para evitar un acceso sistemático al disco: es lo que se llama diccionario caché. Entre la información almacenada en estos bloques se incluyen los datos de las cuentas de usuario, los nombres de los archivos de datos, los nombres de los segmentos de Rollback, la ubicación de las extensiones, las descripciones de las tablas y los privilegios. Oracle Database 10g: Taller de Administración I 1-3
Estructuras de Memoria Oracle (continuación) SGA incluye, además: Buffer de redo log: Almacena en caché los registros redo log hasta que se puedan escribir en los archivos redo log almacenados en disco. Su tamaño viene establecido en el parámetro LOG_BUFFER de INIT.ORA. Pool compartido: Almacena en caché objetos que se pueden compartir entre usuarios, como cursores, procedimientos almacenados o estructuras de control. Pool grande: Área opcional utilizada para ciertos procesos pesados, como almacenar en buffer las solicitudes de E/S grandes u operaciones de backup y recuperación Pool Java: Es utilizado para todos los códigos y datos Java específicos de la sesión dentro de la Java Virtual Machine(JVM) Pool de Streams: Utilizado por Oracle Streams. 2) Zona PGA: Zona de la memoria que contiene datos e información de control para cada proceso de servidor. Un proceso deservidor esun proceso queseocupa delassolicitudesdeun cliente. Cadaproceso deservidor tienesu propioárea PGAcreadaaliniciar elproceso deservidor. Elacceso esexclusivo para dicho proceso deservidor y se leeyescribesólomediantecódigodeoraclequeactúaensunombre. El PGA contiene los siguientes elementos: Memoria de la sesión: Memoria asignada para contener las variables de sesión, entre otra información. Área SQL privada: Contiene datos como información de enlace y estructuras de memoria de tiempo de ejecución. Cada sesión que emite una sentencia SQL tiene un área SQL privada, denominada cursor, donde se almacena el texto de la sentencia SQL y la ruta de acceso a los datos. El tamaño del cursor y el número de cursores por usuario pueden ser parametrizados por el DBA mediante el parámetro OPEN_CURSORS del fichero INIT.ORA. Una buena utilización de los cursores por las aplicaciones puede tener influencia sobre los tiempos de respuesta. El tamaño del área SQL puede modificarse dinámicamente mediante el parámetro SHARED_POOL_SIZE. Oracle Database 10g: Taller de Administración I 1-4
Estructura de los procesos Cuando se llama a una aplicación o herramienta Oracle, como Enterprise Manager, el servidor Oracle crea un proceso servidor para ejecutar los comandos solicitados por la aplicación. Además,creaunconjuntodeprocesosbackgroundpropiosdelainstanciaqueinteractúanentresíyconelSOpara gestionar las estructuras de memoria, la ejecución asíncrona de operaciones de E/S para escribir datos a disco, y ejecutar otras tareas. Oracle Database 10g: Taller de Administración I 1-5
Procesos background Una instancia Oracle está compuesta por un conjunto de procesos en segundo plano, y los procesos de usuario que solicitan información a dichos procesos. Los procesos background relacionan las estructuras físicas y de memoria de la BD. Su número varía en función de la configuración de la BD. Son creados en el arranque de una instancia y funcionan de una forma asíncrona, teniendo cada uno de ellos un cometido muy específico, como se muestra a continuación. DBWn (Database Writer): Es el proceso encargado de escribir bloques modificados de la caché de buffers de la BD en los archivos del disco. LGWR (Log Writer): Este proceso escribe secuencialmente en el Archivo Redo Log los registros Log ubicados en la zona de buffer de Log. Estos registros corresponden a los datos modificados y garantizan la posibilidad de restaurar labdanteunfallo. La escritura se produce cuando una transacción finaliza o cuando el buffer de Log está lleno. En este último caso, LGWR escribe sobre el archivo Redo Log todos los registros Log que contienen la transacción y su estado. Es posible crear múltiples esclavos LGWR para mejorar el rendimiento de la escritura en los archivos Redo Log. El número de esclavos LGWR de E/S en ejecución se configura mediante el parámetro LGWR_IO_SLAVES del archivo INIT.ORAdelaBD. SMON (System Monitor): Este proceso tiene como tarea principal la restauración de la coherencia de la BD durantesuarranque. Allanzamiento delabd, elcometidodesmon consisteen verificar silaparadafuenormalla última vez; en este caso no tienenada quehacer. En caso contrario, elsmon restaura la BD recuperando desde el archivo Redo Log las modificaciones que han sido terminadas (por un COMMIT o un ROLLBACK) y que Oracle no habíaaúnescritoenlabdantesdelaparadaanormal. SMON cumple una segunda función: agrupa extensiones libres contiguas formando extensiones de mayor tamaño. Oracle Database 10g: Taller de Administración I 1-6
Procesos background (continuación) PMON (Process Monitor): El proceso monitor interviene cuando un proceso de usuario tiene un problema o cuando este termina anormalmente. Esta intervención consiste en liberar los recursos ocupados por el proceso de usuario y suprimir este último de la lista de procesos de usuario de la instancia, además de deshacer la transacción interrumpida. Al igual que SMON, se activa de forma periódica para comprobar si es necesaria su intervención. CKPT(Checkpoint): Los checkpoints ayudan a reducir la cantidad de tiempo necesario para realizar la recuperación delasinstancias. Hacen quedbwrescriba en losarchivosdedatostodoslosbloquesquesehayanmodificadopor parte de transacciones confirmadas desde el último checkpoint, y que actualice los archivos de control y las cabeceras de los archivos de datos para registrar el checkpoint. Los checkpoints se producen de forma automática cuando se llena el buffer de Log. Para aumentar la frecuencia de los checkpoint pueden utilizarse los parámetros LOG_CHECKPOINT_INTERVAL y LOG_CHECKPOINT_TIMEOUT, especificados en el archivo INIT.ORA. ARCn (Archiver): Este proceso es opcional. Cuando está activo, su misión consiste en archivar (copiar) cada uno de los archivos Redo Log lleno en un dispositivo particular. Una vez copiado un archivo Redo Log en el soporte de seguridad, este puede ser reutilizado en escritura para el proceso LGWR. Estas copias de seguridad podrán ser utilizadas para restaurar una BD cuando esta haya sido perdida. Sepueden crear variosesclavosarch dee/s,paramejorar elrendimiento deescritura en losarchivosredo Log.El número de esclavos ARCH se define mediante el parámetro ARCH_IO_SLAVES del archivo INIT.ORA de la BD. Oracle Database 10g: Taller de Administración I 1-7
Proceso servidor y caché de buffers de la BD Cuando se realiza una consulta, elproceso DBWR busca, en primer lugar, en la caché debuffers de la BD el bloque de datos que necesita. Si no lo encuentra, el proceso servidor lee el bloque desde el archivo de datos y coloca una copia en la cachédebuffersdela BD. Deestemodo, sisuceden peticionesdeotrasconsultasdelmismo bloquede datos ya no precisarán lecturas físicas. DBWR también es el proceso encargado de escribir bloques modificados de la caché de buffers de la BD en los archivos del disco. Realiza escrituras por lotes de los bloques de la caché de datos y de la caché del diccionario de datos a los Archivos de Datos. Para cada sentencia de actualización (UPDATE, INSERT o DELETE) el DBWR copia los registrosoriginalesen lapartedelbuffer derollbackdelasgayefectúa lasmodificacionessobrelosbloquesdela partebufferdedatos.acontinuaciónescribeunregistroenlapartedelbufferdelog. En caso devalidacióndeunatransacción (COMMIT), eldbwrlibera elespacio delosregistrosdela transacción en el buffer de Rollback. En caso de anulación de la transacción (ROLLBACK), los registros de rollback sustituyen a los correspondientes en el buffer de datos de modo que estos últimos recuperan su estado inicial. En ambos casos, DBWRescribeunnuevoregistro enelbufferdelog. El DBWR es el encargado de escribir en el archivo de datos principalmente en los tres casos siguientes: 1.CuandoOraclenecesitaespacioenlacachédedatos 2. Tras haberse modificado un cierto número de bloques 3. A la salida de un punto de control (checkpoint). En este último caso, el DBWR escribe sobre el disco todos los bloques modificados por transacciones confirmadas después de la última escritura. Cuando el buffer de Log está lleno también se dispara automáticamente un punto de control. Oracle Database 10g: Taller de Administración I 1-8
Oracle Database 10g: Taller de Administración I 1-9
Oracle Database 10g: Taller de Administración I 1-10
Oracle Database 10g: Taller de Administración I 1-11
Proceso servidor y caché de buffers de la BD (continuación) Es posible tener múltiples procesos DBWR ejecutándose a la vez, en función de la plataforma y del SO. La utilización de varios procesos DBWR ayuda a minimizar la contienda dentro del DBWR durante operaciones de gran tamaño que afecten a varios archivos de datos. El número de procesos DBWR en ejecución se configura mediante el parámetro DBWR_WRITER_PROCESSES del archivo INIT.ORA. El servidor Oracle aplica el algoritmo LRU (se eliminan en primer lugar los bloques de menor uso) a la hora de localizarnuevosbloquesenlacachédebuffersdelabd. Los buffers de la caché pueden estar en los siguientes estados: Bloqueado: Hay varias sesiones que lo retienen para escritura del mismo bloque a la vez. Además, hay otras sesiones esperando para acceder al bloque. Limpio: El buffer está desbloqueado y es candidato para cambiar su contenido si éste no se referencia de nuevo. Libre: El buffer está vacío porque la instancia acaba de arrancarse. Sucio: El buffer no está bloqueado pero sus contenidos se han modificado, por lo que debe ser copiado a disco(por medio del proceso DBWR) antes de pasar al estado limpio. Oracle Database 10g: Taller de Administración I 1-12
Oracle Database 10g: Taller de Administración I 1-13
Oracle Database 10g: Taller de Administración I 1-14
Oracle Database 10g: Taller de Administración I 1-15
Oracle Database 10g: Taller de Administración I 1-16
Oracle Database 10g: Taller de Administración I 1-17
Oracle Database 10g: Taller de Administración I 1-18