AA10-Ev2-Manejo de transacciones, bloqueos y control de concurrencia ejecutando la práctica propuesta.

November 24, 2018 | Author: Edwin Alexander Suarez Palacio | Category: Sql, Postgre Sql, Table (Database), Information Management, Data Management Software
Share Embed Donate


Short Description

AA10-Ev2-Manejo de transacciones, bloqueos y control de concurrencia ejecutando la práctica propuesta....

Description

AA10-Ev2-Manejo de transacciones, bloqueos y control de concurrencia ejecutando la práctica propuesta.

CESAR YAIR CASTRO MURILLO EDWIN ALEXANDER SUAREZ INGRID MILENA PITA LIZARAZO

SERVICIO DE APRENDIZAJE SENA GESTIÓN Y SEGURIDAD EN BASE DE DATOS OCTUBRE DE 2017

Contenido LABORATORIO 10. ............................................................................................................................... 3 Concurrencia y bloqueos en el SMBD Postgre SQL ............. ...................... .................. .................. .................. .................. ................... ................... ......... 3 Server Estatus. ................................................................................................................................. 3 Creación de transacciones en e n el SMBD PostgreSQL ................. ........................... ................... .................. .................. .................. ................. ........ 5 Deshacer transacciones en el SMBD PostgreSQL................... ........................... ................... ................... .................. .................. .................. ........... .. 6 Deshacer selectivamente los cambios de una transacción en el SMBD PostgreSQL ................. .................... ... 11 Consulta de la información de las transacciones en SMBD PostgreSQL. ........... .................... .................. .................. ......... 13 Gestión de bloqueos ..................................................................................................................... 15 Afinamiento del SMBD PostgreSQL para el e l control de bloqueos ......................... .................................. .................. ............... ...... 15 Calculo del tamaño de la tabla de bloqueos en el SMBD................. SMBD.......................... .................. .................. .................. .................. ......... 17 Bloqueos a nivel de tabla .............................................................................................................. 17 Bloqueos a nivel de fila. ................................................................................................................ 23 JMeter. .......................................................................................................................................... 27

Contenido LABORATORIO 10. ............................................................................................................................... 3 Concurrencia y bloqueos en el SMBD Postgre SQL ............. ...................... .................. .................. .................. .................. ................... ................... ......... 3 Server Estatus. ................................................................................................................................. 3 Creación de transacciones en e n el SMBD PostgreSQL ................. ........................... ................... .................. .................. .................. ................. ........ 5 Deshacer transacciones en el SMBD PostgreSQL................... ........................... ................... ................... .................. .................. .................. ........... .. 6 Deshacer selectivamente los cambios de una transacción en el SMBD PostgreSQL ................. .................... ... 11 Consulta de la información de las transacciones en SMBD PostgreSQL. ........... .................... .................. .................. ......... 13 Gestión de bloqueos ..................................................................................................................... 15 Afinamiento del SMBD PostgreSQL para el e l control de bloqueos ......................... .................................. .................. ............... ...... 15 Calculo del tamaño de la tabla de bloqueos en el SMBD................. SMBD.......................... .................. .................. .................. .................. ......... 17 Bloqueos a nivel de tabla .............................................................................................................. 17 Bloqueos a nivel de fila. ................................................................................................................ 23 JMeter. .......................................................................................................................................... 27

LABORATORIO 10. Concurrencia y bloqueos en el SMBD Postgre SQL Actividad de Proyecto No. 5: Desarrollar mantenimiento preventivo, correctivo o proactivo para garantizar niveles de servicio requeridos por la organización.

Server Estatus. Ingrese al administrador gráfico “pgAdmin3” de PostgreSQL y conéctese a la base de datos “secsalud”, verifique que esta se encuentra correctamente creada. En el explorador de objetos de la ventana principal del “pgAdmin3” seleccione la base de datos de la “secsalud”, posteriormente diríjase di ríjase al menú “tools” y seleccione la opción “Server Status”.

La ventana principal de la herramienta “Server Status” está dividida en cuatro secciones en las l as que “Locks y Prepared Transactions” suministran información importante para la administración de bloqueos y transacciones en PostgreSQL. • La sección “Locks” suministra información sobre los bloqueos que están activos en PostgreSQL. • La sección “Prepared Transactions” suministra información sobre las transacciones activas en PostgreSQL. Minimice la ventana de la herramienta “Server Estatus” Estatus” y abra una interfaz para ejecutar sentencias SQL, para ello pulse el botón que tiene de icono una lupa con la si gla “SQL”.

En la ventana que se carga, seleccione la pestaña “SQL Editor” y escriba la sentencia que aparece en la siguiente imagen, posteriormente pulse el botón “Execute query” para ejecutar la sentencia.

