sql >> Base de Datos >  >> RDS >> Database

Sugerencias para bloqueos de lectura/escritura según el nivel de aislamiento de transacciones en MSSQL

Lectura no confirmada

  • Si los datos se modifican en una transacción, la selección de estos datos (en otra transacción o sin transacción) no esperará hasta que finalice la primera transacción y devolverá entradas de datos de transacciones no confirmadas.
  • Si los datos se leen en una transacción, las actualizaciones de estos datos en otra transacción no esperarán hasta que finalice la primera transacción.
  • No se utilizan bloqueos compartidos. Idéntico al ajuste t él NOLOCK pista para todas las selecciones en Lectura Confirmada.
  • Los bloqueos exclusivos se activan durante la ejecución de sentencias y se desactivan al final de la transacción .

Lectura confirmada + read_committed_snapshot desactivado
(alterar la base de datos xxx desactivar read_committed_snapshot)

  • Si los datos se modifican en una transacción, la selección de estos datos (en otra transacción o sin transacción) esperará hasta que finalice la primera transacción. Sele ct con el NO COMPROBAR pista devolverá datos modificados, pero no confirmados.
  • Si los datos se leen en una transacción, las actualizaciones de estos datos en otra transacción no esperarán hasta que finalice la primera transacción.
  • Los bloqueos compartidos se habilitan durante la ejecución de la declaración y se deshabilitan al final de la declaración ejecución nt .
  • Los bloqueos exclusivos se habilitan durante la ejecución de la declaración y se deshabilitan al final de la transacción .

Lectura confirmada + read_committed_snapshot en
(alterar base de datos xxx establecer read_committed_snapshot activado)

  • Si los datos se modifican en una transacción, la selección de estos datos (en otra transacción o sin transacción) no esperará hasta que finalice la primera transacción y devolverá valores en el momento t de el inicio de transacción . Seleccione con el Sugerencia NOCHECK devolverá datos modificados, pero no confirmados.
  • Si los datos se leen en una transacción, las actualizaciones de estos datos en otra transacción no esperarán hasta que finalice la primera transacción.
  • No se utilizan bloqueos compartidos. En su lugar, se utiliza el mecanismo de control de versiones de fila:los datos de los registros actualizados se almacenan en tempdb .
  • Los bloqueos exclusivos se habilitan durante la ejecución de la declaración y se deshabilitan al final de la transacción .

Lectura repetible

  • Si los datos se modifican en una transacción, la selección de estos datos (en otra transacción o sin transacción) esperará hasta que finalice la primera transacción. Seleccione con el La sugerencia de NOLOCK devolverá datos modificados, pero no confirmados.
  • Si se leen datos en una transacción, las actualizaciones de estos datos en otra transacción esperarán hasta que finalice la primera transacción.
  • Los bloqueos compartidos se habilitan durante la ejecución de la declaración y se deshabilitan al final de la transacción , a diferencia de Lectura confirmada.
  • Los bloqueos exclusivos se habilitan durante la ejecución de la declaración y se deshabilitan al final de la transacción .

Serializable

  • Si los datos se modifican en una transacción, la selección de estos datos (en otra transacción o sin transacción) esperará hasta que finalice la primera transacción. Seleccione con el La sugerencia de NOLOCK devuelve datos modificados, pero no confirmados.
  • Si se leen datos en una transacción, las actualizaciones de estos datos en otra transacción esperarán hasta que finalice la primera transacción.
  • Los bloqueos compartidos se activan durante la ejecución de la declaración y se desactivan al final de la transacción .
  • Los bloqueos exclusivos se habilitan durante la ejecución de la declaración y se deshabilitan al final de la transacción.
  • Se están habilitando bloqueos de rango exclusivos para claves que cumplen con el rango de criterios de consulta. No se permiten inserciones de nuevos registros que se encuentren dentro de este rango. Idéntico a la configuración el HOLD LO CK pista para todos los SELECT en Lectura confirmada.

Instantánea
(modifique la base de datos xxx y active allow_snapshot_isolation)

  • Si los datos se cambian en una transacción, la selección de estos datos (en otra transacción o sin transacción) no esperará hasta que finalice la primera transacción. y devolverá valores en el momento de el inicio de transacción . Seleccione con el La sugerencia de NOLOCK devuelve datos modificados, pero no confirmados.
  • Si los datos se leen en una transacción, las actualizaciones de estos datos en otra transacción no esperarán hasta que finalice la primera transacción.
  • No se utilizan bloqueos compartidos. En su lugar, se utiliza el mecanismo de control de versiones de fila:los datos de los registros actualizados se almacenan en tempdb .
  • Los bloqueos exclusivos se habilitan durante la ejecución de la declaración y se deshabilitan al final de la transacción.

Probado en MSSQL 2014.