martes, 14 de abril de 2009

ESTRUCTURA DE LOS PROCESOS

Estructura de los procesos


Cuando un usuario se conecta a una base de datos de Oracle ejecuta dos módulos de código diferentes, que además el encargado de gestionar estos procesos es el sistema operativo, estos dos módulos diferentes son:

-Aplicación o Herramienta Oracle: normalmente son programas clientes que se conectan a la base de datos y permiten ejecutar sentencias SQL. Ej.: SQL*Plus, SQL developer

-Código del servidor de Oracle: son los diferentes procesos que se han de ejecutar en el servidor para atender las peticiones del usuario.

La base de datos Oracle es un sistema multiproceso, lo que significa que no toda la base de datos está corriendo en un mismo proceso, si no que varias partes de la base de datos se ejecuta concurrentemente. Permitiendo a múltiples usuarios conectarse a la misma vez, y mayor rapidez en el tiempo de respuesta, puesto que siempre que pueda va a utilizar al máximo al ordenador, por ejemplo si tiene ocho núcleos el servidor, y resulta que una petición se puede paralelizar se ejecutara esa petición por partes en cada núcleo.

De los procesos que se ejecutan en el servidor podemos hacer dos grandes grupos:

-Procesos de usuarios: Cada vez que un usuario ejecuta una aplicación, ya sea propia o de Oracle se crea un proceso, que puede ser de dos tipos.

>conexión: Que es la vía de comunicación entre la aplicación y la instancia de la base de datos a la que se ha conectado.

>sesión: Es la conexión específica con la base de datos proporcionando un usuario y su contraseña.

Esto permite que desde un mismo equipo se puedan conectar varios usuarios simultáneamente, y que un usuario se pueda conectar desde diferentes equipos simultáneamente.

-Procesos de Oracle: Son propios de la base de datos, y el usuario no tiene control sobre ellos, pueden ser de dos tipos:

>Procesos de servidor: Se crea cuando una aplicación intenta acceder a la base de datos, para atender a las peticiones de la aplicación y devolver los resultados que se precisen.


>Procesos de background: Se crean cuando se inicia una instancia de la base de datos, solo hay un proceso de cada tipo de los que especificaremos a continuación, y no han de estar todos siempre presentes en el servidor. Se utilizan para realizar labores de mantenimiento, y para guardar la integridad de la base de datos. Los diferentes tipos de procesos son los siguientes:


Database Writer Process (DBWn)

El (DBWn) escribe el contenido de los buffers en los archivos de datos. El proceso DBWn es responsable por la escritura de los buffers modificados del buffer cache al disco. El proceso DBWn escribe buffers modificados al disco bajo las siguientes condiciones:

- Cuando un proceso no puede encontrar un buffer limpio reusable después de haber recorrido un número de determinado de buffers en el buffer caché, éste envía una señal al DBWn para la escritura. El DBWn escribe los buffers sucios al disco.

-El DBWn periódicamente escribe los buffers cuando se lleva a cabo un checkpoint. Chekpoint es una posición en el hilo de redo (log) donde se iniciará luego la recuperación. La posición en el log está determinada por el último buffer sucio en el buffer caché.

Log Writer Process (LGWR)

El proceso LGWR es responsable del manejo del redo log buffer, las escrituras del redo log buffer al archivo de redo log en el disco. El LGWR escribe todos los registros de redo que han sido copiados en el buffer desde la última vez que éste se escribió. El redo log buffer es un buffer circular. Cuando LGWR escribe los registros del redo log buffer al redo log file, el proceso servidor puede copiar nuevos registros sobre aquellos que se pasaron a disco. LGWR normalmente escribe lo suficientemente rápido para asegurar que el espacio esté siempre disponible en el buffer para nuevos registros, aún cuando la escritura al redo log file sea lenta.

LGWR escribe en porciones contiguas del buffer al disco. El LGRW escribe:

- Un registro de commit cuando un usuario hace commit de una transacción

- Redo log buffers:

-cada tres segundos

-cuando el redo log tenga un tercio lleno

-cuando un proceso de DBWn escriba los buffers modificados a disco, si es necesario.

