sql >> Databasteknik >  >> RDS >> PostgreSQL

Avsluta hängd fråga (inaktiv i transaktion)

Detta är ett allmänt Postgres-svar och inte specifikt för heroku

(Det enkla-dumma svaret på denna fråga kan vara ... starta om postgresql. Förutsatt att det inte är önskvärt eller inte ett alternativ ...)

Hitta PID genom att köra denna sql:

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

(Frågan kan behöva lagas beroende på versionen av postgres - så småningom, välj bara * från pg_stat_activity). Du hittar pid i den första (vänstra) kolumnen, och den första (översta) raden är sannolikt den fråga du vill avsluta. Jag antar att pid är 1234 nedan.

Du kan avbryta en fråga via SQL (dvs utan skal-åtkomst) så länge den är din eller du har superanvändaråtkomst:

select pg_cancel_backend(1234);

Det är en "vänlig" begäran att avbryta 1234-frågan, och med lite tur försvinner den efter ett tag. Så småningom blir detta mer effektivt:

select pg_terminate_backend(1234);

Om du har skalåtkomst och root- eller postgres-behörigheter kan du också göra det från skalet. För att "avbryta" kan man göra:

kill -INT 1234

och för att "avsluta", helt enkelt:

kill 1234

GÖR INTE:

kill -9 1234

... som ofta resulterar i att hela postgres-servern går ner i lågor, då kan du lika gärna starta om postgres. Postgres är ganska robust, så data kommer inte att skadas, men jag skulle rekommendera att inte använda "kill -9" i alla fall :-)

En långvarig "tomgång i transaktion" innebär ofta att transaktionen inte avslutades med en "commit" eller en "återställning", vilket betyder att applikationen är buggig eller inte korrekt utformad för att fungera med transaktionsdatabaser. Långvarig "tomgång i transaktion" bör undvikas, eftersom det också kan orsaka stora prestandaproblem.



  1. Sätt i från CTE

  2. Installera Oracle 32-bitars klient på Windows Server Kör redan 64-bitars Oracle Database Server

  3. Hur man formaterar ett tal som valuta i Oracle

  4. MySQL väljer 10 slumpmässiga rader från 600 000 rader snabbt