2008-10-16 66 views

Respuesta

15

Tom proporciona una gran respuesta a esto: On Transaction Isolation Levels

Dice:

La lectura no comprometida nivel de aislamiento permite lecturas sucias. Oracle Database no usa lecturas sucias de , ni siquiera las permite. El objetivo básico de un nivel de aislamiento READ UNCOMMITTED es proporcionar una definición basada en estándares que permite para lecturas sin bloqueo.

...

Ahora, una base de datos que permitió una sucia lectura ... No sólo devolver el respuesta equivocada, sino que también se vuelve ... [una respuesta]. .. que nunca existió en la mesa. En una base de datos multiusuario, una lectura sucia puede ser una característica peligrosa. Personalmente, nunca he visto la utilidad de que ...

El punto aquí es que la lectura sucia es no es una característica; más bien, es una responsabilidad . En Oracle Database, es simplemente no es necesario. Obtiene todas las ventajas de de una lectura sucia-no bloqueo-sin ninguno de los resultados incorrectos .

+0

Resumen Ejecutivo: que no lo necesita, ya que Oracle ya hace lo correcto. –

3

La respuesta de Tom Kyte es correcta WRT oracle, no existe una lectura sucia debido a su arquitectura de Control de Concurrencia Múltiple (MVCC).

Desde la perspectiva de la funcionalidad de la aplicación, estoy completamente de acuerdo con Tom; no hay una buena razón o lecturas sucias.

¿Por qué usarlo fuera de Oracle? Donde no hay MVCC (por ejemplo, MySQL, Ingres) es un truco para evitar problemas de bloqueo que pueden ralentizar el rendimiento o hacer que el sistema de bloqueo se "quede sin bloqueos" si no se sintoniza correctamente. De la misma manera que necesita ajustar la reversión/deshacer en Oracle, debe administrar el sistema de bloqueo en bases de datos que no sean de MVCC.

Entonces, ¿por qué podría ser útil con Oracle? Como un aumento de rendimiento para funciones de solo lectura donde "datos incorrectos" es altamente improbable y altamente inconsecuente. En MySQL/DB2/Ingres/Informix (no estoy seguro acerca de SQL Server/Sybase) se puede usar para omitir la facilidad de administración de bloqueos para el rendimiento.

He aquí un ejemplo de una situación en la que se lee hacer no necesita consistencia:

  • Lista de todos los productos

He aquí un ejemplo de una situación en la que se lee necesidad consistencia:

  • Lista de productos en inventario

Oracle simplemente no concibe las lecturas sucias, ni podría "agregarse como una característica" sin perder realmente el beneficio del rendimiento (es decir se necesitarían demasiados trucos para obtener los datos sucios en la verdadera arquitectura MVCC de Oracle).

+2

yeh, pero ¿por qué obligar a la gente a leer sus publicaciones con wikipedia? Simplemente escriba el término completo una vez y luego puede usar la abreviatura –

+1

Las lecturas sucias son útiles cuando dentro de un procedimiento almacenado inserta registros en una tabla de registro para la depuración o verificación de rendimiento, o para verificar los pasos que su proceso de larga ejecución ha logrado. ¿Cómo leo estos registros con Oracle (como hago en SQL Server con la pista "nolock")? – alexbrina

0

Si bien las respuestas anteriores son realmente correcta, puede echar un vistazo a transacciones autónomas pero tenga en cuenta que no se recomienda y se puede echar un vistazo a aquí Autonomous Transactions y las desventajas aquí Autonomous Transactions a Poor Mis-Understood Feature .

+0

más adecuado como comentario. – jjj

+0

Sí. Tienes razón, pero como no tengo 50 rep no puedo comentar. Es por eso que la publicación. –

1

WITH UR rationale: Cuando se trata de una consulta SELECT SOLAMENTE (informe), no tiene sentido esperar a una confirmación. Si está informando sobre una tabla que se está actualizando, ya sea que obtenga esa actualización o no es inconsecuente. La lectura sucia es tan válida como los datos después de la confirmación. Considere si la consulta hubiera golpeado ese registro bloqueado un segundo antes.

Si ejecuta una consulta en una tabla cambiante, no obtendrá ningún punto establecido a tiempo. Los datos a los que se accede al principio de la consulta se encuentran en un momento anterior y luego se accede a los datos al final de la consulta. Puede haber numerosas actualizaciones en la tabla que pueden o no estar incluidas en los resultados de la consulta.

El uso de WITH UR y otros equivalentes de DBMS, proporciona una ganancia de rendimiento ya que las consultas no esperan las confirmaciones y no presenta ninguna pérdida en la integridad de los datos.

(Sal. Sólo tienes que configurar mi cuenta de lo que no estoy en condiciones de comentar otras respuestas.)

Cuestiones relacionadas