sql >> Database teknologi >  >> RDS >> PostgreSQL

Afslut hængt forespørgsel (inaktiv i transaktion)

Dette er et generelt Postgres-svar og ikke specifikt for heroku

(Det simple-dumme svar på dette spørgsmål kan være ... bare genstart postgresql. Forudsat at det ikke er ønskeligt eller ikke en mulighed ...)

Find PID'en ved at køre denne sql:

SELECT pid , query, * from pg_stat_activity
  WHERE state != 'idle' ORDER BY xact_start;

(Forespørgslen skal muligvis repareres afhængigt af versionen af ​​postgres - til sidst skal du bare vælge * fra pg_stat_activity). Du finder pid'en i den første (venstre) kolonne, og den første (øverste) række er sandsynligvis den forespørgsel, du gerne vil afslutte. Jeg antager, at pid er 1234 nedenfor.

Du kan annullere en forespørgsel via SQL (dvs. uden shell-adgang), så længe den er din, eller du har superbrugeradgang:

select pg_cancel_backend(1234);

Det er en "venlig" anmodning om at annullere 1234-forespørgslen, og med lidt held vil den forsvinde efter et stykke tid. Til sidst er dette mere effektivt:

select pg_terminate_backend(1234);

Hvis du har shell-adgang og root- eller postgres-tilladelser, kan du også gøre det fra shellen. For at "annullere" kan man gøre:

kill -INT 1234

og for at "terminere", blot:

kill 1234

MÅ IKKE:

kill -9 1234

... det vil ofte resultere i, at hele postgres-serveren går i flammer, så kan du lige så godt genstarte postgres. Postgres er ret robust, så dataene bliver ikke beskadiget, men jeg vil under alle omstændigheder anbefale at man ikke bruger "kill -9" :-)

En langvarig "tomgang i transaktion" betyder ofte, at transaktionen ikke blev afsluttet med en "commit" eller en "rollback", hvilket betyder, at applikationen er fejlbehæftet eller ikke korrekt designet til at fungere med transaktionsdatabaser. Langvarig "tomgang i transaktion" bør undgås, da det også kan forårsage store ydeevneproblemer.



  1. MySQL Fire Trigger til både Insert og Update

  2. SQL Server-destination vs OLE DB-destination

  3. Hvilke metoder kan bruges til at administrere forskellige versioner af allerede eksisterende databaser?

  4. PHP PDO forberedt erklæring -- MySQL LIKE forespørgsel