Con este título tan original la mayoría esperaría el típico post explicando los diferentes tipos de niveles de aislamiento (si, existe un mundo más allá del NOLOCK J). Como eso es algo que está muy visto pues simplemente os dejaré el enlace aquí para quien quiera conocerlos mejor: http://msdn2.microsoft.com/en-us/library/ms173763.aspx

Para el resto que seguís interesados, voy a mostraros de qué forma podemos obtener el nivel de aislamiento de una sesión de nuestra base de datos.

En SQL Server 2000 la forma de conseguir esta información era bastante complicada. Se requería de la activación de un flag (3604) y además del uso del comando no documentado DBCC PSS.

La sintaxis del comando es DBCC PSS(uid [, spid]) por lo que si quisiéramos obtener el nivel de aislamiento de la conexión cuyo SPID es 53 deberíamos lanzar el siguiente script:

DBCC traceon(3604)

go

DBCC PSS (0,53)

En el mensaje devuelto encontraríamos el dato buscado entre muchos otros datos:

PSS:

—-

 

PSS @0x42C65270

—————

pspid = 53 m_dwLoginFlags = 0x03e0 plsid = 1119502760

pbackground = 0

pbSid

—–

01 .

sSecFlags = 0x12 pdeadlockpri = 0 poffsets = 0x0

pss_stats = 0x0 ptickcount = 12942872

pcputickcount = 27714691831378 ploginstamp = 20

ptimestamp = 2008-01-31 00:12:30.550 plangid = 0

pdateformat = 1 pdatefirst = 7 Language = us_english

UserName = sa poptions = 0x28480860 poptions2 = 0x7f438

pline = 1 pcurstepno = 1 prowcount = 0

pstatlist = 0 pcurcmd = 230 pseqstat = 0

ptextsize = 2147483647 pretstat = 0 CNestLevel = 0

@@procid = 0 pslastbatchstarttime = 2008-01-31 00:26:54.947

pmemusage = 5 hLicense = 0 tpFlags = 0x1

isolation_level = 2 fips_flag = 0x0 sSaveSecFlags = 0x0

psavedb = 0 pfetchstat = 0 pcrsrows = 0

pslastbatchtime = 2008-01-31 00:26:54.947 pubexecdb = 0

fInReplicatedProcExec = 0 pMsqlXact = 0x42C65E80 presSemCount = [0]0

En SQL Server 2005 las cosas son mucho más sencillas afortunadamente. El dato que buscamos lo podemos encontrar en la vista DMV sys.dm_exec_sessions con lo que únicamente deberemos lanzar una sencilla consulta sobre ésta para obtener el dato. En nuestro caso utilizaríamos la siguiente consulta para obtener el nivel de aislamiento del SPID 53:

select

case transaction_isolation_level

    when 1 then ‘Read Uncomitted’

    when 2 then ‘Read Committed’

    when 3 then ‘Repetible’

    when 4 then ‘Serializable’

    when 5 then ‘Snapshot’

end [Nivel aislamiento]

from sys.dm_exec_sessions

where session_id=53

Además, al estar trabajando con una vista y no con un oscuro comando DBCC podemos crear fácilmente consultas útiles agrupando información. Por ejemplo podemos obtener fácilmente cuantas sesiones tenemos en nuestro servidor con cada nivel de aislamiento:

select count(*),

case transaction_isolation_level

    when 1 then ‘Read Uncomitted’

    when 2 then ‘Read Committed’

    when 3 then ‘Repetible’

    when 4 then ‘Serializable’

    when 5 then ‘Snapshot’

end [Nivel aislamiento]

from sys.dm_exec_sessions

group by transaction_isolation_level

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada.

You May Also Like