Está en la página 1de 19

CONCURRENCIAS Y BLOQUEOS

SMBD SQL SERVER

AA10 – EV2

Aprendiz: Yenisse Pardo Ariza


Programa: (1881789) – Especialización Tecnológica Gestión y Seguridad de BD
Instructor Vocero: Candelaria Victoria Suarez Beleño
Instructor de Apoyo: Adriana Cristina Castilla López
Instructor de Apoyo de Ficha: Belkis Milena Guell Muñoz
Sede: Centro Nacional Colombo Alemán – SENA. Regional Atlántico
Fecha: 09 de Diciembre de 2019
MANEJO DE TRANSACCIONES.
Abrir una consulta nueva en SQL Server 2014 y escribir el siguiente comando COMMIT

TRANSACTION y verificar de nuevo la cantidad de transacciones activas y determinar que hace este
comando en la base de datos SecretariaSalud
RESULTADO = Mens. 3902, Nivel 16, Estado 1, Línea 9 La solicitud COMMIT TRANSACTION no tiene la
correspondiente BEGIN TRANSACTION.

Este comando por sí solo no hace nada, debe ser acompañado de otras cláusulas, dado que este
comando se utiliza para Finalizar la transacción si no se han encontrado errores. Que sucede al hacer una
consulta de todos los datos de la tabla EPS si anteriormente se ejecuta el siguiente comando:

BEGIN TRANSACTION INSERT


INTO EPS (ideps, nombre, estadoeps)VALUES (15,’confisena’,1)’
RESULTADO= Mens. 544, Nivel 16, Estado 1, Línea 2 No se puede insertar un valor explícito en la
columna de identidad de la tabla 'EPS' cuando IDENTITY_INSERT es OFF.

Esto ocurre porque SQL server no permite insertar datos a llaves primarias de forma normal

Para la cancelación de la transacción anterior ¿qué comando se debe utilizar? Es necesario utilizar el
comando SET IDENTITY_INSERT EPS ON para que deje insertar datos de forma de inserción explicita
en la tabla a una pk.

Ejemplo:

BEGIN TRANSACTION
SET IDENTITY_INSERT EPS ON
INSERT INTO EPS (ideps, nombre, estadoeps)
VALUES (15,’confisena’,1)
Al utilizar el comando ya se puede hacer los insert en la tabla EPS.
al revisar que se quedó guardada nos muestra el nuevo registro, pero en mi caso demoro bastante la
consulta de la tabla EPS

¿Qué le falta a la siguiente transacción para que se efectúen los cambios en la base de datos
Secretaria de Salud?

BEGIN TRANSACTION
INSERT INTO persona (idPersona, tipoidentificacion, nombre, apellido,
fechaNacimiento, sexo)
VALUES (1112548, 1, 'Pedro', 'Garcia', 1982-01-27, 'M');
INSERT INTO EPS (nombre, estadoeps) VALUES
('confinacional',4);

RESPUESTA= Agregar el comando SET IDENTITY_INSERT [tabla] ON, para que esta transacción pueda correr
y arreglar campos tabla persona: tipoidentifiacion, idPersona; quedaría:

BEGIN TRANSACTION
SET IDENTITY_INSERT EPS ON
INSERT INTO Persona (idPersona, tipoidentificacion, nombre, apellido,
fechaNacimiento, sexo)
VALUES (111245548, 1, 'Pedro', 'Garcia', 1982-01-27, 'M')
INSERT INTO EPS (ideps, nombre, estadoeps)
VALUES (16,'confiacional',4)

En el siguiente cuadro especificar para cada tipo de transacción si es implícita, explicita o


automática.

SCRIPTS TIPO DE TRANSACCION

BEGIN TRANSACTION INSERT INTO cliente EXPLICITAS


(cedula, nombre) VALUES (1,’sena’) COMMIT
TRANSACTION

INSERT INTO cliente(cedula,nombre)VALUES AUTOMATICAS


(1,’sena’)

INSERT INTO cliente(cedula,nombre)VALUES EXPLICITAS


