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