Академический Документы
Профессиональный Документы
Культура Документы
2018
Contenido
LABORATORIO 10. ................................................................................................ 3
Concurrencia y bloqueos en el SMBD Postgre SQL ............................................... 3
Server Estatus. .................................................................................................... 3
Creación de transacciones en 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 control de bloqueos ...................... 15
Calculo del tamaño de la tabla de bloqueos en el SMBD .................................. 17
Bloqueos a nivel de tabla ................................................................................... 17
Bloqueos a nivel de fila. ..................................................................................... 23
JMeter. ............................................................................................................... 27
LABORATORIO 10.
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 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 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” y abra una interfaz para ejecutar sentencias SQL, para ello pulse
el botón que tiene de icono una lupa con la sigla “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
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;
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
BEGIN TRANSACTION;
--Agregamos un nuevo servicio
INSERT INTO tiposervicio (descripcion) VALUES ('Oncologia');
--Agregamos una nueva eps y definimos un primer punto de retorno
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;
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
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;
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;
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;