Transacciones, bloqueos y concurrencias.docx

MANEJO DE TRANSACIONES, BLOQUEOS Y CONTROL DE CONCURRENCIAS EJECUTANDO LA PRÁCTICA PROPUESTA ANDRES FERNANDO JAIMES FAB

Views 92 Downloads 65 File size 7MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

MANEJO DE TRANSACIONES, BLOQUEOS Y CONTROL DE CONCURRENCIAS EJECUTANDO LA PRÁCTICA PROPUESTA

ANDRES FERNANDO JAIMES FABIO ANDRES LIZARAZO CARLOS ANTONIO RAMIREZ

SERVICIO NACIONAL DE APRENDIZAJE- SENA (CASA) ESPECIALIZACION TECNOLOGICA EN GESTION Y SEGURIDAD DE BASES DE DATOS FICHA 1130488 PIEDECUESTA 2016

CONEXIONES DE USUARIOS Con el comando sys.dm_exec_sessions permitira visualizar todos los usuarios conectados su estado, tiempo conexión, procesos que realizo,ect al sistema manejador de base de datos.

NÚMERO DE PROCESO, ESTADO, BLOQUEOS Y COMANDOS QUE LOS USUARIOS ESTÁN EJECUTANDO. El comando sp_who nos permite ver la cantidad de procesos, estado del proceso, bloqueos y comandos que los usuarios han estado ejecutando en el sistema manejador de base de datos. (sys.sysprocesses)

OBJETOS BLOQUEADOS Con el comando sp_lock permite visualizar los objetos bloqueados de una base de datos, el estado y el tipo de bloqueo.

SELECT request_session_id sessionid, resource_type type, resource_database_id dbid, OBJECT_NAME(resource_associated_entity_id, resource_database_id) objectname, request_mode rmode, request_status rstatus FROM sys.dm_tran_locks WHERE resource_type IN ('DATABASE', 'OBJECT')

TRANSACCIONES BLOQUEADAS ACTUALES Con el comando sys.dm_tran_locks permitirá ver las transacciones que se bloquearon actualmente, el tipo de recurso, peticiones, tipo de respuesta.

MONITOR DE ACTIVIDAD Genera información general acerca de los procesos que se están ejecutando en el sistema manejador de bases de datos como lo es el id de sesión, la instancia, base de datos, el estado de tarea, comando, tiempo de respuesta.

Se representa los tipos de recursos que está utilizando el sistema el sistema manejador de bases de datos como bloqueos, sesiones, cerrojos, etc.

Muestra la cantidad de información de entrada y salida de datos desde las como lo son los reportes desde las diferentes bases de datos.

Genera la información acerca de las consultas ejecutadas actualmente, el número de veces ejecutadas, el tipo de consulta, el tiempo de duración y el origen de la base de datos.

INFORMES Desde la base de datos SSALUD generamos el informe de la cantidad de transacciones ejecutadas en la misma base de datos.

Informe de todas las transacciones realizadas en la secretaria de salud.

MANEJO DE TRANSACCIONES 

Abra la máquina virtual donde tiene instalado Windows server 2003 sp 2 y SQL Server 2008 R2, después inicio -> todos los programas -> SQL Server 2008 R2 -> SQL Server Management Studio.

Nos conectamos al servidor -> en la parte izquierda -> base de datos -> la Base de datos de la Secretaria de salud nombre “SSalud”.



Elaborar 2 transacciones diferentes insertando, actualizando o eliminando registro de esta base de datos, todas estas transacciones deben quedar abiertas, tomar impresione de pantalla de la consulta de la variable que almacena las transacciones activas y copiar el código de las 2 transacciones como evidencia.



Verificación de las transacciones abiertas: la consulta retornara la cantidad de transacciones activas.



La siguiente consulta mostrara los pid de todas las transacciones abiertas para su posterior análisis.



Abrir una consulta nueva en SQL Server 2008 R2 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 SSalud.

Este proceso completara las transacciones que se encuentran abiertas, guardando la información suministrada. 

Que sucede al hacer una consulta de todos los datos de la tabla EPS si anteriormente se ejecuta el siguiente comando.

Genera un error porque la llave de la EPS es autoincremental.

Se modifica el script y se ejecuta nuevamente:

Como se observa se puede visualizar que un dato fue insertado, este se muestra pero cualquier transacción que solicite su uso no lo podrá realizar debido a que no se ha realizado la confirmación del insert (commit) por esta razón podrá visualizar mas no ser utilizada. Para la cancelación de la transacción anterior ¿qué comando se debe utilizar?



Que le falta a la siguiente transacción para que se efectúen los cambios en la base de datos Secretaria de Salud.

Le hace falta el commit tran para que se confirme la transacción. 

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

SCRIPT BEGIN TRANSACTION INSERT INTO cliente (cedula, nombre) VALUES (1,'sena') COMMIT TRANSACTION INSERT INTO cliente (cedula, nombre) VALUES (1,'sena') INSERT INTO cliente (cedula, nombre) VALUES (1,'sena') COMMIT TRANSACTION