Cuando un usuario lleva a cabo una instrucción de commit, el LGWR coloca el registro de commit en el log buffer y escribe la transacción a disco inmediatamente en el redo log. Los cambios correspondientes a los bloques de datos en el buffer caché, son dejados hasta que se tenga una escritura más eficiente que hacer. Esto se denomina el mecanismo de fast commit. La escritura de un registro de redo del commit de la transacción es un evento atómico.

Existe un mito con respecto a la escritura en el redo log buffer, se dice que en el redo log buffer o redo log file aparecerán sólo las transacciones comprometidas. En el redo log file se escriben todas las transacciones, no sólo las comprometidas, es por ello que el redo log permite rehacer los segmentos de undo del cualquier punto en el tiempo cuando se hace recuperación incompleta (point in time recovery).

Redo Log Files

Los Redo Log Files se agrupan en grupos de Redo Log. Todos los miembros de un Redo Log Group son idénticos, es decir contendrán la misma información. Dentro de un grupo de Redo Log se "multiplexan" los archivos para evitar los puntos de fallas, es decir si se perdiera un archivo de Redo Log habría otro que contendría la información y que permitiera la recuperación de la base de datos.

Los redo log se utilizan de forma circular, mediante grupos de archivos. Por defecto la base de datos Oracle genera 3 grupos de archivos. Se considerará el grupo current (actual) aquel donde se esté utilizando para escribir las transacciones actuales de la base de datos. Se considera un grupo active (activo), aquel que no es el actual y que posea transacciones cuyos cambios no se han hecho permanentes en los archivos de datos e inactivo aquel que contenga transacciones que han sido completamente escritas a disco, finalmente también se puede tener que un grupo de redo log esté limpio porque nunca haya sido escrito.

Los archivos de redo log trabajan de forma circular porque se sobrescriben, generalmente con los tres grupos se tendrá que uno de ellos se encontrará activo, el siguiente en enumeración será el actual y el siguiente estará inactivo listo para que se escriba en él. Una vez llenado el grupo actual se comenzará a escribir en el inactivo, que ahora será el actual, el que anteriormente era el actual pasará a ser activo si aún no se han escrito todas sus transacciones a disco y eventualmente el que inicialmente estaba activo pasará a ser inactivo y permitirá que al llenarse el grupo actual se escriban las transacciones en él.

Si se llenara el grupo actual de los archivos de redo y el resto de los grupos se encontraran activos, la base de datos no permitiría ninguna transacción hasta que se escriban todas las transacciones a disco del siguiente grupo de redo log y que este quedase inactivo. Cuando se trabaja con una base de datos en modo ARCHIVELOG, antes de sobrescribir el archivo se hace una copia de ese grupo de redo log al destino de los archivos.

Checkpoint Process (CKPT)

El CKPT lleva a cabo un checkpoint, entendiéndose como tal a la escritura parcial o completa de los buffers de memoria a disco. El CKPT no es el responsable de escribir los bloques a disco, para ello llama al DBWn y como en esa escritura podrían almacenarse en disco buffers de transacciones no comprometidas el CKPT también llama al LGWR para que registre en los redo log files esta escritura que permita generar los segmentos de undo de transacciones no comprometidas cuando se realice una recuperación incompleta. También si en la escritura del checkpoint hay transacciones que no se habían terminado de escribir en disco se escriben, se actualiza la cola de transacciones activas y un grupo de redo log que estaba activo podría pasar a inactivo.

Cuando un checkpoint ocurre, Oracle debe actualizar todas las cabeceras de los archivos de datos con los detalles del checkpoint, ésta es una tarea del CKPT.

System Monitor Process (SMON)

El proceso SMON lleva a cabo la recuperación, si es necesaria, de la instancia en el inicio de la misma, es decir rehacer cualquier transacción comprometida en el redo log file que no haya sido escrita a disco. SMON también es responsable de limpiar los segmentos temporales que no estén en uso por algún tiempo y de desfragmentar si cree oportuno alguna zona de los discos.

Process Monitor (PMON)

PMON lleva a cabo procesos de recuperación cuando un proceso de usuario falla. Es responsable de la limpieza del buffer caché, también de deshacer los cambios que se hayan hecho desde el ultimo commit y de la liberación de recursos que el proceso estaba usando. Por ejemplo este restaura el status de la tabla de transacciones activas, libera los locks y remueve el ID del proceso de la lista de procesos activos, asociados a un proceso usuario que pudo haber perdido la conexión de red.

