Privacidad & Cookies
Este sitio utiliza cookies. Al continuar, usted acepta su uso. Obtenga más información, incluido cómo controlar las cookies.
Este artículo forma parte de la serie de ajustes de rendimiento de Oracle y se creó para describir el mecanismo de bloqueo de Oracle.
Un bloqueo es un recurso que necesita mantener para obtener acceso al recurso. Oracle tiene dos tipos de cerraduras: eneues y pestillos, ahora nos centraríamos en estos mecanismos de bloqueo individualmente.
Enqueues
Los enqueues son bloqueos sofisticados para administrar el acceso a recursos compartidos (como tablas, filas, trabajos, hilos de rehacer). Se puede solicitar una cola en diferentes niveles / modos:
- Null
- Row share
- Row exclusive
- Share
- Share row exclusive
- Exclusive
Si una sesión contiene un enqueue en modo compartido, otras sesiones también pueden tomar cola en modo compartido (para el mismo recurso). Si una sesión tiene un enqueue en modo exclusivo, otras sesiones que quieren obtenerlo, independientemente en qué nivel, tienen que esperar.
Cuando una sesión requiere acceso, se obtiene una estructura de bloqueo y se realiza una solicitud para adquirir acceso al recurso en un nivel específico (modo). La estructura de bloqueo se coloca en una de las tres listas enlazadas que cuelgan del recurso, llamadas listas PROPIETARIO (si se puede adquirir el enqueue), CAMARERO (si la sesión está esperando para adquirir el enqueue) y CONVERTIDOR (la sesión está sosteniendo el enqueue en un nivel pero quiere convertirlo a otro).
Siguientes son algunos tipos comunes de pone en cola:-
- TM-Cada vez que una sesión quiere bloquear una mesa, se solicita un enqueue TM. Si una sesión elimina una fila de la tabla principal y se crea una restricción referencial (clave foránea) sin un índice en la tabla secundaria, o si la sesión está actualizando las columnas a las que hace referencia la clave foránea, se toma un bloqueo compartido en la tabla secundaria. Si otra sesión intenta hacer cambios en la tabla secundaria, tienen que esperar (porque quieren el enqueue en modo exclusivo de fila, y eso no es compatible con el modo de compartir).
- TX-Tan pronto como se inicia una transacción, se necesita un enqueue TX. Una transacción se define de forma única por el número de segmento de reversión, el número de ranura en la tabla de transacciones del segmento de reversión y el número de secuencia del número de ranura. Una sesión puede estar esperando en un enqueue TX por varias razones:
- Otra sesión está bloqueando la fila solicitada
- Cuando dos sesiones intentan insertar la misma clave única en una tabla (ninguna de ellas ha hecho una CONFIRMACIÓN), entonces la última sesión está esperando a que la primera se CONFIRME o REVERSE.
- No hay DIT (Lista de Transacciones Interesadas) gratuita en el encabezado del bloque.
- La sesión UL – A ha recibido un bloqueo con DBMS_LOCK.Función de solicitud.
Cierres
Los cierres proporcionan un mecanismo de serialización de bajo nivel que protege las estructuras de datos compartidos en el SGA. Un pestillo es un tipo de cerradura que se puede adquirir y liberar muy rápidamente. Los pestillos se utilizan normalmente para evitar que más de un proceso ejecute el mismo código en un momento dado. Cuando se adquiere un pestillo, se adquiere a un nivel particular para evitar bloqueos. Una vez que un proceso adquiere un pestillo a un cierto nivel, no puede adquirir posteriormente un pestillo a un nivel que sea igual o inferior a ese nivel (a menos que lo adquiera nowait). Asociado con cada pestillo hay un procedimiento de limpieza que se llamará si un proceso muere mientras se sostiene el pestillo. Esta limpieza se realiza utilizando los servicios de PMON. La implementación subyacente de los cierres depende del sistema operativo, particularmente en lo que respecta a si un proceso esperará un cierre y durante cuánto tiempo.
El objetivo de latches es gestionar el acceso simultáneo a estructuras de datos compartidas de forma que solo un proceso pueda acceder a la estructura a la vez. Los procesos bloqueados (procesos que esperan para ejecutar una parte del código para los que algún otro proceso ya ha obtenido un pestillo) esperarán hasta que se libere el pestillo. Oracle utiliza instrucciones atómicas como «probar y configurar» para operar en los pestillos. Dado que las instrucciones para establecer y liberar los cierres son atómicas, el sistema operativo garantiza que solo un proceso lo obtenga y, como es solo una instrucción, es bastante rápido.
Las solicitudes de cierre se pueden realizar en dos modos:
- dispuesto a esperar: Una solicitud de modo «dispuesto a esperar» se repetirá, esperará y solicitará de nuevo hasta que se obtenga el pestillo.
- sin espera: En el modo «sin espera», el proceso solicitará el pestillo y si no está disponible, en lugar de esperar, se solicitará otro. Solo cuando todo falla, el proceso del servidor tiene que esperar.
Diferencia entre pestillos & Enqueues
Una diferencia entre un pestillo y un enqueue es que el enqueue se obtiene utilizando un mecanismo de bloqueo específico del sistema operativo, mientras que un pestillo se obtiene independientemente del sistema operativo. Un enqueue permite al usuario almacenar un valor en el candado (es decir, el modo en el que lo solicitamos). El administrador de bloqueo del sistema operativo realiza un seguimiento de los recursos bloqueados. Si no se puede conceder un proceso al bloqueo porque es incompatible con el modo solicitado y el bloqueo se solicita con wait, el sistema operativo coloca el proceso solicitante en una cola de espera que se mantiene en FIFO.
Otra diferencia entre pestillos y enqueues es que los enqueues mantienen una cola ordenada de camareros, mientras que los pestillos no lo hacen. Todos los procesos en espera de un pestillo se reintentan simultáneamente (dependiendo del planificador). Esto significa que cualquiera de los camareros podría obtener el pestillo y, posiblemente, el primero que intente obtener el pestillo podría ser el último en obtenerlo. Los camareros de Latch pueden usar temporizadores para despertar y volver a intentarlo o pueden girar (solo en multiprocesadores) girar en un pestillo significa sostener la CPU y esperar que ese pestillo se libere en poco tiempo).