PostgreSQL proporciona un amplio conjunto de herramientas para que los desarrolladores administren el acceso simultáneo a los datos. Internamente, la coherencia de los datos se mantiene mediante el uso de un modelo multiversión (Control de concurrencia multiversión, MVCC). Esto significa que cada instrucción SQL ve una instantánea de los datos (una versión de la base de datos) como era hace algún tiempo, independientemente del estado actual de los datos subyacentes. Esto evita que las declaraciones vean datos inconsistentes producidos por transacciones simultáneas que realizan actualizaciones en las mismas filas de datos, lo que proporciona aislamiento de transacciones para cada sesión de la base de datos. MVCC, al evitar las metodologías de bloqueo de los sistemas de bases de datos tradicionales, minimiza la contención de bloqueo para permitir un rendimiento razonable en entornos multiusuario.

La principal ventaja de usar el modelo MVCC de control de concurrencia en lugar del bloqueo es que en MVCC los bloqueos adquiridos para consultar (leer) datos no entran en conflicto con los bloqueos adquiridos para escribir datos, por lo que la lectura nunca bloquea la escritura y la escritura nunca bloquea la lectura. PostgreSQL mantiene esta garantía incluso cuando proporciona el nivel más estricto de aislamiento de transacciones mediante el uso de un innovador Aislamiento de instantáneas serializables (SSI) nivel.

Las funciones de bloqueo a nivel de tabla y fila también están disponibles en PostgreSQL para aplicaciones que generalmente no necesitan un aislamiento total de transacciones y prefieren administrar explícitamente puntos particulares de conflicto. Sin embargo, el uso adecuado de MVCC generalmente proporcionará un mejor rendimiento que los bloqueos. Además, los bloqueos de aviso definidos por la aplicación proporcionan un mecanismo para adquirir bloqueos que no están vinculados a una sola transacción.

Anterior Arriba próximo
Capítulo 13. Control de concurrencia Hogar 13.2. Aislamiento de transacciones