MySQL: DDL und Transactions

Das ist jetzt nicht wirklich eine große Entdeckung und ist eigentlich klar, aber auch wenn in der Beschreibung von MySQL nur steht, dass einige Statements nicht mehr mit einem Rollback zurück genommen werden können, wenn man ein DDL-Statement nach einem start transaction; ausführt, bedeutet es einfach, dass die Transaction danach einfach commited wird und alles danach nicht in einer Transaction läuft.

Wenn man sich als bei größeren Imports oder Datenverarbeitungen eine Tabelle zum Auslagern von Daten erzeugt, sollte man das immer zuerst und außerhalb der Transaction machen. Auch wenn man mit PDO arbeitet, muss man darauf achten.

bbcode-image


Sich extra Tabellen anlegen ist gut für Dinge, die länger laufen und besonders wenn sie länger laufen als die Timeout-Zeit von PHP oder des DB-Treibers. Den gerade MySQL locked alle Rows, die während einer Transaction geschrieben und auch gelesen werden. Wenn nun jemand in so eine Row schreiben möchte, die in einer langen Transaction auch nur gelesen wurde,kann es schnell zu Problemen kommen.
Erst einmal sollte man sowie so Stammdaten und Bewegungsdaten trennen. Damit minimiert sich das Problem schon mal etwas.

Am Ende kann man auch das Isolation-Level ändern, aber das sollte immer das letzte sein, was man versuchen sollte.
User annonyme 2016-08-29 19:26

write comment:
Three + = 5

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?