[Technik] hsadmin reloaded: JPA/Hibernate/PostgreSQL Probleme
Christof Donat
cd at actsoft.de
Thu Jul 19 16:16:56 CEST 2007
Hi,
> > Vermutung: Da werden Transaktionen geschachtelt und die innere braucht
> > was, was die äußere gelocked hat. Ich frage mich aber, wozu man bei
> > PostgreSQL anfangen sollte, Locks zu setzen?
>
> Das macht PostgreSQL automatisch, wenn Daten in einer Transaktion
> geschrieben werden.
Jein. PostgreSQL braucht nur für seltene Fälle wirklich Locks. Ein solcher
Fall wäre z.B. ein ALTER TABLE Statement, also wirklich Sachen, die man eher
selten macht. Das bedeutet, dass in der äußeren Transaktion eine Zeile in
einer Tabelle gesperrt sein müsste, für die dann die innere Transaktion eine
solche Aktion starten möchte. Dann wartet die innere Transaktion darauf, dass
die Äußere den Lock freigibt. Damit sowas passiert, muss die äußere
Transaktion entweder Sachen machen, die für die Transaktionssicherheit Locks
brauchen (das ist bei PostgreSQL sehr wenig), oder explizit Locks setzen.
Innerhalb der gleichen Transaktion haben die Locks natürlich keine
Auswirkungen, es müssen schon zwei da sein für einen Deadlock. Wenn du nur
eine gesehen hast, tippe ich auf eine geschachtelte Transaktion.
In jedem Fall setzt die JPA Implementation die Statements ab, die PostgreSQL
in den Deadlock treiben. Dazu muss man sich im Allgemeinen schon anstrengen,
also z.B. explizit Locks setzen.
> Bis jetzt habe ich doch quasi nur die JPA-Sachen implementiert (hunderte
> von Annotationen an den Entity-Klassen), die müsste man alle austauschen.
OK, dann ist das jetzt keine Alternative mehr :-(
> Ich sehe darin auch keinen Grund.
Ich dachte nur, dass man so herausfinden kann, ob tatsächlich JPA irgendwelche
komischen Sachen macht, oder ob es ein Muster im Ablauf ist, das du
programmiert hast und beidem jeder OR-Mapper in einen Deadlock laufen muss.
Christof
--
actSoft gmbh Software nach Maß
Zugspitzstr. 211 www.actsoft.de
86165 Augsburg cd at actsoft.de
Registergericht Augsburg
Geschäftsführer Augsburg HRB 21896
Christof Donat UStID: DE 248 815 055
More information about the Technik
mailing list