sql >> Database >  >> RDS >> PostgreSQL

Wat kan ertoe leiden dat de transactie inactief is voor BEGIN-instructies?

De transacties blokkeren helemaal niet. De database wacht op de toepassing om de volgende verklaring te verzenden.

De vergrendeling op de transactie-ID is slechts een techniek om transacties elkaar te blokkeren, zelfs als ze niet strijden om een ​​tafelvergrendeling (bijvoorbeeld als ze wachten op een rijvergrendeling):elke transactie heeft een exclusieve vergrendeling op zichzelf transactie-ID, en als het moet wachten tot een gelijktijdige transactie is voltooid, kan het gewoon een blokkering van het ID van die transactie aanvragen (en worden geblokkeerd).

Als alle transacties er zo uitzien, dan moet het slot ergens in je applicatie zitten; de database is niet betrokken.

Wanneer u zoekt naar processen die in de database zijn geblokkeerd, zoek dan naar rijen in pg_locks waar granted is onwaar.



  1. Leg de functionaliteit uit van select max(...) ... group by in sql

  2. Selecteer een groep rijen die overeenkomen met alle items in een lijst

  3. Mysql meerdere rij insert-select statement met last_insert_id()

  4. Gebruik van groter dan of gelijk aan(>=) en kleiner dan of gelijk aan(<=) in SQL SELECT-instructies en PDO