Publicidad

miƩrcoles, 5 de agosto de 2020

Revision Bloqueos de Base de datos por medio de una Vista

GeneraciĆ³n de una vista para Monitorear bloqueos de tablas en nuestra Base de Datos


El primer punto seria conectarnos a nuestra base de datos, exportando nuestros accesos o de la forma tradicional:


sudo su postgres

psql MI_BASE

Ejecutamos el sig. fragmento:


CREATE VIEW lock_monitor AS(
SELECT
  COALESCE(blockingl.relation::regclass::text,blockingl.locktype) as locked_item,
  now() - blockeda.query_start AS waiting_duration, blockeda.pid AS blocked_pid,
  blockeda.query as blocked_query, blockedl.mode as blocked_mode,
  blockinga.pid AS blocking_pid, blockinga.query as blocking_query,
  blockingl.mode as blocking_mode
FROM pg_catalog.pg_locks blockedl
JOIN pg_stat_activity blockeda ON blockedl.pid = blockeda.pid
JOIN pg_catalog.pg_locks blockingl ON(
  ( (blockingl.transactionid=blockedl.transactionid) OR
  (blockingl.relation=blockedl.relation AND blockingl.locktype=blockedl.locktype)
  ) AND blockedl.pid != blockingl.pid)
JOIN pg_stat_activity blockinga ON blockingl.pid = blockinga.pid
  AND blockinga.datid = blockeda.datid
WHERE NOT blockedl.granted
AND blockinga.datname = current_database()
);


Ahora para visualizar los bloqueos en tiempo real solo tendremos que ejecutar la vista:


SELECT * from lock_monitor;

Si en algĆŗn momento decidimos eliminar el proceso que esta bloqueando nuestra tabla, ya sea por que se ciclo en Odoo o nos esta provocando un retraso en la operaciĆ³n el comando seria el siguiente:



SELECT pg_terminate_backend();

Dentro de los parentesis tendremos que meter el PID (ID del proceso) que queremos matar o eliminar este nos los arroja la vita del monitor.


0 comentarios:

Publicar un comentario