Pregunta

Yo estaba buscando posibles problemas de concurrencia en DB, así que me fui a leer.He encontrado http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0005267.htm y menciona el acceso a los datos no confirmados.

El acceso a los datos no confirmados.Aplicación de Una posible actualización de un valor en la base de datos, y la aplicación de B puede leer ese valor antes de que se comprometido.Entonces, si el valor de a es no más comprometidos, pero retrocedió, los cálculos realizados por B son basado en la no confirmada (y, presumiblemente, no válido) de datos.

Lo que...pensé que el resto de las sesiones (de la misma aplicación e incluso el mismo hilo) puede leer los datos que no se ha comprometido todavía?Yo pensaba que sólo la conexión/sesión (no estoy seguro de mi terminología) que escribió los datos en la transacción no confirmada puede leer datos sin confirmar.

Puede que otros subprocesos realmente leer los datos que no ha sido comprometido?Voy a utilizar mysql pero podría usar sqlite

¿Fue útil?

Solución

¿Qué otras sesiones se puede leer depende de cómo configurar su base de datos.En MySQL también depende de qué motor de base de datos que utilice.El término que está buscando (en ANSI SQL términos) es "el nivel de aislamiento".

Muchas bases de datos predeterminada a un nivel de aislamiento donde se lee en los datos no confirmados bloqueará.Así que si Una transacción se actualiza el registro 1234 en la tabla T y, a continuación, transacción B intenta seleccionar registro 1234 antes de que Un cometa o se revierte, a continuación, B bloqueará hasta que la hace una de esas cosas.

Ver MySQL Transacciones, Parte II - Niveles de Aislamiento de Transacción.

Una grave desventaja de esto es que la actualización por lotes operaciones que viven en transacciones de larga duración (por lo general) puede bloquear potencialmente muchas solicitudes.

También puede configurarlo de modo que B va a ver los datos no confirmados, pero que a menudo es mal aconsejado.

Alternativamente, usted puede utilizar un sistema llamado MVCC ("Multiversion control de concurrencia"), que dará diferentes transacciones de una visión consistente de los datos en función del tiempo que se inició la transacción.Esto evita que no confirmadas problema de lectura (lectura de datos que se puede deshacer) y es mucho más escalable, especialmente en el contexto de la larga duración de las transacciones.

MySQL soporta MVCC.

Otros consejos

Es cierto que en SQL Server se puede, tienes que elegir para hacerlo, no es el valor por defecto, pero si se utiliza el nivel de aislamiento derecha o sugerencia de consulta se puede elegir para leer una fila no comprometida, esto puede lleva a los problemas y incluso una doble lectura de la misma fila en la teoría.

Ese artículo menciona el acceso a datos no confirmados como uno de los problemas eliminadas por el gestor de base de datos.

  

Los controles gestor de bases de esta   de acceso para evitar efectos no deseados,   tales como:

     

...

     
      
  • El acceso a datos no confirmados.
  •   

motor de almacenamiento InnoDB de MySQL soporta varios niveles de aislamiento de transacción. Para más detalles, véase http://dev.mysql.com/doc/refman/ 5,4 / en / set-transaction.html .

Para algunas versiones de algunas bases de datos, el establecimiento de consultas para poder leer sin compromiso mejorará el rendimiento, debido a bloqueo reducida. Esto aún deja cuestiones de seguridad, fiabilidad y escalabilidad para ser respondidas.

Para dar una específica, que solía trabajar en un sitio de comercio electrónico muy grande. Utilizaron la lectura no confirmada sobre lee al catálogo de la tienda, ya que los datos se accede en gran medida, rara vez cambian, y no es sensible a las preocupaciones sobre la lectura de datos no confirmados. Cualquier dato del catálogo que se utilizó para realizar un pedido se re-verifican todos modos. Esto fue en SQL Server 2000, que se sabe que tienen problemas de rendimiento de bloqueo. En las versiones más recientes de SQL Server, el rendimiento ha mejorado de bloqueo, por lo que este no sería necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top