13.1. Introducción #

PostgreSQL proporciona un conjunto rico de herramientas para que los desarrolladores gestionen el acceso concurrente a los datos. Internamente, la consistencia de los datos se mantiene mediante el uso de un modelo multiversión (Control de concurrencia multiversión, o MVCC por sus siglas en inglés). Esto significa que cada sentencia SQL ve una instantánea de los datos (una versión de la base de datos) tal como era hace algún tiempo, independientemente del estado actual de los datos subyacentes. Esto evita que las sentencias vean datos inconsistentes producidos por transacciones concurrentes que realizan actualizaciones en las mismas filas de datos, proporcionando aislamiento de transacciones para cada sesión de base de datos. MVCC, al evitar las metodologías de bloqueo de los sistemas de bases de datos tradicionales, minimiza la contención de bloqueos para permitir un rendimiento razonable en entornos multiusuario.

La principal ventaja de utilizar el modelo MVCC de control de concurrencia en lugar de bloqueos 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 nivel innovador de Aislamiento de instantáneas serializables (SSI).

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