TIPO DE TRANSACCIÓN Explicita: inician (BEGIN TRANSACTION) y finalizan (COMMIT TRANSACTION), y albergan un conjunto de instrucciones dentro de la misma transacción. Automática: cada instrucción individual es una transacción y se confirma automáticamente. Implícita: crean una nueva transacción, cuando en una sesión de SQL Server se ejecuta algún ALTER TABLE, FETCH, REVOKE, CREATE, GRANT, SELECT, DELETE, INSERT, TRUNCATE TABLE, DROP, OPEN, y UPDATE, una vez creada, permanece abierta y no finaliza hasta que no se produce un ROLLBACK o se invoca al COMMIT.

BLOQUEOS 

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

COLUMNA

TIPO DE DATOS

DESCRIPCIÓN

spid

smallint

Id. de sesión.

ecid

smallint

status

nchar(30)

Id. de contexto de ejecución de un subproceso determinado, asociado con un Id. de sesión específico. ECID = {0, 1, 2, 3,...n}, donde 0 siempre representa el subproceso principal o primario, y {1, 2, 3,...n} representan los subprocesos secundarios. Estado del proceso. Los valores posibles son: Inactivo. SQL Server está restableciendo la sesión. Segundo plano. La sesión está ejecutando una tarea en segundo plano, como una detección de interbloqueos. Reversión. La sesión está realizando una reversión de una transacción. Pendiente. La sesión está esperando que un subproceso de trabajo esté disponible. Ejecutable. La tarea de la sesión está en la cola de ejecutables de un programador mientras espera obtener un cuanto de tiempo. Bloqueo por bucle. La tarea de la sesión está esperando que se libere un bloqueo por bucle. Suspendida. La sesión está esperando a que finalice un evento, como una entrada o salida.

loginame

nchar(128)

Nombre de inicio de sesión asociado al proceso específico.

hostname blk

nchar(128) char(5)

dbname cmd

nchar(128) nchar(16)

request_id

int

Nombre del host o equipo de cada proceso. Id. de sesión del proceso de bloqueo, si existe. De lo contrario, esta columna tiene el valor cero. Cuando una transacción huérfana distribuida bloquea una transacción asociada con un Id. de sesión determinado, esta columna devolverá '-2' para la transacción huérfana de bloqueo. Base de datos utilizada por el proceso. Comando de Motor de base de datos (instrucción Transact-SQL, proceso de Motor de base de datos interno, etc.) que se ejecuta para el proceso. Id. de las solicitudes que se ejecutan en una sesión específica.



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.

Actualmente no se encuentra ningún bloqueo en la base de datos. 

Analizar el siguiente script

Use SSalud; 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

Resultados:



Al ejecutar este script tener abierta las siguientes consultas: SELECT * FROM EPS

Resultados:

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?

Las consultas ejecutadas no presentan ningún inconveniente porque solo se está realizando uso de lectora y no escritura, en el informe de transacciones se observa que aún se encuentra una transacción activa, pero no representa gravedad si esta entidad no está siendo utilizada. Si se presentara algún inconveniente lo ideal es

identificar quien tiene la transacción abierta y cerrarla bien sea matando el proceso (kill pid), abortando (rollback) o guardándolo (commit ). 

Ahora ejecute 3 transacciones diferentes de lectura y escritura:

La primera transacción de solo lectura: SELECT * FROM EPS where ideps=1

La segunda transacción es de escritura de la tabla EPS: INSERT INTO [SSalud].[dbo].[EPS] ([nombre] ,[estadoeps]) VALUES ('Eps Prueba' ,1)

La tercera es de escritura y lectura de la tabla PERSONA: update persona set nombre='usuario prue' where idpersona='1082019' select top 2 * from Persona

Genere un informe de transacciones, bloqueos y ejecute el procedimiento sp_lock con las siguientes consultas: SELECT * FROM EPS SELECT * FROM Persona



Analice lo que ocurre con ellas:

Hasta ahora no se genera ningún bloqueo.

APACHE JMETER Ingrese al Apache Jmeter y cree un nuevo plan de pruebas que se denomine con su nombre y apellido “lizarazojaimesramirez” y que tenga por comentario “Secretaria de salud”.

Luego de crear el plan de pruebas, se crea y asigna a un nombre a los grupos de hilos como lo es el número de hilos, periodo de subida y contador de bucle.

Se realiza la configuración de conexión del apache jmeter con el sistema manejador de base de datos a la base de datos “SSalud”

Se asigna la petición JDBC o consulta a ejecutar en el plan de pruebas, comentario y el nombre de la variable.

Se genera un gráfico de resultados desde la consulta ejecutada anteriormente.

Reporte resumen de la consultada ejecutada.

Este es el Árbol de resultados de la consulta ejecutada donde nos muestra el estado de la consulta que fue exitoso.

Gráfico de resultados de la consulta.