BEGIN TRANSACTION; SELECT * FROM estadopersona WHERE descripcion = 'Cesante' FOR UPDATE; UPDATE estadopersona SET descripcion = 'En Mora' WHERE descripcion = 'Cesante'; INSERT INTO estadopersona (descripcion) VALUES ('Registrado'); INSERT INTO estadopersona (descripcion) VALUES ('N/R'); COMMIT;

Vuelva a la ventana del “Server Status” y pulse el botón “Refresh” que tiene el siguiente icono. Inmediatamente se visualizará en la sección “Locks” la información sobre los bloqueos que ha generado esta sentencia.

Creación de transacciones en el SMBD PostgreSQL

Para crear una transacción se coloca el conjunto de operaciones SQL que queremos ejecutar como una unidad, dentro de las cláusulas BEGIN TRANSACTION y COMMIT, la sintaxis es la siguiente: BEGIN TRANSACTION; ... operación 1 ... operación 2 ... o peración 3 COMMIT; → si las operaciones de la transacción son consistentes los cambios se confirman.

Para crear una transacción se coloca el conjunto de operaciones SQL que queremos ejecutar como una unidad, dentro de las cláusulas BEGIN TRANSACTION y COMMIT, la sintaxis es la siguiente:

Sentencia No.1: BEGIN TRANSACTION; SELECT * FROM estadopersona WHERE descripcion = ‘Cesante’ FOR UPDATE; UPDATE estadopersona SET descripcion = ‘En Mora’ WHERE descripcion = ‘Cesante’; INSERT INTO estadopersona (descripcion) VALUES (‘Registrado’); INSERT INTO estadopersona (descripcion) VALUES (‘N/R’); COMMIT;

Consulte de nuevo los registros de la tabla ‘estadopersona’ e inmediatamente se visualizará que todos los cambios que se ordenaban con las operaciones escritas dentro de la transacción se realizaron correctamente.

Deshacer transacciones en el SMBD PostgreSQL.

Las operaciones que están dentro de una transacción tienen la característica que al ejecutarse se completan todas o ninguna, para verificar esto realice una consulta sobre los registros de la tabla “estadoeps” posteriormente ejecute la sentencia de la siguiente transacción en una ventana del “SQL Editor”:

Sentencia No.2: BEGIN TRANSACTION; SELECT * FROM estadoeps WHERE idestadoeps=1 FOR UPDATE; UPDATE estadoeps SET descripcion = 'Operando' WHERE descripcion = 'Activa'; SELECT * FROM estadoeps WHERE idestadoeps=2 FOR UPDATE; UPDATE estadoeps SET descripcion = 'Suspendida' WHERE descripcion = 'Desactivada'; COMMIT;

Se ha realizado la actualización de los registros de la tabla, pero toco eliminar parte del código por que intenta insertar un dato donde ya existe ese id y no puede por que presentaría duplicidad de llave NSERT INTO estadoeps (idestadoeps, descripcion) VALUES (1,'Prueba'); COMMIT;

También para poder hacer las actualizaciones podemos usar ROLLBACK Deshacer parte de los cambios de una transacción en el SMBD PostgreSQL En situaciones de concurrencia sobre una o varias tablas es necesario deshacer parte de los cambios realizados por las operaciones de una transacción, esto es posible utilizando la sentencia ROLLBACK, la sintaxis es la siguiente: BEGIN TRANSACTION; ... operación 1 ... operación 2 ROLLBACK; → los cambios de las operaciones 1 y 2 no serán confirmadas porque causan problemas de consistencia

o conflicto en los objetos que está modificando en la base de datos. ... operación 3 → los cambios de esta operación se confirmarán en la base de datos COMMIT;

Sentencia No.3: BEGIN TRANSACTION; SELECT * FROM estadoeps WHERE idestadoeps=1 FOR UPDATE; UPDATE estadoeps SET descripcion = 'Operando' WHERE descripcion = 'Activa'; INSERT INTO estadoeps (descripcion) VALUES ('N/R'); ROLLBACK; SELECT * FROM estadoeps WHERE idestadoeps=2 FOR UPDATE; UPDATE estadoeps SET descripcion = 'Suspendida' WHERE descripcion = 'Desactivada'; COMMIT;

Antes de la ejecución del código

Posteriormente realice una consulta sobre la tabla “estadoeps” y observe que las operaciones UPDATE e INSERT que están antes del ROLLBACK no fueron confirmadas, mientras que los cambios indicados por la operación UPDATE que esta después del ROLLBACK fueron escritos correctamente en la tabla.

Después de la ejecución del código

Deshacer selectivamente los cambios de una transacción en el SMBD PostgreSQL

Con la instrucción SAVEPOINT es posible controlar selectivamente los cambios que producen las operaciones de una transacción, esto debido a que permite anular operaciones específicas de una transacción cuando sucede un error y confirmar las que han sido procesadas correctamente, la sintaxis es la siguiente: BEGIN TRANSACTION; ... operaciones1 SAVEPOINT retorno; ... operaciones2 ROLLBACK TO retorno; ... operaciones3 COMMIT;

