Está en la página 1de 4

15/11/2016

TipoConcurrenciayNiveldeAislamientoenTransacciones|Pensandobajolalluvia

Pensandobajolalluvia
byRodrigoPerezBurgues

TipoConcurrenciayNiveldeAislamientoenTransacciones
Publicadoel29/05/2013

1Vote

TiposdeConcurrenciadeTransacciones
Optimista:Dejarealizarmodificacionesdelosdatosysepersisten(commitado).Cuandosevanapersistirse
verificaquenosehanmodificadoporotrastransaccionessimultneamenteencuyocasoproduceunerror.
MsinformacindelPatrnOptimista.
Pesimista:Paralosdatosmodificados,realizarunbloqueodelosmismos.Impendiendoqueotras
transaccionesrealicencambiosdeesosdatos.MsinformacindelPatrnPesimista.

TiposdeNiveldeAislamientodeTransaccin
READUNCOMMITTED:Leenvaloresmodificadosporotrastransaccionesnopersisitidos(commitados).
READCOMMITTED:Nodejanleervaloresmodificadosporotrastransaccionesnopersisitidos(commitados).
READCOMMITTEDalreleerdatosquesehancomitadoporotratransaccindurantelaejecucindela
propiaobtienevaloresdiferentes.
READ_COMMITTED_SNAPSHOT:EvitaelproblemadelREADCOMMITED.Creaunestadoenlabasede
datosdeestamaneralatransaccinleelosdatosreferidosaeseestado.Noimpidequeotrastransacciones
modifiquenlosdatosleidosporlanuestra.
REPEATABLEREAD:EvitaelproblemadelREADCOMMITED.REPEATABLEREADevitaqueotra
transaccinmodifiquelosdatosmodificadospornuestratransaccin.Dadoquelosdatosledospueden
dependerdelorealizadoenlaotratransaccin.
SERIALIZABLE:REPEATABLEREADqueademsseextiendeparainserciones.

TransaccionesenSQLSERVER
EnSQLServereltipodeconcurrenciaespesimista.Elbloqueoseactivaalmodificarlosdatosnoalleerlos.Si
queremosactivarloensulecturacondebemosusarlaclausulaWITHUPDLOCK.
1

SELECT*FROMTABLEWITH(UDPLOCK)WHEREID=1

ElniveldelAislamientoenSQLSERVERseindicaconlainstruccinSETTRANSACTIONISOLATIONLEVEL.
PordefectoesREADCOMMITTED.
EnSQLSERVERcuandoindicamosREADCOMMITTED,puedeserREADCOMMITTEDoREADCOMMITED
SNAPSHOT.Estosedeterminaenfuncindelaconfiguracindelabasededatos:
READCOMMITEDSNAPSHOT:LabasededatosseencuentraconlaconfiguracinSET
READ_COMMITTED_SNAPSHOTON.

https://rodrigopb.wordpress.com/2013/05/29/tipoconcurrenciayniveldeaislamientoentransacciones/

1/4

15/11/2016

TipoConcurrenciayNiveldeAislamientoenTransacciones|Pensandobajolalluvia

READCOMMITTED:LabasededatosseencuentraconlaconfiguracinSET
READ_COMMITTED_SNAPSHOTOFF
EnSQLAZUREsoloexisteREADCOMMITTEDSNAPSHOT.NosepuededesactivarconlaconfiguracinSET
READ_COMMITTED_SNAPSHOTOFF.

TransaccionesenOtrosEntornos
EnEntityFramework,LINQ,DataSet,eltipodeconcurrenciaesoptimista.
EnNHibernate,pordefectotieneconcurrenciaoptimista.Perosepuedehabilitarconcurrenciapesimista.
Engeneral,serecomindaelusodelTransactionScope,paradeterminarelniveldeaislamientocon
TransactionScopeOption.

EjemplodeTransacciones
Enelsiguientelink,estadisponibleunproyectodeejemplo:ConcurrencyAndIsolationOnTransaction.sln
Elproyecto,generadostransaccionesconcurrentesqueincrementanenunoelmismocampodeunatabladela
basededatos.EnfuncindelNiveldeAislamiento(READCOMMITEDoREPETIBLEREAD)yelEntrono
(EntitiyFramework,SQLoSQLconConcurrenciaPesimistaenLectura).Seobtiene:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

9:ENTITYReadCommitted
9:InitialValue=1
11:ReadValue=1
11:Incrementingto2
12:ReadValue=1
12:Incrementingto2
11:Saving
11:Commit
12:Saving
12:Commit
9:FinalValue=2
9:SQLReadCommitted
9:InitialValue=1
12:ReadValue=1
12:Incrementingto2
11:ReadValue=1
11:Incrementingto2
12:Saving
12:Commit
11:Saving
11:Commit
9:FinalValue=2
9:SQLUpdLockReadCommitted
9:InitialValue=1
14:ReadValue=1
14:Incrementingto2
14:Saving
14:Commit
11:ReadValue=2
11:Incrementingto3
11:Saving
11:Commit
9:FinalValue=3
9:ENTITYRepeatableRead
9:InitialValue=1
12:ReadValue=1
12:Incrementingto2

38
11:ReadValue=1
https://rodrigopb.wordpress.com/2013/05/29/tipoconcurrenciayniveldeaislamientoentransacciones/

2/4

15/11/2016

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

TipoConcurrenciayNiveldeAislamientoenTransacciones|Pensandobajolalluvia

11:ReadValue=1
11:Incrementingto2
12:Saving
11:Anerroroccurredwhileupdatingtheentries.Seetheinnerexcepti
onfordetails.
12:Commit
9:FinalValue=2
9:SQLRepeatableRead
9:InitialValue=1
12:ReadValue=1
12:Incrementingto2
13:ReadValue=1
13:Incrementingto2
12:Saving
13:Transaction(ProcessID68)wasdeadlockedonlockresourceswitha
notherprocessandhasbeenchosenasthedeadlockvictim.Rerunthetransaction
.
12:Commit
9:FinalValue=2
9:SQLUpdLockRepeatableRead
9:InitialValue=1
13:ReadValue=1
13:Incrementingto2
13:Saving
13:Commit
12:ReadValue=2
12:Incrementingto3
12:Saving
12:Commit
9:FinalValue=3
Acercadeestosanuncios

Compartir:


Megusta
Selprimeroendecirquetegusta.

Relacionado

GlosarioTerminosAzureSQL
En"SqlAzure"

AzureRedisCache
En"Azure"

ActiveGeoReplicationSQLAzure
En"SqlAzure"

EstaentradafuepublicadaenAzure,Desarrollo,SqlServeryetiquetadatransactionisolationlevel.Guardaelenlacepermanente.

https://rodrigopb.wordpress.com/2013/05/29/tipoconcurrenciayniveldeaislamientoentransacciones/

3/4

15/11/2016

TipoConcurrenciayNiveldeAislamientoenTransacciones|Pensandobajolalluvia

UnarespuestaaTipoConcurrenciayNiveldeAislamientoenTransacciones
Pingback:AzureRedisCache|Pensandobajolalluvia

Pensandobajolalluvia
BlogdeWordPress.com.

https://rodrigopb.wordpress.com/2013/05/29/tipoconcurrenciayniveldeaislamientoentransacciones/

4/4