lab10-post (nueva ventana)

Anuncio
LABORATORIO 10.
Concurrencia y bloqueos en el SMBD Postgre SQL
GUÍA DE LABORATORIO Nº 10
Actividad de Proyecto No. 5: Desarrollar mantenimiento
preventivo, correctivo o proactivo para garantizar niveles de
servicio requeridos por la organización.
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
Estructura de contenidos.
1. Introducción..............................................................................3
2. Objetivos...................................................................................4
3. Consideraciones.........................................................................5
4. Procedimiento............................................................................6
4.1. Herramientas del SMBD PostgreSQL......................................6
4.1.1. Server Status..........................................................6
4.1.2. Control del comportamiento de las transacciones y
bloqueos desde la herramienta “Server Status”............7
4.2. Gestión de transacciones en el SMBD PostgreSQL....................7
4.2.1. Creación de transacciones en el SMBD PostgreSQL........7
4.2.2. Deshacer transacciones en el SMBD PostgreSQL...........8
4.2.3. Consulta de la información de las transacciones
en SMBD PostgreSQL..............................................11
4.3. Gestión de bloqueos.......................................................... 12
4.3.1. Afinamiento del SMBD PostgreSQL para el
control de bloqueos:............................................... 12
4.4. Tipos de Bloqueos............................................................. 14
4.4.1. Bloqueos a nivel de tabla......................................... 14
4.4.2. Bloqueos a nivel de fila........................................... 18
4.5. JMeter............................................................................. 21
5. Evidencias a entregar................................................................24
2
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
1. Introducción.
En este laboratorio se realizaran actividades en las que se aborda
situaciones problemáticas que le ayudaran al administrador de bases de
datos (DBA) a desarrollar habilidades que le permitan realizar un control
adecuado sobre la concurrencia y bloqueos en la base de datos.
Los DBA tienen la responsabilidad de mantener disponibles los servicios
que presta la base de datos, para ello deben controlar el comportamiento
de los procesos que acceden de forma concurrente sobre datos compartidos
y los bloqueos que estos generan sobre los mismos.
3
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
2. Objetivos.
Objetivo General.
Supervisar y realizar ajustes sobre los parámetros
que permiten controlar el comportamiento de
los procesos concurrentes y bloqueos, con el
fin de mantener disponible la base de datos y
optimizar el desempeño del SMBD PostgreSQL.
Objetivos Específicos.
• Identificar las herramientas que son útiles
para la supervisión de transacciones y
bloqueos en el SMBD PostgreSQL.
• Utilizar las herramientas de supervisión
para monitorear el comportamiento de
las transacciones y bloqueos en el SMBD
PostgreSQL.
• Administrar los recursos utilizados por las
transacciones y bloqueos para mantener
disponible los servicios de la base de datos.
4
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
3. Consideraciones.
Antes de realizar los procedimientos planteados en este laboratorio, se
sugiere revisar los siguientes aspectos:
Ítem
Soporte Teórico
Descripción
Previo al desarrollo de este laboratorio debe haber
revisado el objeto de aprendizaje Concurrencia,
transacciones, accesos y bloqueos. También el
Manual de Instalación y ejecución de
Apache
Jmetter.
Manejo de sentencias SQL.
Productos
requeridos
El aprendiz antes de comenzar a realizar este
laboratorio debe tener los siguientes productos:
• Base de datos de la Secretaria de salud de la
alcaldía de San Antonio del SENA o en su defecto
el script de construcción de esta base de datos.
• Script de consultas suministrado, para ejecutar
en el Apache Jmeter.
Herramientas SW
Se requiere tener instaladas y configuradas las
siguientes herramientas para desarrollar este
laboratorio.
• Maquina virtual proporcionada en la plataforma,
con el SMBD PostgreSQL instalado.
• Apache Jmeter, el enlace de descarga se encuentra
en el manual suministrado en la carpeta del
laboratorio.
• JDBC de PostgreSQL para la configuración del
Apache Jmeter.
5
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
4. Procedimiento.
4.1. Herramientas del SMBD PostgreSQL.
4.1.1. Server Status.
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” esta 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 Status” y abra una interfaz
para ejecutar sentencias SQL, para ello pulse el botón que tiene de icono
una lupa con la sigla “SQL”.
Ilustración 1: Base de datos “secsalud” vista desde el pgAdmin3
6
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre 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.
Vuelva a la ventana del “Server Status” y pulse el botón “Refresh” que
tiene el siguiente icono . Inmediatamente se visualizara en la sección
“Locks” la información sobre los bloqueos que ha generado esta sentencia.
Importante: Nótese que la transacción se ha dejado abierta intencionalmente
para observar sus efectos sobre la tabla que esta accediendo.
4.1.2. Control del comportamiento de las transacciones y bloqueos
desde la herramienta “Server Status”.
En la ventana de la herramienta “Server Status” seleccione en la sección
“Locks” los bloqueos que desea terminar, luego pulse el botón “Terminate
backend” que tiene de icono la siguiente imagen . Mantenga la tecla “Shift”
oprimida para seleccionar varios bloqueos o transacciones a la vez.
4.2. Gestión de transacciones en el SMBD PostgreSQL.
Las transacciones es uno de los aspectos más importantes en el SMBD
PostgreSQL puesto que permiten manejar la concurrencia asegurando la
integridad de los datos y la consistencia de las operaciones realizadas
aun cuando existan múltiples conexiones intentando acceder a la misma
información.
4.2.1. 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 clausulas BEGIN
TRANSACTION y COMMIT, la sintaxis es la siguiente:
BEGIN TRANSACTION;
... operación 1
... operación 2
... operación 3
COMMIT; → si las operaciones de la transacción son consistentes los
cambios se confirman.
7
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
En el pgAdmin3 abra una ventana del “SQL Editor” y consulte los registros
de la tabla “estadopersona”, posteriormente ejecute la sentencia de la
siguiente transacción desde otra ventana del “SQL Editor”:
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 visualizara que todos los cambios que se ordenaban con las operaciones
escritas dentro de la transacción se realizaron correctamente.
4.2.2. 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 sentencias 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’;
INSERT INTO estadoeps (idestadoeps, descripcion) VALUES
(1,’Prueba’);
COMMIT;
8
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
Realice de nuevo la consulta sobre los registros de la tabla “estadoeps”
y observe que ninguno de los cambios indicados por las operaciones
que se encuentran dentro de la transacción se realizaron, debido a que
la operación INSERT esta violando la llave primaria de la tabla, lo que
produce que se reversen todas las operaciones de la transacción que se
han ejecutado.
•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 esta modificando en la base de datos.
... operación 3 → los cambios de esta operación se confirmaran en la
base de datos
COMMIT;
La utilización del ROLLBACK dentro de una transacción solo tiene sentido
en situaciones de concurrencia en las que se debe garantizar a los usuario
el acceso y la modificación de los registros de forma consistente.
Ejecute la siguiente transacción en una ventana del “SQL Editor”:
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’
9
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
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.
•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 especificas 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;
Ejecute la siguiente transacción en una ventana del “SQL Editor”:
Sentencia No.4:
--Creamos una nueva transacción
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.
10
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
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;
Verifique los cambios realizando una consulta sobre las tablas que
intervienen en la transacción.
4.2.3. Consulta de la información de las transacciones en SMBD
PostgreSQL.
4.2.3.1. Información de transacciones almacenada en el catalogo del
sistema.
En una ventana del “SQL Editor” escriba y ejecute la siguiente transacción:
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’);
Nota: Observe que la transacción no se ha confirmado “sin COMMIT”
intencionalmente para que podamos visualizar sus datos consultado el
catalogo del sistema.
En otra ventana del “SQL Editor” escriba y ejecute la siguiente consulta:
Sentencia No.6:
select * from pg_stat_activity psa RIGHT JOIN pg_stat_database psd USING(datid);
11
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
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.
Ilustración 2: Resultado de ejecutar la Sentencia No.6
4.2.3.2. Funciones de acceso a información de transacciones.
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):
completas (COMMIT)
Cantidad
de
transacciones
• pg_stat_get_db_xact_rollback(oid):
abortadas (ROLLBACK)
Cantidad
de
transacciones
Consulte y explique el funcionamiento de cada una de estas funciones y
realice un ejemplo.
4.3. Gestión de bloqueos.
4.3.1. Afinamiento del SMBD PostgreSQL para el control de
bloqueos1:
4.3.1.1. Edición de parámetros que controlan los bloqueos
1http://www.postgresql.org/docs/8.1/static/runtime-config-locks.html
12
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
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. ¿Investigue cual es un óptimo para este
parámetro?
• 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.
Entregue como evidencia el archivo “postgres.sql” con las modificaciones
indicadas anteriormente.
4.3.1.2. Calculo del tamaño de la tabla de bloqueos en el SMBD.
Con la siguiente formula se calcula la cantidad de ranuras que tendrá la
tabla de bloqueos:
= max_locks_per_transactions * (max_connections + max_prepared_transactions)
=
32
* (
5 +
10
)
=480
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
= 480 * 270 bytes
= 129600 bytes / 1024
= 126
MB
Calcule el tamaño de la tabla de bloqueos compartidos en MB teniendo en
cuenta los siguientes datos para cada parámetro
13
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
• max_locks_per_transactions:
consultado por usted
valor
óptimo
de
este
parámetro
• max_connections: 100
• max_prepared_trasaction: 5
Anexe al informe de evidencias el procedimiento que utilizo para calcular
el tamaño de la tabla compartida.
4.4. Tipos de Bloqueos2.
Existen varios modos de bloqueos en PostgreSQL para controlar el acceso
concurrente a los datos en tablas y filas, algunos de los bloqueos se
adquieren automáticamente antes de la ejecución de una sentencia o
inmediatamente después de que un registro sea extraído de una la fila,
otros se proporcionan para que sean usados por las aplicaciones.
4.4.1. 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
bloqueos que se genero.
• 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;
2
Alarcón Medina José Manuel. (2006) Administración del SGBD PostgreSQL.
Capitulo 10.4 y 10.5
14
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
Ilustración 3: Resultado de ejecutar la Sentencia No.7
• RowShareLock: lo adquieren las sentencias SELECT FOR UPDATE ó
LOCK TABLE para declaraciones IN ROW SHARE MODE.
Sentencia No.8:
BEGIN TRANSACTION;
SELECT * from historialpersona WHERE idpersona = 6611537 FOR
UPDATE;
Ilustración 4: Resultado de ejecutar la Sentencia No.8
Sentencia No.9:
BEGIN TRANSACTION;
LOCK TABLE historialpersona IN ROW SHARE MODE;
Ilustración 5: Resultado de ejecutar la Sentencia No.9
• 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;
15
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
Ilustración 6: Resultado de ejecutar la Sentencia No.10
Sentencia No.11:
BEGIN TRANSACTION;
LOCK TABLE historialpersona IN ROW EXCLUSIVE MODE;
Ilustración 7: Resultado de ejecutar la Sentencia No.11
• ShareLock: permite a otras transacciones leer la misma información
pero no escribir sobre ella, lo adquieren las sentencias CREATE INDEX
y LOCK TABLE para declaraciones IN SHARE MODE.
Sentencia No.12:
CREATE INDEX indice ON historialpersona (idpersona);
Ilustración 8: Resultado de ejecutar la Sentencia No.12
Sentencia No.13:
BEGIN TRANSACTION;
LOCK TABLE historialpersona IN SHARE MODE;
Ilustración 9: Resultado de ejecutar la Sentencia No.13
16
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
• ExclusiveLock: evita que otros puedan leer y escribir, lo adquieren
las sentencias LOCK TABLE para declaraciones IN EXCLUSIVE MODE,
puede bloquear la sentencia SELECT (sin FOR UPDATE).
Sentencia No.14:
BEGIN TRANSACTION;
LOCK TABLE historialpersona IN EXCLUSIVE MODE;
Ilustración 10: Resultado de ejecutar la Sentencia No.14
• 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;
Ilustración 11: Resultado de ejecutar la Sentencia No.15
• 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);
Ilustración 12: Resultado de ejecutar la Sentencia No.16
17
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
4.4.2. Bloqueos a nivel de fila.
Los bloqueos a nivel de fila pueden ser de dos tipos exclusivos o compartidos:
• Bloqueos exclusivos sobre filas.
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.
Ejecute la siguiente sentencia en una ventana del “SQL Editor”, la cual
realiza una consulta que crea un bloqueo exclusivo sobre una fila de la
tabla persona.
Sentencia No.17:
BEGIN TRANSACTION;
SELECT * FROM persona WHERE idpersona= 110763859 FOR UPDATE ;
Posteriormente abra otra ventana de “SQL Editor” y ejecute la siguiente
sentencia que intenta actualizar la fila que tiene un bloqueo exclusivo de
la consulta anterior.
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;
Lo que sucede al ejecutar esta combinación de sentencias es que la
primera consulta genera un bloqueo exclusivo sobre la fila con llave
primaria “110763859” que impide realizar cualquier actualización del
misma, hasta que esta no finalice o se cancele, sin embargo los datos
18
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
de la fila se mantienen disponibles para la consulta y bloqueados
únicamente para escribir.
La siguiente captura de pantalla del “Server Status” muestra la combinación
de bloqueos que se genera sobre la base de datos cuando se ejecutan las
sentencias 17, 18 y 19.
Ilustración 13: Bloqueos que generan las sentencias No. 17, 18 y 19 vistos
desde el Server Status
• Bloqueos compartidos sobre filas:
Los bloqueos compartidos sobre una fila permiten que otras transacciones
tengan el mismo tipo de bloqueo sobre la fila, pero impiden que otra
transacción pueda obtener bloqueo exclusivo sobre la misma fila hasta
que todos los bloqueos compartidos hallan finalizado. Para obtener un
bloqueo compartido sobre una fila se utiliza la sentencia SELECT FOR
SHARE.
Ejecute la siguiente sentencia en una ventana del “SQL Editor”, la cual
realiza una consulta que crea un bloqueo compartido sobre una fila de la
tabla persona.
Sentencia No.19:
BEGIN TRANSACTION;
SELECT * FROM persona WHERE idpersona= 110763859 FOR SHARE;
19
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
Ilustración 14: Obtención de un bloqueo compartido
Posteriormente abra otra ventana de “SQL Editor” y ejecute la siguiente
sentencia que intenta obtener un bloqueo exclusivo sobre la misma fila de
la sentencia anterior.
Sentencia No.20:
SELECT * FROM persona WHERE idpersona= 110763859 FOR UPDATE;
Ilustración 15: Intento de obtención de un bloqueo absoluto
En una nueva ventana de “SQL Editor” ejecute la siguiente sentencia
con la cual se comprueba, que los datos de la fila bloqueada puede ser
consultados obteniendo un bloqueo compartido sobre la misma.
Sentencia No.21:
SELECT * FROM persona WHERE idpersona= 110763859 FOR SHARE;
Ilustración 16: Consulta del contenido de la fila bloqueada
Lo que sucede al ejecutar esta combinación de sentencias es que la primera
consulta genera un bloqueo compartido sobre la fila con llave primaria
20
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
“110763859” que impide a cualquier otra sentencia obtener bloqueo
exclusivo sobre la misma fila, hasta que todos los bloqueos compartidos
existentes hayan finalizados.
La siguiente captura de pantalla del “Server Status” muestra la combinación
de bloqueos que se genera cuando ejecutamos las sentencias anteriores.
Ilustración 17: Bloqueos generados por las Sentencias No. 19, 20 y 21 vistos
desde el Server Status
4.5. 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”.
Posteriormente cree un grupo de hilos con una conexión a la base de datos
“secsalud” y tres peticiones JBDC en las que utilice una de las siguientes
consultas para cada solicitud.
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
21
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
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;
Por ultimo cree un receptor gráfico de resultados y comience a variar los
valores de entrada del plan de pruebas de acuerdo con la siguiente tabla.
Ejecute cada plan de prueba y registre los datos que se solicitan en la tabla.
Importante: Cuando este ejecutando cada plan de prueba mantenga las
mismas condiciones en cuanto a hardware y aplicaciones en memoria,
esto influye en la obtención de datos consistentes de la prueba.
Realice un análisis de los datos registrados en la tabla en donde establezca
la cantidad de usuarios concurrentes que puede atener el sistema
computacional sin degradar su rendimiento.
Analice cual es la mejor estrategia a seguir, frente a un posible aumento
de usuarios en los limites en que el sistema comienza a comprometer su
rendimiento. Algunas que puede considerar son:
• Limitar cantidad de usuarios concurrentes.
• Aumento de la capacidad del servidor.
• Aumento del tamaño de la tabla de bloqueos.
22
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
1
2
3
4
5
6
7
8
9
10
11
Plan de
prueba
Nº
10
25
50
100
250
500
1000
1500
2000
3000
4000
Nº de
hilos
10
10
10
10
10
10
10
10
10
10
10
5
5
5
5
5
5
5
5
5
5
5
Periodo de
Nº de
subida en peticiones
(s)
No. de
muestras
Desviación
Rendimiento
/Minuto
Media Mediana
Concurrencia y bloqueos en el SMBD Postgre SQL
23
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
5. Evidencias a entregar.
Informe que contenga los siguientes puntos:
1. Script con nueve (9) transacciones que definan sentencias SQL de tipo
DML inherentes a las tablas de la base de datos de la secretaría de salud
de la alcaldía “San Antonio del Sena”. Las tres (3) primeras transacciones
reunirán cada una no menos de cinco (5) sentencias, que deberán
ser confirmadas en su totalidad. Las siguientes tres (3) transacciones
ejecutarán las acciones programadas y sin que sean confirmadas se
deberán deshacer. Las transacciones restantes guardarán parcialmente
el resultado de sus operaciones ante la presencia de errores que no
permitan una ejecución completa.
2. Análisis de cuatro de las transacciones elaboradas en el punto anterior
con el apoyo de las herramientas del SMBD Oracle, identificando los objetos
que se bloquean, los tipos de bloqueos y los usuarios, transacciones o
procesos causantes de estos bloqueos.
3. Apreciaciones del rendimiento de Oracle a través de la base de datos
de la alcaldía evaluando el comportamiento del sistema a través de
las simulaciones con el utilitario Apache Jmeter y las herramientas del
SMBD. Este punto debe tratar situaciones como:
• Número de usuarios concurrentes hasta generar bloqueos en el sistema:
en este punto usted debe verificar en qué momento el sistema se
bloquea a causa de superar los límites por número de peticiones de
usuarios procesadas en un mismo instante de tiempo. Se debe mostrar
en el informe las capturas de pantallas que evidencian las acciones
asociadas al plan de prueba con Jmeter modificando el número de
usuarios y explicando por cada una el comportamiento derivado.
• Manifestaciones de bloqueos: en este ítem se debe documentar la
forma como se muestran los bloqueos y los informes que genera Jmeter
indicando la no respuesta del sistema.
De acuerdo a lo convenido en los planes de prueba, presentar
apreciaciones de cada una de las variables analizadas y el resultado
obtenido.
• ¿Qué acciones se pueden emprender una vez se producen bloqueos?
Los bloqueos generan el aumento en los tiempos de respuesta del
sistema, provocando inconformidad en los usuarios que pueden ver
afectado su trabajo, es por eso que se debe presentar en el informe
24
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Concurrencia y bloqueos en el SMBD Postgre SQL
las acciones de tipo preventivo y correctivo a seguir por el DBA de la
Secretaría de Salud una vez se generan bloqueos, o en su defecto la
forma de validar los mismos indicando el tiempo máximo que podría
estar un usuario sin respuesta del sistema, manteniendo coherencia
con los acuerdos de niveles de servicio establecidos.
• Limitar cantidad de usuarios: En este ítem del informe se debe presentar
una política de manejo del sistema indicando a los usuarios lo que puede
suceder si se superan los límites para recibir peticiones y entregar
respuestas en un instante de tiempo determinado. De igual forma
se requiere exponer con claridad los límites y las recomendaciones a
usuarios finales.
25
FAVA - Formación en Ambientes Virtuales de Aprendizaje
SENA - Servicio Nacional de Aprendizaje
Descargar