Recoverer (RECO)

Este proceso solo se observa cuando la base de datos ejecuta la opción distribuida de Oracle. La transacción distribuida es una en la que dos o más emplazamientos de datos deben mantenerse sincronizados, Por ejemplo cuando se tiene una copia de los datos en diferentes ciudades y por fallas en una línea telefónica se pierde una transacción en la mitad de su actualización. El proceso recuperador entonces resuelve las transacciones que hayan quedado inconsistentes en las dos ciudades.

Archiver Processes (ARCn)

El ARCn copia los archivos de redo log llenos a un espacio de almacenamiento distinto para no perderlos al ser sobreescritos. El ARCn sólo está habilitado cuando la base de datos está en el modo ARCHIVELOG. En Oracle 10g para colocar la base de datos en modo archive basta con colocarla en modo ARCHIVELOG y especificar los destinos de "archive". En Oracle 9i se distinguía entre el "archive" manual y automático. Con "archive" manual el DBA debía ordenar hacer la copia de los redo log a los "archives", en el modo automático se copiaban automáticamente antes de ser sobrescritos. En Oracle 10g al poner una base de datos en modo ARCHIVELOG automáticamente se coloca en el modo automático.

Lock (LCKn)

Es un proceso opcional, configurado para manejar los bloqueos entre bases de datos Oracle cuando estas se encuentran en distintos computadores y compartiendo el mismo conjunto de discos (es decir en modo servidor en paralelo).

Job Queue (SNPn)

Es un proceso opcional, que se encarga de planificar los procesos que se deben ejecutar y asegurar que todos deben de terminar en algún momento.

Queue Monitor (QMNn)

QMNn es un proceso opcional de background para el encolamiento avanzado de Oracle, que monitorea las colas de mensajes. El encolamiento avanzado se usa con comunicación asíncrona. Los procesos envían los mensajes y en lugar de esperar por la respuesta siguen con su trabajo.

Dispatcher (Dnnn)

Es un proceso opcional que permite a los usuarios compartir procesos de servidor. Permitiendo que se conecten múltiples usuarios al mismo servidor.

Shared Server (Snnn)

Este tipo proceso se encarga de atender a cada uno de los clientes conectados a la base de datos compartiendo los procesos del servidor.


ORACLE 10 VS ORACLE 11

Oracle 10 vs Oracle 11


En primer lugar, encontramos que en Oracle 11 la estructura de la memoria se divide en tres partes en lugar de dos: el SGA y PGA se conservan y, además, se le da mayor importancia al SCA, en el cual se almacena código que se está ejecutando o que puede ser ejecutado.

Por otro lado, al Pool compartido se le añade otra caché, la Result Cache (caché de resultados), compuesta por la caché de resultado de las consultas SQL y por la caché de resultados de las funciones de PL/SQL.

Las opciones de administración de la memoria del PGA en ambas versiones son las mismas. Además, no existe ningún tipo de mejora con respecto a la PGA de la versión 10 ya que se mantiene la misma estructura.

Por último, investigando el manual de novedades de Oracle, lo único que hemos encontrado nuevo con respecto a sus sucesores es la inclusión de un proceso nuevo de background que es Database Resident Connection Pooling (DRCP), y que se encarga de que diferentes procesos puedan utilizar la misma conexión sin tener que crear una nueva.



ORACLE 10 VS SQL SERVER 2008

Oracle 10 vs SQL SERVER 2008

A diferencia de Oracle 10, a la hora de ejecutar instancias en SQL server 2008 hay diferencias dependiendo de la versión Windows instalada, ya que si tenemos Windows 2000, se usa memoria AWE estática y, si tenemos Windows 2003, dinámica. Además, SQL Server solo distingue un buffer pool en el cual almacena toda la información necesaria. Sin embargo, la arquitectura de memoria de Oracle y la de Microsoft SQL server son significativamente distintas: Oracle tiene un área de memoria para el PGA, que sin embargo el SQL Server no la tiene, ya que la forma de arquitectura de memoria de esta es más centralizada.

