sql >> Database >  >> RDS >> PostgreSQL

Vastgelopen zoekopdracht beëindigen (inactief in transactie)

Dit is een algemeen Postgres-antwoord en niet specifiek voor heroku

(Het eenvoudig-domme antwoord op deze vraag kan zijn ... herstart postgresql. Ervan uitgaande dat dat niet wenselijk of geen optie is ...)

Vind de PID door deze sql uit te voeren:

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

(De query moet mogelijk worden hersteld, afhankelijk van de versie van postgres - selecteer uiteindelijk * uit pg_stat_activity). U vindt de pid in de eerste (linker) kolom en de eerste (bovenste) rij is waarschijnlijk de zoekopdracht die u wilt beëindigen. Ik neem aan dat de pid hieronder 1234 is.

U kunt een query annuleren via SQL (d.w.z. zonder shell-toegang) zolang deze van u is of als u supergebruikerstoegang hebt:

select pg_cancel_backend(1234);

Dat is een "vriendelijk" verzoek om de 1234-query te annuleren, en met een beetje geluk zal het na een tijdje verdwijnen. Uiteindelijk is dit efficiënter:

select pg_terminate_backend(1234);

Als je shell-toegang en root- of postgres-machtigingen hebt, kun je dit ook vanuit de shell doen. Om te "annuleren" kan men doen:

kill -INT 1234

en om te "beëindigen", eenvoudig:

kill 1234

NIET:

kill -9 1234

... dat er vaak toe leidt dat de hele postgres-server in vlammen opgaat, dan kunt u postgres net zo goed opnieuw opstarten. Postgres is behoorlijk robuust, dus de gegevens worden niet beschadigd, maar ik zou het in ieder geval afraden om "kill -9" te gebruiken :-)

Een langdurige "inactiviteit in transactie" betekent vaak dat de transactie niet is beëindigd met een "commit" of een "rollback", wat inhoudt dat de toepassing fouten bevat of niet goed is ontworpen om met transactiedatabases te werken. Langdurige "inactief in transactie" moet worden vermeden, omdat het ook grote prestatieproblemen kan veroorzaken.



  1. Selecteer rijnummer in postgres

  2. Meerdere rijen verwijderen met ID's?

  3. Gebruik DB_ID() om de ID van een database in SQL Server te retourneren

  4. Een tabel maken in SQL Server