🧚 Écoute ! Beekeeper Studio est une interface de base de données rapide, moderne et open source Télécharger
15 juillet 2024 Par Matthew Rathbone

Tuer une requête

Avant de pouvoir tuer une requête, tu dois identifier celles qui posent problème. Utilise le SQL suivant pour lister toutes les requêtes en cours avec leur durée :

SELECT
    pid,
    user_name,
    starttime,
    query,
    elapsed
FROM
    stv_recents
WHERE
    state = 'Running'
ORDER BY
    elapsed DESC;

Résultat attendu :

pid user_name starttime query elapsed
123 admin 2023-10-01 10:00:00 SELECT * FROM ? 01:20:15
456 analyst 2023-10-01 10:45:00 UPDATE table ? 00:35:10
… … … … …

La colonne elapsed indique depuis combien de temps la requête s’exécute.

Une fois la requête problématique identifiée (grâce au pid de la liste ci-dessus), tu peux l’arrêter. Utilise la commande suivante :

CANCEL pid;

Exemple :

CANCEL 123;

Vérifier l’arrêt de la requête

Pour t’assurer que la requête a bien été arrêtée, relance la requête initiale :

SELECT
    pid,
    user_name,
    starttime,
    query,
    elapsed
FROM
    stv_recents
WHERE
    state = 'Running'
ORDER BY
    elapsed DESC;

La requête arrêtée ne devrait plus apparaître dans les résultats.

Gérer les requêtes bloquées

Parfois, des requêtes se retrouvent bloquées et doivent être tuées pour libérer les ressources. Tu peux identifier les requêtes bloquées grâce à la table STV_BLOCKED.

SELECT
    b.pid,
    b.user_name,
    b.db,
    b.query,
    l.pid AS blocked_by_pid,
    l.user_name AS blocked_by_user
FROM
    stv_blocked b
JOIN
    stv_locks l
ON
    b.lock_owner_pid = l.pid;

Résultat attendu :

pid user_name db query blocked_by_pid blocked_by_user
5678 analytics reporting SELECT count(*) FROM ?; 9101 Admin

Pour tuer une requête bloquée, utilise la commande CANCEL comme montré plus haut :

CANCEL 5678;

Automatiser l’arrêt des requêtes

Pour les bases de données aux exigences de performance strictes, automatiser la détection et l’arrêt des requêtes longues peut être très utile. Voici un exemple de procédure qui arrête les requêtes dépassant un seuil donné :

DO $$ 
DECLARE
    long_running_query RECORD;
BEGIN
    FOR long_running_query IN
        SELECT pid
        FROM stv_recents
        WHERE state = 'Running'
        AND elapsed > interval '00:30:00' -- Replace with desired threshold
    LOOP
        EXECUTE 'CANCEL ' || long_running_query.pid;
    END LOOP;
END;
$$;

Points importants

  • Permissions : seuls les utilisateurs disposant des permissions adéquates peuvent annuler des requêtes.
  • Impact : arrêter une requête peut affecter les performances de l’application ou provoquer des incohérences de données si c’est mal fait.
  • Surveillance : surveiller régulièrement les performances des requêtes aide à détecter les problèmes tôt.

Conclusion

Bien gérer les requêtes longues permet de garantir des performances optimales pour ton cluster Amazon Redshift. En suivant ces étapes, tu peux rapidement identifier et arrêter toute requête problématique. Mettre en place des solutions automatisées de surveillance et d’arrêt des requêtes t’aidera encore davantage à maintenir les performances.

Pense à tester toutes les commandes et tous les scripts dans un environnement hors production avant de les déployer en production, pour éviter toute interruption involontaire.

D’autres articles qui pourraient te plaire :

Beekeeper Studio est une interface de base de données gratuite & open source

Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.

La version Linux de Beekeeper est 100% complète : rien de bâclé, aucun compromis sur les fonctionnalités.

Ce que les utilisateurs disent de Beekeeper Studio

★★★★★
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données à nouveau agréable. »
— Alex K., développeur de bases de données
★★★★★
« J’ai essayé beaucoup d’interfaces de base de données, mais Beekeeper trouve le parfait équilibre entre fonctionnalités et simplicité. Ça marche, tout simplement. »
— Sarah M., ingénieure full stack