SQL Server 2008 incorpora mecanismos de compresión dinámica de datos, tanto de páginas de tablas como de índices, lo cual reduce el tiempo necesario para leer y escribir la información, disminuyendo tanto el espacio ocupado en disco como en memoria. Sin embargo, se apoya igualmente en el swapping y el paging para la gestión de la memoria virtual ya que ésto no depende del SGBD sino del propio SO. Por lo tanto, y al igual que ocurre en Oracle, en el momento que no se encuentra un dato en memoria, automáticamente se cede el control de la gestión al sistema designado por el SO.

Lo que sí añade SQL Server 2008 en el apartado de las áreas de ordenación es la inclusión de las llamadas sparse columns (columnas dispersas), ofreciendo una optimización adicional para el almacenamiento de columnas nulas que reduce tanto el tiempo como el espacio. Resulta interesante en aquellos diseños en los que se prevea que un número importante de columnas puedan tomar el valor NULL.

Por otra parte, con respecto al área de ordenación (SORT AREA) de Oracle, podríamos compararla con el área MemToLeave ya que en SQL SERVER corresponde al espacio de memoria virtual dentro del espacio de direcciones que no es usado por el BPOOL (donde se almacenan los diccionarios de datos y los datos del sistema). Sin embargo, no se puede hacer una comparación exacta debido a que la estructura de SQL SERVER es bastante diferente a la de ORACLE.

Finalmente, el BPOOL funciona de forma parecida a la paginación con respecto a la memoria ya que contiene una tabla hash con punteros a las páginas con los datos del SGBD, agilizando las búsquedas y mejorando el rendimiento. Es aquí, quizás, donde podríamos englobar el SCA correspondiente a ORACLE ya que el BPOOL, además de otras múltiples funciones, contiene la dirección del código de software de SQL SERVER.

Con respecto a la estructura de los procesos, no hemos encontrado información acerca de la estructura que siguen otros sistemas de gestión de base de datos.

Como conclusión, hay que tener en cuenta que SQL SERVER es un SGBD creado por Microsoft y por tanto tendrá menores limitaciones sobre un sistema Windows que sobre máquinas con otro SO.

EJERCICIOS

EJERCICIOS

Ejercicio 1

¿En cuántas partes se divide la memoria?

En 5 partes: SGA, PGA, Área de ordenaciones, memoria virtual y SCA.

Ejercicio 2

¿Qué es el SGA? ¿Con qué otro nombre se le conoce?

Es el System Global Area, un grupo de estructuras de la memoria compartida que contiene datos e información de control de una instancia de una base de datos. También es conocido como Shared Global Area.

Ejercicio 3

¿Qué es una instancia?

Es una combinación del SGA y todos los procesos de una base de datos.

Ejercicio 4

¿De qué se compone el SGA?

El SGA se compone de:

-Caché de los Buffers de la BD

- Redo Log Buffer

-Pool compartido

-Large Pool

-Java Pool

-Streams Pool

-Caché de diccionario

Ejercicio 5

Indica tres parámetros que influyan en el tamaño del SGA.

Los parámetros que influyen en el tamaño del SGA son: SGA_MAX_SIZE, DB_CACHE_SIZE, LOG_BUFFER, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE, SGA_TARGET.

Ejercicio 6

¿En qué dos listas están organizados la caché de los buffers?

En la lista en espera (contiene los buffers en espera o dirty buffers) y la lista LRU (contiene los buffers libres, los pinned buffers y los buffers en espera que aún no están en la lista en espera)

Ejercicio 7

De forma general nombrar cual es el contenido de la memoria de un PGA

Área SQL privada y Memoria de sesión

Ejercicio 8

Conteste Verdadero o Falso

1. Es necesario conocer todos los tamaños de la PGA a la hora de administrar la BD

Falso. El administrador solo necesita conocer el tamaño global del PGA configurando el parámetro inicial PGA_AGGREGATE_TARGET de tal forma que el administrador de la base de datos trata de asegurar que la cantidad total de memoria del PGA asignada por toda la base de datos de los procesos del servidor nunca exceda esa meta.

2. Existen vistas que contengan las estadísticas de uso de la memoria del PGA