(1,’sena’) COMMIT TRANSACTION

Transacciones explícitas

Por el contrario, las Transacciones explícitas son las que se define en el código T-SQL. Hay que indicar
cuando se inician (BEGIN TRANSACTION) y cuando finalizan (COMMIT TRANSACTION), y pueden
albergar un conjunto de instrucciones dentro de la misma transacción. Cuando se produce el
COMMIT, se hacen efectivos los cambios en los ficheros de datos (.mdf y .ndf). Mientras no se realiza el
COMMIT las sentencias de los cambios se guardan en el log de transacciones (.log), que gracias a este es
posible revertir los cambios si fuese necesario.

Automática

Es el modo de administración de transacciones predeterminado de SQL Server Database Engine


(Motor de base de datos de SQL Server). Cada instrucción Transact-SQL se confirma o se revierte
cuando finaliza. Si una instrucción termina correctamente, se confirma; si encuentra un error, se
revierte. Una conexión a una instancia de Motor de base de datos funciona en modo de
confirmación automática siempre que no se suplante el modo predeterminado mediante
transacciones explícitas o implícitas.
BLOQUEOS

Abra una nueva consulta. Use la base de datos Secretaria de Salud En una nueva consulta ejecute
sp_lock y revise los resultados.

Abra informe de transacciones de bloqueo para verificar que no hay ningún bloqueo activo. Clic
derecho en su bd -> informe -> informe estándar -> Todas las transacciones de bloqueo.
Analizar el siguiente script.

Use SecSalud:

BEGIN TRAN
PRINT ‘Transacciones Activas’
SELECT @@TRANCOUNT SELECT *
FROM EPS
PRINT ‘Actualizamos la tabla EPS’
SELECT * FROM EPS
UPDATE EPS SET nombre = ‘SALUDCOOPx’ WHERE nombre =
‘SALUDCOOP’
PRINT ‘Miramos la actualización’
SELECT * FROM EPS WHERE ideps = 1
PRINT ‘Transacciones Activas’ PRINT
@@TRANCOUNT SELECT *
FROM EPS
PRINT ‘Identificador de bloqueo‘
SELECT @@spid

Al ejecutar este script tener abierta las siguientes consultas:

SELECT * FROM EPS

Informe de todas las Transacciones


Informe de todas las transacciones de bloqueo
Sp_lock
¿Qué pasa con cada consulta? ¿Hay errores? Si es así, ¿Cómo se solucionarían?

El Scrip ejecuta normalmente las condicionales del sql para hacer el update, y en el aparte mensaje
muestra el comentario de cada transacción como esta especificado en el sql.

CONCURRENCIA, TRANSACCIONES, ACCESOS Y BLOQUEOS. MANEJO DE JMETER TIPOS DE

CONCURRENCIA DE TRANSACCIONES

 Optimista: Deja realizar modificaciones de los datos y se persisten (commitado). Cuando se vana
persistir se verifica que no se han modificado por otras transacciones simultáneamente; en cuyo caso
produce unerror.

 Pesimista: Para los datos modificados, realizar un bloqueo de los mismos. Impendiendo que otras
transacciones realicen cambios de esos datos.

TIPOS DE NIVEL DE AISLAMIENTO DE TRANSACCIÓN

 READ UNCOMMITTED: Leen valores modificados por otras transacciones no persistidos


(commitados).

 READ COMMITTED: No dejan leer valores modificados por otras transacciones no


persisitidos (commitados). READ COMMITTED al releer datos que se han comitado por
otra transacción durante la ejecución de la propia; obtiene valores diferentes.

 READ_COMMITTED_SNAPSHOT:Evita el problemadelREADCOMMITED.

Crea un estado en la base de datos; de esta manera la transacción lee los datos referidos a ese
estado. No impide que otras transacciones modifiquen los datos leídos por la nuestra.
 REPEATABLE READ: Evita el problema del READ COMMITED. REPEATABLE

READevitaque otratransacciónmodifiquelos datosmodificados pornuestratransacción.Dadoque los


