Hallo zusammen
Habe eine relativ kritische Operation (sie kann Fehler verursachen), welche einige Daten in meine Datenbank schreibt. Dies dauert auch so seine Zeit (~5 Sekunden). Falls etwas schief läuft, benötige ich einen Rollback von allen Queries.
Ich nutze also InnoDB über Doctrine / Symfony und benutze "beginTransaction" was ein "START TRANSACTION" Query auslöst. Nun ist die Datenbank blockiert für alle weiteren Anfragen während dieser Transaction wie ich leider feststellen musste.
Ich habe bereits nach dem "START TRANSACTION" ein manuelles "UNLOCK TABLES" hinzugefügt, was aber keine Veränderung gebracht hat.
Mein Ziel: Ich will einen Rollback von allen Queries in der Transaction erlauben, muss aber keinen Lock haben auf die Datenbank. WRITE LOCK würde auch reichen, wenns denn mit lock sein muss. Aber aktuell kann ich während der Transaction nicht mal lesen (SELECT).
Nun die Frage: Mache ich was mit der Transaction falsch? Gibt es andere Möglichkeiten um das Feature eines Rollbacks zu bekommen? Kann ich den LOCK irgendwie beeinflussen? (READ COMMIT / UNCOMMITED, völlig wurst, es muss einfach weitergehen für die Applikation/Frontend während diese Operation ausgeführt wird). Hab ich evtl. mit Doctrine ein Problem, weil da halt dutzende von Queries (Hauptsächlich Selects) in der Transaction noch gemacht werden, weil Daten aus Entities nachgeladen werden und somit praktisch alles gelockt wird?
Meine letzte Möglichkeit die ich sehe, wäre manuell den Rollback zu machen, was aber zu Problemen führen kann, wenn der Rollback dann auch noch Errors bringen könnte.
Jemand eine Idee? Aktuell kann ich während der Operation meine Seite nicht mehr aufrufen.
Ubuntu, Mysql version = 5.5.49-0ubuntu0.14.04.1, InnoDB, PHP 5.6.23, Symfony 2.8, Doctrine 2.4.
Habe eine relativ kritische Operation (sie kann Fehler verursachen), welche einige Daten in meine Datenbank schreibt. Dies dauert auch so seine Zeit (~5 Sekunden). Falls etwas schief läuft, benötige ich einen Rollback von allen Queries.
Ich nutze also InnoDB über Doctrine / Symfony und benutze "beginTransaction" was ein "START TRANSACTION" Query auslöst. Nun ist die Datenbank blockiert für alle weiteren Anfragen während dieser Transaction wie ich leider feststellen musste.
Ich habe bereits nach dem "START TRANSACTION" ein manuelles "UNLOCK TABLES" hinzugefügt, was aber keine Veränderung gebracht hat.
Mein Ziel: Ich will einen Rollback von allen Queries in der Transaction erlauben, muss aber keinen Lock haben auf die Datenbank. WRITE LOCK würde auch reichen, wenns denn mit lock sein muss. Aber aktuell kann ich während der Transaction nicht mal lesen (SELECT).
Nun die Frage: Mache ich was mit der Transaction falsch? Gibt es andere Möglichkeiten um das Feature eines Rollbacks zu bekommen? Kann ich den LOCK irgendwie beeinflussen? (READ COMMIT / UNCOMMITED, völlig wurst, es muss einfach weitergehen für die Applikation/Frontend während diese Operation ausgeführt wird). Hab ich evtl. mit Doctrine ein Problem, weil da halt dutzende von Queries (Hauptsächlich Selects) in der Transaction noch gemacht werden, weil Daten aus Entities nachgeladen werden und somit praktisch alles gelockt wird?
Meine letzte Möglichkeit die ich sehe, wäre manuell den Rollback zu machen, was aber zu Problemen führen kann, wenn der Rollback dann auch noch Errors bringen könnte.
Jemand eine Idee? Aktuell kann ich während der Operation meine Seite nicht mehr aufrufen.
Ubuntu, Mysql version = 5.5.49-0ubuntu0.14.04.1, InnoDB, PHP 5.6.23, Symfony 2.8, Doctrine 2.4.

Kommentar