[Postgresql] Arrêter / tuer une requête

 

Arrêter / tuer une requête dans Postgresql
Article original Publié le : 10 février 2020
Mise a jour le :

 

Suite a l’exécution d’une requête qui n’en fini pas, le serveur load et dépasse les 1.50, le cpu monte a 100% sur une vm pas trop sizé.

Pour killer le process de la requête, il faut connaître son PID

Depuis la db, il faut chercher dans la table pg_stat_activity, et filtrer sur le status actif.

# SELECT * FROM pg_stat_activity WHERE state = 'active';
 datid | datname |  pid  | usesysid | usename  | application_name | client_addr | client_hostname | client_port |         backend_start         |          xact_start           |        
  query_start          |         state_change          | waiting | state  |                                                                                                              
                                                                                              query                                                                                      
                                                                                                                       
-------+---------+-------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+--------
-----------------------+-------------------------------+---------+--------+--------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
 16384 | nom_db    | 17822 |       10 | postgres | psql             |             |                 |          -1 | 2020-02-10 14:50:40.344376+01 | 2020-02-10 14:50:49.676393+01 | 2020-02
-10 14:50:56.531487+01 | 2020-02-10 14:50:56.531497+01 | f       | active | select workspace_name,login,max(session_creation_date) as last_connection from account_session JOIN account u
sing (account_id) JOIN workspace using (workspace_id) where session_creation_date < now() - INTERVAL '1 YEAR' and workspace_name like 'sg-%' and account_id not in (select account_id fro m account_session where session_creation_date > now() - INTERVAL '1 YEAR') group by workspace_name,login order by 1,2;
 16384 | nom_db    | 21001 |       10 | postgres | psql             |             |                 |          -1 | 2020-02-10 16:39:23.114492+01 | 2020-02-10 16:44:04.517476+01 | 2020-02
-10 16:44:04.517476+01 | 2020-02-10 16:44:04.517483+01 | f       | active | SELECT * FROM pg_stat_activity WHERE state = 'active';
(2 lignes)

 

Puis killer le pid qui correspond a la requête

# SELECT pg_cancel_backend (17822);
pg_cancel_backend 
-------------------
t
(1 ligne)

 

Si le process ne veux pas se killer, utiliser la commande

# SELECT pg_terminate_backend(pid);

 

 

Source: https://stackoverflow.com/questions/35319597/how-to-stop-kill-a-query-in-postgresql

 

 

No votes yet.
Please wait...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.