Professional Documents
Culture Documents
en SQL Server
Enrique Puig | MAP | MCITP
e.puig@Outlook.es
@epuignouselles
http://www.greensql.com
http://www.pluralsight.com http://www.sqlsentry.com
Próximos SQL Saturday
6 de Diciembre de 2014
https://www.sqlsaturday.com/351/register.aspx
24 de Enero de 2015
https://www.sqlsaturday.com/346/register.aspx
18 de Abril de 2015
https://www.sqlsaturday.com/368/register.aspx
9 de Mayo de 2015
https://www.sqlsaturday.com/373/register.aspx
Capítulo Global PASS en Español
https://www.facebook.com/SpanishPASSVC
4 4
Asistencia Técnica
5
Enrique Puig
6 6
Objetivos
7
Agenda
8 8
¿Qué son los Bloqueos?
• Modelos de Aislamiento
• Bloqueos (pesimista)
• Versionado de filas (optimista)
A •Atomicidad
• Aseguran el Aislamiento
• Leyendo datos consistentes
• Si no son consistentes esperas
C •Consistencia
I •Aislamiento
D •Durabilidad
9 9
Niveles de Aislamiento – Bloqueos
ALTA BAJA
READ UNCOMMITED
CONSISTENCIA
CONCURRENCIA
READ COMMITED
REPEATABLE READ
SERIALIZABLE
BAJA ALTA
10 10
Tipos de Bloqueos básicos y compatibilidades
11 11
¿Qué es lo que se bloquea?
12 12
Hints para control de granularidad
Hint Descripción
ROWLOCK Solicita bloqueo a nivel de fila (KEY/RID)
TABLOCK Solicita bloqueo a nivel de tabla
PAGLOCK Solicita bloqueo a nivel de página de datos
TABLOCKX Solicita bloqueo exclusivo a nivel de Tabla
NOLOCK Desestima bloqueos adquiridos y produce
lecturas sucias “Dirty reads”
13 13
DEMO
14
Combatiendo los bloqueos
Row • SNAPSHOT
• READ COMMITED SNAPSHOT
Versioning • Impacto en TempDB
• READ UNCOMMITED
Dirty Reads • NOLOCK
• Vista inconsistente de datos
15 15
Combatiendo los bloqueos - Indexación
Lo mas común: Key/RID Locks
Tipo Tabla:HEAP
Id:1 Id:4 Id:10 Id:3 Id:22 Id:18 Id:19 Id:33 Id:89 Id:40
TRN 2:
Val:12 Val:10 Val:21 Val:34 Val:99 Val:14 Val:22 Val:8 Val:62 Val:99
update dbo.tab
set val=99
where id=40; TRN1: TABLE SCAN
16 16
Combatiendo los bloqueos - Indexación
Lo mas común: Key/RID Locks
Tipo Tabla: CLUSTERED INDEX
TRN 1 Root TRN 2
Index Seek Index Seek
TRN 1:
update dbo.tab
set val=99
where id=22;
Int. Int
TRN 2:
Id:1 Id:4 Id:10 Id:3 Id:22 Id:18 Id:19 Id:33 Id:89 Id:40
update dbo.tab
Val:12 Val:10 Val:21 Val:26 Val:99 Val:32 Val:22 Val:8 Val:62 Val:99
set val=99
where id=40;
18
Combatiendo los bloqueos – Versionado de filas
19 19
DEMO
20
Conclusiones
21 21
Preguntas?
A continuación …