🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
15 luglio 2024 Di Matthew Rathbone

Terminare una query

Prima di terminare una query, devi capire quali query stanno causando problemi. Usa questo SQL per elencare tutte le query in esecuzione con la relativa durata:

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

Output previsto:

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 colonna elapsed mostra da quanto tempo la query è in esecuzione.

Una volta individuata la query problematica (usando il pid dall'elenco sopra), puoi terminarla con questo comando:

CANCEL pid;

Esempio:

CANCEL 123;

Verificare la terminazione della query

Per assicurarti che la query sia stata terminata, esegui di nuovo la query iniziale:

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

La query terminata non dovrebbe più comparire nei risultati.

Gestire le query bloccate

A volte le query si bloccano e vanno terminate per liberare le risorse. Puoi individuare le query bloccate usando la tabella 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;

Output previsto:

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

Per terminare una query bloccata, usa il comando CANCEL come visto prima:

CANCEL 5678;

Automatizzare la terminazione delle query

Per i database con requisiti di prestazioni stringenti, può essere utile automatizzare il rilevamento e la terminazione delle query di lunga durata. Ecco un esempio di procedura che termina le query in esecuzione oltre una soglia specificata:

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;
$$;

Considerazioni importanti

  • Permessi: solo gli utenti con i permessi adeguati possono annullare le query.
  • Impatto: terminare una query può influire sulle prestazioni dell'applicazione o causare incoerenze nei dati se fatto in modo scorretto.
  • Monitoraggio: monitorare regolarmente le prestazioni delle query aiuta a individuare i problemi in anticipo.

Conclusione

Gestire bene le query di lunga durata ti aiuta a mantenere prestazioni ottimali nel tuo cluster Amazon Redshift. Seguendo questi passaggi puoi individuare e terminare rapidamente qualsiasi query problematica. Implementare soluzioni automatiche per il monitoraggio regolare e la terminazione delle query può aiutarti ulteriormente a mantenere le prestazioni.

Assicurati di testare tutti i comandi e gli script in un ambiente non di produzione prima di usarli in produzione, per evitare interruzioni involontarie.

Altri articoli che potrebbero piacerti:

Beekeeper Studio è una GUI per database gratuita & open source

Il miglior strumento per query & editor SQL che abbia mai usato. Offre tutto ciò che mi serve per gestire il mio database. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio è veloce, intuitivo e facile da usare. Beekeeper supporta tantissimi database e funziona alla grande su Windows, Mac e Linux.

La versione Linux di Beekeeper è completa al 100%, senza tagli e senza compromessi sulle funzionalità.

Cosa dicono gli utenti di Beekeeper Studio

★★★★★
"Beekeeper Studio ha sostituito completamente il mio vecchio workflow SQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
— Alex K., Database Developer
★★★★★
"Ho provato tante GUI per database, ma Beekeeper trova l'equilibrio perfetto tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo workflow SQL?

download Scarica gratis