El documento describe los diferentes niveles de aislamiento en las transacciones de bases de datos. Hay cuatro niveles principales basados en el uso de bloqueos: lectura sucia, lectura comprometida, lectura repetible y secuenciable. Cada nivel permite diferentes tipos de efectos secundarios como lecturas sucias, lecturas no repetibles y lecturas fantasma. El nivel más alto, secuenciable, evita todos estos efectos a costa de un mayor uso de recursos y bloqueos.
Una transacción es una unidad de trabajo que se compone de una o más instrucciones SQL que realizan un conjunto de acciones relacionadas.
La transacción puede incluir varias instrucciones SQL, realizando cada una de ellas una tarea específica.
Para que un conjunto de acciones califique como una transacción, debe pasar la prueba ACID. ACID es el acrónimo comúnmente utilizado para referirse a los nombres en inglés de las cuatro características de una transacción (Atomic,Consistent, Isolated y Durable, respectivamente).
Una transacción es una unidad de trabajo que se compone de una o más instrucciones SQL que realizan un conjunto de acciones relacionadas.
La transacción puede incluir varias instrucciones SQL, realizando cada una de ellas una tarea específica.
Para que un conjunto de acciones califique como una transacción, debe pasar la prueba ACID. ACID es el acrónimo comúnmente utilizado para referirse a los nombres en inglés de las cuatro características de una transacción (Atomic,Consistent, Isolated y Durable, respectivamente).
B&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - RückmeldungWolfgang Hornung
Vorteile der Instandhaltung auf dem Tablet PC:
Die Lösung basiert auf SAP PM und ist sehr flexibel und offen aufgebaut und kann leicht angepasst bzw. erweitert werden. Die von B&IT ausgelieferten Standard-Apps können im Rahmen einer Projektlösung mit kundenbezogenen Anpassungen, zum Beispiel um einen Schichtreport, erweitert werden
Es können handelsübliche Apps eingebunden werden. Darüber hinaus können Kunden und Entwicklungspartner Entwicklungen auch in Eigenregie durchführen
Kostenersparnis: Handelsübliche Tablet PCs ersetzen spezialisierte und teure Industriegeräte. Günstige Software-Lizenzen
Die Offline-Fähigkeit der App-basierten Instandhaltungslösung ist sichergestellt. Diese wird bei Verbindungsabbrüchen und bei Instandhaltungsaktivitäten in Bereichen mit schlechtem bzw. gänzlich fehlendem Empfang in jedem Fall benötigt
Tiefe Integration in die Prozesse, Strukturen und Daten des SAP ERP
Sehr gute Performance durch JSON-Technologie
HTML5-basierte Apps sind auf Android, IOS (iPad) und Windows lauffähig
Hohe Flexibilität durch State-of-the-Art-Lösung ohne den Ballast von früheren mobilen Technologien
Basispaket „Mobile Instandhaltung mit dem Tablet PC (Basis: SAP PM)“ - Funktionsumfang:
Die Standard-Software ist auf IOS, Android und Windows lauffähig
User-Login mit dem SAP-User
Hauptmenü
Synchronisation Online / Offline
Anzeige des Arbeitsvorrats am Tablet-PC
Auftragsänderung und -anzeige
Rückmeldungen des Instandhalters (z.B. Zeiten, Fehlercodes): Anlage, Anzeige, Storno
Die Lösung basiert auf dem EPO-Connector for Apps als Grundlage der Integration mit dem Instandhaltungsmodul des SAP ERP
Als Option verfügbare Standard-Apps für die „SAP-integrierten Instandhaltung auf dem Tablet PC“:
Meldung anlegen, bearbeiten und anzeigen
Auftragssuche bzw. Auftragsidentifikation via Barcode mittels Scanner-App
Meldung verbrauchter Teile (Warenentnahme). SAP-Integration mittels SAP-Workflow
Komfortable Ersatzteilsuche im SAP ERP
Schicht-Report
Lagerbestand
Sowohl das Basispaket als auch die oben genannten Optionen werden als Standard-Software angeboten. Ergänzend bietet B&IT die Software-Wartung und den Applikations-Support an. Darüber hinaus konzipiert und realisiert B&IT Projektlösungen.
2. NIVELES DE AISLAMIENTO
El nivel de aislamiento de una
transacción
(transaction
isolation
level) define el grado en que se aísla
una
transacción
de
las
modificaciones de recursos o datos
realizadas por otras transacciones
3. El
nivel de aislamiento de una transacción
es una característica de vital importancia
en el desarrollo de aplicaciones de base
de datos, ya que afecta a los tipos y
duración de bloqueos que se producen en
una infraestructura de base de datos, lo
cual, tiene efectos directos en el
rendimiento y tiempo de respuesta de
nuestras consultas y transacciones
4. Lectura
sucia:
Las sentencias select son
ejecutadas si realizar bloques, pero
podría usarse una versión anterior
de un registro.
las lecturas no son consistentes al
usar este nivel de aislamiento.
5. Lectura no repetible:
una transacción vuelve a
leer datos que previamente
había leído y encuentra que
han sido modificados o
eliminados por una
transacción.
6. Lectura fantasma:
Una
transacción vuelve a ejecutar
una
consulta,
devolviendo
un
conjunto de registros que satisfacen
una condición de búsqueda y
encuentra que otros registro que
satisfacen la condición han sido
insertadas
por
otra
transacción
cursada.
7. Niveles de aislamiento:
Comportamiento permitido
Lectura
Nivel de aislamiento
Sucia
No repetible
Fantasma
Sí
Sí
Sí
Lectura comprometida
No
Sí
Sí
Lectura repetible
No
No
Sí
Secuenciable
No
No
No
Lectura no comprometida
8. SQL
permite todos estos
niveles, Oracle sólo permite
la lectura comprometida y
secuenciable.
Los
niveles se pueden
establecer en ambos para
cada transacción.
9. 4 niveles de aislamiento basados en bloqueos.
• READ UNCOMMITTED puede recuperar datos
modificados pero no confirmados por otras
transacciones (lecturas sucias - dirty reads).
• En este nivel se pueden producir todos los efectos
secundarios de simultaneidad (lecturas sucias,
lecturas no repetibles y lecturas fantasma
• - EJEMPLO: entre dos lecturas de un mismo registro
en una transacción A, otra transacción B puede
modificar dicho registro, pero no hay bloqueos ni
versiones de lectura, por lo que se minimiza la
sobrecarga.
10. Una
operación de lectura (SELECT) no
establecerá bloqueos compartidos (shared
locks) sobre los datos que está leyendo, por
lo que no será bloqueada por otra
transacción que tenga establecido un
bloqueo exclusivo por motivo de una
operación de escritura.
Este nivel de aislamiento ofrece grandes
beneficios de rendimiento, pero sólo se
utiliza en casos en que la ocurrencia de
lecturas sucias (dirty reads) no sea un
problema.
11. READ COMMITTED
permite
que entre dos lecturas de un
mismo registro en una transacción A, otra
transacción B pueda modificar dicho
registro, obteniendo diferentes resultados
de la misma lectura.
Evita las lecturas sucias (dirty reads), pero
por el contrario, permite lecturas no
repetibles
12.
Con ese nivel de aislamiento, una operación de
lectura (SELECT) establecerá bloqueos compartidos
(shared locks) sobre los datos que está leyendo. Sin
embargo, dichos bloqueos compartidos finalizarán
junto con la propia operación de lectura, de tal
modo que entre dos lecturas cabe la posibilidad
de que otra transacción realice una operación de
escritura.
EJEMPLO: ( UPDATE) en este caso, la segunda
lectura obtendrá datos distintos a la primera lectura
(lecturas no repetibles).
13. REPEATABLE READ
Evita que entre dos lecturas de un mismo
registro en una transacción A, otra transacción B
pueda modificar dicho registro, con el efecto de
que en la segunda lectura de la transacción A
se obtuviera un dato diferente. De este modo,
ambas
lecturas
serían
iguales
(lecturas
repetidas).
Una operación de lectura (SELECT) establecerá
bloqueos compartidos (shared locks) sobre los
datos que está leyendo, y los mantendrá hasta el
final de la transacción, garantizando así que no se
produce lecturas no repetibles (non repeatable
reads).
14. la Mayor consistencia en la transacción, mediante
mayores recursos y bloqueos evitan los problemas de
las lecturas sucias y de las lecturas no repetibles.
Este modo de aislamiento no evita las lecturas
fantasma, es decir, una transacción podría ejecutar
una consulta sobre un rango de filas
EJEMPLO: ( 100 filas) y de forma simultánea otra
transacción podría realizar un inserción de una o
varias filas sobre el mismo rango.
15. SERIALIZABLE
Garantiza que una transacción recuperará
exactamente los mismos datos cada vez que repita
una operación de lectura, es decir, la misma
sentencia SELECT con la misma cláusula WHERE
devolverá el mismo número de filas, luego no se
podrán insertar filas nuevas en el rango cubierto
por la WHERE, etc.
16. Se
evitarán las lecturas fantasma) aunque para
ello aplicará un nivel de bloqueo que puede
afectar a los demás usuarios en los sistemas
multiusuario (realizará un bloqueo de un rango de
índice conforme a la cláusula WHERE y si no es
posible bloqueará toda la tabla).
Evita los problemas de las lecturas sucias (dirty
reads), de las lecturas no repetibles (non
repeatable reads), y de las lecturas fantasma
(phantom reads).
17. es
muy importante recordar que el tiempo de
espera por un bloqueo por defecto en SQL es
infinito. Es decir, si tenemos una transacción que
está manteniendo un bloqueo sobre un recurso.
Para ello, es posible utilizar la sentencia SET
LOCK_TIMEOUT para especificar el tiempo máximo
de espera por bloqueo (en milisegundos).
En caso de que una transacción alcance el tiempo
máximo de espera por bloqueo, se producirá un
mensaje de error.
1222 (Msg 1222, Level 16, State 51, Line 1. Lock request
time out period exceeded.).
También es posible conocer el actual tiempo de
espera por bloqueo, consultando el valor de la
función del sistema @@LOCK_TIMEOUT.
18.
19.
en vez de realizar un uso intensivo de
bloqueos, su funcionamiento se basa en el
almacenamiento de versiones de filas en
TEMPDB.
Si una transacción empieza en un momento del
tiempo determinado, sólo será capaz de
acceder a la información de la base de datos
que era real en aquel momento del tiempo.
conflictos de actualización lo cual implicaría que la
transacción se deshace (Rollback).
20. Tiene
la ventaja de utilizar el versionado
de filas de tal modo, que las lecturas no
son bloqueadas por las escrituras y
viceversa.
Pueden producirse lecturas no repetibles y
lecturas fantasmas.
21. En PostgreSQL el bloqueo puede ser
Compartido (Share) o Exclusivo (Exclusive), son
administrados
por
un
“Lock
Manager.
si un bloqueo toma mucho tiempo en
ejecutarse se produce un Deadlock, el sistema
lo
muestra
como
un
Timeout.
Un bloqueo puede darse a una tupla, una
página
o
una
tabla
completa.
En PostgreSQL existe una tabla de locks, y esta
es consultada antes de ejecutar una
transacción
nueva.
22. Bloqueos y Tablas
Postgres ofrece varios modos de bloqueo para controlar el acceso
concurrente a los datos en tablas.
Todos los modos de bloqueo (excepto para AccessShareLock)
adquiridos en un transacción se mantienen hasta la duración de la
transacción.
Existen dos tipos de bloqueos:
• Bloqueos a nivel de tabla
• Bloqueos a nivel de registro
23. Bloqueos a Nivel de tabla
AccessShareLock Un modo de bloqueo adquirido automáticamente sobre
tablas que están siendo consultadas. Postgres libera estos bloqueos después
de que se haya ejecutado una declaración.
RowShareLock Adquirido por SELECT FOR UPDATE y LOCK TABLE
para declaraciones IN ROW SHARE MODE.
RowExclusiveLock Lo adquieren UPDATE, DELETE, INSERT y LOCK
TABLE para declaraciones IN ROW EXCLUSIVE MODE.
ShareLock Lo adquieren CREATE INDEX y LOCK TABLE para
declaraciones IN SHARE MODE.
ShareRowExclusiveLock Lo toma LOCK TABLE para declaraciones IN
SHARE ROW EXCLUSIVE MODE.
ExclusiveLock Lo toma LOCK TABLE para declaraciones IN EXCLUSIVE
MODE.
AccessExclusiveLock Lo toman ALTER TABLE, DROP TABLE, VACUUM
FULL, por defecto en un LOCK TABLE
24. Bloqueos a Nivel de Fila
• Este tipo de bloqueos se producen cuando campos internos de
una fila son actualizados (o borrados o marcados para ser
actualizados). Postgres no retiene en memoria ninguna
información sobre filas modificadas y de este modo no tiene
límites para el número de filas bloqueadas sin incremento de
bloqueo.
• Sin embargo, SELECT FOR UPDATE modificará las filas
seleccionadas marcándolas, de tal modo que se escribirán en
el disco.
• Los bloqueos a nivel de fila no afecta a los datos consultados.
Estos son usados para bloquear escrituras a la misma fila
únicamente.