Sentencia No.4: BEGIN TRANSACTION; --Agregamos un nuevo servicio INSERT INTO tiposervicio (descripcion) VALUES ('Oncologia'); --Agregamos una nueva eps y definimos un primer punto de re torno SAVEPOINT retorno1; INSERT INTO eps (nombre, estadoeps) VALUES ('SANITAS',1); --El nombre de la eps ingresada es “COLSANITAS” y no “SANITAS” esta ya existe en la base de datos, por tanto usamos el “retorno1” para deshacer la operación INSERT. ROLLBACK TO retorno1; --Ingresamos el nombre de la eps como es correcto. INSERT INTO eps (nombre, estadoeps) VALUES ('COLSANITAS',1); --Finalmente agregamos el servicio de oncología a las EPS que lo prestan INSERT INTO servicioeps VALUES (1,11,'A',300000, 'Unidad de medicina especializada'); INSERT INTO servicioeps VALUES (4,11,'A',250000, 'Unidad de medicina especializada'); COMMIT; Mostremos el estado actual de la tabla:

Ejecutamos el código:

Consulta de la información de las transacciones en SMBD PostgreSQL.

Sentencia No.5:

BEGIN TRANSACTION; SELECT * FROM estadoeps WHERE idestadoeps=1 FOR UPDATE; UPDATE estadoeps SET descripcion = 'En Operacion' WHERE descripcion = 'Activa'; SAVEPOINT retorno; INSERT INTO estadoeps (descripcion) VALUES ('N/R'); ROLLBACK TO retorno; INSERT INTO estadoeps (descripcion) VALUES ('No Registra');

Observe que la transacción no se ha confirmado “sin COMMIT” intencionalmente para que podamos visualizar sus datos consultado el catalogo del sistema.

Sentencia No.6: select * from pg_stat_activity psa RIGHT JOIN pg_stat_database psd USING(datid); Posteriormente en la pestaña “Data Output” identifique la fila que contiene la información correspondiente a la transacción que acabamos de ejecutar e interprete los campos y datos arrojados en cada uno de ellos. En la siguiente captura de pantalla se muestra el resultado de este procedimiento

Gestión de bloqueos Afinamiento del SMBD PostgreSQL para el control de bloqueos

El SMBD PosgreSQL proporciona las siguientes funciones de acceso a estadísticas que permiten establecer información sobre la cantidad de transacciones completadas y abortadas en el sistema: • pg_stat_get_db_xact_commit(oid): (COMMIT)

Cantidad

de

transacciones

completas

• pg_stat_get_db_xact_rollback(oid): (ROLLBACK)

Cantidad

de

transacciones

abortadas

 Abra el archivo de configuración “postgres.sql” y modifique los siguientes parámetros como se indica a continuación, recuerde que estos definen el comportamiento de los bloqueos en el SMBD PostgreSQL:



deadlock_timeout: tiempo que el servidor espera para comprobar si hay una condición de interbloqueo o punto muerto. Defina este parámetro en 800 milisegundos.





max_locks_per_transaction: indica un valor medio máximo para la cantidad de bloqueos que admitirá la tabla de bloqueos compartidos. Defina este parámetro en 32

max_connections: determina el numero máximo de conexiones concurrentes al servidor de base de datos. Se encuentra ubicado en la sección “CONNECTIONS AND AUTHENTICATION”. Establezca este parámetro en 1000 para este laboratorio



max_prepared_trasaction: establece el numero máximo de transacciones que pueden prepararse simultáneamente en el SMBD. Se encuentra ubicado en la sección “RESOURCE USAGE” dentro del archivo “postgres.sql ”. Defina este parámetro en 5 para este laboratorio

Calculo del tamaño de la tabla de bloqueos en el SMBD

= max_locks_per_transactions * (max_connections + max_prepared_transactions) = 64 * ( 5 + 1000 ) = 64.320 Cada bloqueo en la tabla de bloqueos ocupa un espacio de 270 bytes de memoria por lo que debemos realizar la siguiente operación para establecer el tamaño de la tabla en MB = 64.320 * 270 bytes = 17.366.400 bytes / 1024 = 16.959,4 MB Bloqueos a nivel de tabla

En el SMBD PostgreSQL existen siete tipos de bloqueos a nivel de tabla a continuación se presenta un ejemplo de cada uno de ellos. Escriba y ejecute en una ventana del “SQL Editor” cada una de las siguientes sentencias, posteriormente abra el “Server Status” y verifique el tipo de bloqueo en la sección “Locks”. No olvide pulsar el botón “Refresh” cada vez que ejecute una nueva sentencia para que muestre los datos del bloqueo que se generó.