datos leídos; pueden depender de lo realizado en la otra transacción.

 SERIALIZABLE:REPEATABLEREAD que ademásseextiende parainserciones.

TRANSACCIONES EN SQL SERVER

En SQL Server el tipo de concurrencia es pesimista. El bloqueo se activa al modificar los datos; no al
leerlos. Si queremos activarlo en su lectura debemos usar la cláusula WITH UPDLOCK.

SELECT * FROM TABLE WITH (UDPLOCK) WHERE ID = 1

El nivel del Aislamiento en SQL SERVER se indica con la instrucción SET TRANSACTION ISOLATION LEVEL.
Por defecto es READ COMMITTED. En SQL SERVER cuando indicamos READ COMMITTED, puede ser READ
COMMITTED o READ COMMITED SNAPSHOT. Esto se determina en función de la configuración de la
base de datos:

 READ COMMITED SNAPSHOT: La base de datos se encuentra con la configuración SET


READ_COMMITTED_SNAPSHOT ON.

 READ COMMITTED: La base de datos se encuentra con la configuración SET


READ_COMMITTED_SNAPSHOT OFF.

En SQL AZURE solo existe READ COMMITTED SNAPSHOT. No se puede desactivar con la
configuración SET READ_COMMITTED_SNAPSHOT OFF.

TRANSACCIONES EN OTROS ENTORNOS

En Entity Framework, LINQ, DataSet,… el tipo de concurrencia es optimista. En NHibernate, por


defecto tiene concurrencia optimista. Pero se puede habilitar concurrencia pesimista. En general, se
recomienda el uso del TransactionScope, para determinar el nivel de aislamiento con
TransactionScopeOption.

RENDIMIENTO CON JMETER

Se ha permitido desarrollar una herramienta de análisis de resultados similar a la que proporcionan las
herramientas comerciales. Las principales ventajas que aporta son:

 Permite generar un informe de pruebas de resultados de manera automática sin necesidad de


tratar los datos en hojas de cálculo.

 Permite estudiar de manera gráfica la relación de los diferentes indicadores de las pruebas,
generando automáticamente gráficas de rendimiento. Facilita la Identificación de los
posibles puntos de saturación para detectar "cuellos de botella".

 Desenmascara los posibles errores de la aplicación porla aplicación de concurrencia.

 Permite recuperar de manera íntegra los resultados de pruebas anteriores, o almacenarlos en


un histórico para posibles comparaciones de resultados.
El objetivo final es dotar al ingeniero de pruebas de una herramienta que aumente su productividad, y
también la capacidad de análisis para dotar de mayor calidad las pruebas de rendimiento.

MANEJO DE TRANSACCIONES Y CONTROL DE CONCURRENCIA, JMETER - PRÁCTICA

Para este laboratorio, se Utilizaron parámetros de configuración en el base de datos, los cuales por
motivo de facilidad y configuración de mi equipo.

Nombre de la variable = sqlvariable


Transation isolation = TRANSATION_REPETEABLE_READ
URL BD = jdbc: sqlserver: //localhost:1433;databaseName=SecretariaSalud
Query de validación = Select 1
JDBC clase Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver Usuario =
servidor
Password = *******

Primero damos un nombre al Plan de Prueba y agregamos el conector JDBC


CREAMOS PETICION 1.

CREAMOS PETICION 2
CREAMOS PETICION 3

ejecutamosel plandepruebas,observamosel resumede reporte de las 3peticiones realizadas


Observamos la grafica de resultado el comportamiento.

Observamos el monitor de recursos de mi computador.


Observamos el monitor de rendimiento de mi equipo.

Observamos el monitor de actividad del manejador de base de datos


WIN -DDU0EI1M8NK\...itor de actividad —H X

1 WIN-DD 24W
1 WIN-DD 1879210 LCK Id S Ñ O& 24W
1 WIN-DD MW
1 WIN-DD RUNNING SELECT 24W
1 WIN-DD 24W
1 WIN-DD 24W
1 WIN-DD 24W
1 WIN-DD 24W

También podría gustarte