Cierto. La mayoría de estas estadísticas se permiten cuando se activa PGA_AGGREGATE_TARGET

3. La forma de distribución de memoria puede afectar en el rendimiento de un operador

Cierto. Véase Áreas de trabajo SQL.

Ejercicio 9

Define brevemente como puede influir el tamaño del área de ordenación en el rendimiento del sistema.

El tamaño del área de ordenación, SORT_AREA_SIZE influye debido a que, en caso de que los datos a ordenar no quepan en el área de ordenación, se tienen que dividir en trozos que sí quepan y para luego ordenarlos por separado y mezclarlos. Por tanto, el rendimiento es menor.



Ejercicio 10

Diferencias entre Paging y Swapping

En el Paging se dividen los programas en páginas y la memoria en marcos de página que hacen referencia a ellas. Esto no ocurre en el Swapping, en el que toda la memoria se divide en bloques y se tiene un directorio Swap con el que se intercambian dichos bloques. Además, en el Swapping se mueven al directorio Swap procedimientos completos que no están activos o se activan poco, en vez de únicamente trozos de estos como pasa en el Paging.



Ejercicio 11

Características del área de código en Oracle

Suele ser de tamaño estático, cambiando únicamente cuando se actualiza o reinstala el software.

El tamaño requerido puede variar en función del SO.

Son áreas de sólo lectura y pueden ser instaladas de forma compartida o no compartida.

Permite que el código de Oracle esté instalado una sola vez para múltiples usuarios sin necesidad de más tener más copias en memoria.

Permite que los usuarios compartan aplicaciones y utilidades de Oracle para ahorrar memoria y mejorar el rendimiento.



Ejercicio 12

¿En qué dos grandes grupos se dividen los procesos en Oracle?

Se dividen en procesos de usuario y procesos de Oracle.

Ejercicio 13

Test

1-¿Qué nombre recibe la lectura directa de memoria cuando un proceso busca en la Buffer Caché?

A-Caché miss

B-Caché hit

C-Caché win

2-¿Qué parámetro determina el tamaño total del SGA?

A-SGA_TARGET

B-SGA_MAX_SIZE

C-SGA_TARGET_SIZE

3-Las dos áreas en las que se divide el área SQL privada son:

A-Persistent Area y SQL Area

B-Run-time Area y Persistent Area

C-Run-time Area y Super Area

4-¿Dónde se mapea la memoria virtual en Oracle?

A-En la ROM

B-En la SRAM

C-En la RAM

5-¿Qué dos técnicas se utilizan para el traspaso de información?

A-La paginación y el traspasing

B-El traspasing y el swapping

C-Ninguna de las anteriores

6-¿Cuál es el tamaño requerido para el SCA?

A-Depende del tamaño de la memoria

B-Depende del Sistema Operativo

C-4Gb

7-¿Qué es una conexión?

A-El puente entre la base de datos y el cliente.

B-La conexión con un usuario especifico.

C-Cada hoja abierta en el SQL developer.

8-¿Qué es una sesión?

A-El puente entre la base de datos y el cliente.

B-La conexión con un usuario especifico.

C-Cada hoja abierta en el SQL developer.

9-¿Qué procesos se crean en el servidor cada vez que se intenta acceder a la base de datos?

A-Procesos de usuario.

B-Procesos de servidor.

C-Procesos de background.

10-¿Qué procesos son los encargados del mantenimiento de la base de datos?

A-Procesos de usuario.

B-Procesos de servidor.

C-Procesos de background.


11-El proceso log writter process escribe los buffers de redo cada vez que…

A-Cada tres segundos.

B-Cada vez que se hace un commit.

C-Las dos anteriores son correctas.

12-Proceso de checkpoint…

A-Se encarga de grabar los cambios al disco duro.

B-Manda señales a otros procesos para que realicen sus tareas.

C-Guarda los buffers de redo en el disco.

13-Los ficheros de redo log…

A-Siempre se sobrescriben.

B-Cuando se llenan son guardados en otro disco automáticamente.

C-Son tres: activo, actual e inactivo.

14-Los procesos en background…

A-Son controlados por el usuario.

B-Han de estar siempre presentes en el servidor.

C-Ninguna es correcta.