• AccessShareLock: lo adquieren automáticamente las tablas que están   siendo consultadas y se libera después de que se haya ejecutado la sentencia.

Sentencia No.7 BEGIN TRANSACTION; SELECT * FROM historialpersona;

Sentencia No.8: BEGIN TRANSACTION; SELECT * from historialpersona WHERE idpersona = 6611537 FOR UPDATE;

Sentencia No.9: BEGIN TRANSACTION; LOCK TABLE historialpersona IN ROW SHARE MODE;

RowExclusiveLock: lo adquieren las sentencias UPDATE, DELETE, INSERT y LOCK TABLE para declaraciones IN ROW EXCLUSIVE MODE.

Sentencia No.10: BEGIN TRANSACTION; UPDATE historialpersona SET estadopersona = 1, ideps =6 WHERE idpersona = 6611537;

Sentencia No.11: BEGIN TRANSACTION; LOCK TABLE historialpersona IN ROW EXCLUSIVE MODE;

Sentencia No.12: CREATE INDEX indice ON historialpersona (idpersona);

Sentencia No.13: BEGIN TRANSACTION; LOCK TABLE historialpersona IN SHARE MODE;

Sentencia No.14: BEGIN TRANSACTION; LOCK TABLE historialpersona IN EXCLUSIVE MODE;

ShareRowExclusiveLock: lo adquieren las sentencias LOCK TABLE para declaraciones IN SHARE ROW EXCLUSIVE MODE. Presenta conflictos con los bloqueos RowExclusiveLock, ShareLock, ShareRowExclusiveLock, ExclusiveLock y AccessExclusiveLock.

Sentencia No.15: BEGIN TRANSACTION; LOCK TABLE historialpersona IN SHARE ROW EXCLUSIVE MODE;

 AccessExclusiveLock: lo adquieren las sentencias ALTER TABLE, DROP TABLE, VACUUM y LOCK TABLE. Presenta conflictos con los bloqueos RowShareLock, RowExclusiveLock, ShareLock y ShareRowExclusiveLock.

Sentencia No.16: BEGIN TRANSACTION; ALTER TABLE historialpersona ADD COLUMN estado VARCHAR(10);

Bloqueos a nivel de fila.

Los bloqueos exclusivos sobre una fila se producen automáticamente cuando se actualizan o eliminan sus campos y se mantienen hasta que la transacción termine o se cancele. Para obtener un bloqueo exclusivo sobre una fila se utiliza la sentencia SELECT FOR UPDATE.

Sentencia No.17: BEGIN TRANSACTION; SELECT * FROM persona WHERE idpersona= 110763859 FOR UPDATE

Sentencia No.18: UPDATE persona SET tipoidentificacion = 1 WHERE idpersona = 110763859; En una nueva ventana de “SQL Editor” ejecute la siguiente sentencia que comprueba, que los datos de la fila bloqueada se encuentran disponibles solo para lectura.

Sentencia No.19: SELECT * FROM persona WHERE idpersona= 110763859;

Sentencia No.19: BEGIN TRANSACTION; SELECT * FROM persona WHERE idpersona= 110763859 FOR SHARE;

Sentencia No.20: SELECT * FROM persona WHERE idpersona= 110763859 FOR UPDATE;

Sentencia No.21: SELECT * FROM persona WHERE idpersona= 110763859 FOR SHARE;

JMeter. Ingrese al Apache Jmeter y cree un nuevo plan de pruebas que se denomine con su nombre y apellido “nombre_apellido” y que tenga por comentario “secretaria de salud”.

Consulta 1: Listado con el número de identificación, nombre y apellido de las personas, además del nombre de la EPS y la fecha de ingreso y salida. SELECT p.idpersona, p.nombre, p.apellido, e.Nombre, h.fechaingreso, h.fecharetiro FROM persona p INNER JOIN historialpersona h on p.idpersona=h.idpersona INNER JOIN eps e on e.ideps=h.ideps ORDER BY p.apellido

Consulta 2: Listado en que se visualiza las EPS con el nombre de los servicios que presta y el costo de cada uno ellos. BEGIN; SELECT e.nombre, t.descripcion, s.detalle, s.valor FROM eps e INNER JOIN servicioeps s on e.ideps=s.ideps INNER JOIN tipoServicio t on s.idtiposervicio=t.idtiposervicio ORDER BY e.nombre COMMIT;

Consulta 3: Listado con el número de identificación, nombre y apellido de las personas, además del tipo de afiliación que tiene. BEGIN; SELECT p.idpersona, p.nombre, p.apellido, t.descripcion FROM persona p INNER JOIN historialpersona h ON p.idpersona=h.idpersona INNER JOIN tipoafiliado t ON h.tipoafiliado=t.idtipoafiliado ORDER BY t.descripcion; COMMIT;

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF