Compartir a través de


Control de simultaneidad

La simultaneidad es la capacidad de dos transacciones para usar los mismos datos al mismo tiempo, y con un mayor aislamiento de transacción se reduce la simultaneidad. Esto se debe a que el aislamiento de transacción normalmente se implementa mediante el bloqueo de filas y, a medida que se bloquean más filas, se pueden completar menos transacciones sin bloquearse temporalmente por una fila bloqueada. Aunque la simultaneidad reducida se acepta generalmente como una compensación de los niveles de aislamiento de transacción más altos necesaria para mantener la integridad de la base de datos, puede convertirse en un problema en las aplicaciones interactivas con una actividad de lectura y escritura elevada que usan cursores.

Por ejemplo, supongamos que una aplicación ejecuta la instrucción SQL SELECT * FROM Orders. Llama a SQLFetchScroll para desplazarse por el conjunto de resultados y permite al usuario actualizar, eliminar o insertar pedidos. Después de que el usuario actualice, elimine o inserte un pedido, la aplicación confirma la transacción.

Si el nivel de aislamiento es de lectura repetible, en función de su implementación, la transacción podría bloquear cada fila devuelta por SQLFetchScroll. Si el nivel de aislamiento es serializable, la transacción podría bloquear toda la tabla Orders. En cualquier caso, la transacción libera sus bloqueos únicamente cuando es confirmada o revertida. Por lo tanto, si el usuario dedica mucho tiempo a leer pedidos y muy poco tiempo a actualizarlos, eliminarlos o insertarlos, la transacción podría bloquear fácilmente un gran número de filas y no estarían disponibles para otros usuarios.

Esto es un problema incluso si el cursor es de solo lectura y la aplicación permite al usuario leer solo los pedidos existentes. En este caso, la aplicación confirma la transacción y libera bloqueos, cuando llama a SQLCloseCursor (en modo de confirmación automática) o SQLEndTran (en modo de confirmación manual).

Esta sección contiene los temas siguientes.