Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was könnte dazu führen, dass mysql db read veraltete Daten zurückgibt

Es hört sich so an, als würden Ihre Clients in ihrem eigenen Snapshot der Datenbank leben, was zutreffen würde, wenn sie eine offene Transaktion mit der Isolationsstufe REPEATABLE-READ haben. Mit anderen Worten, keine Daten, die festgeschrieben wurden, nachdem dieser Client seine Transaktion gestartet hat, sind für diesen Client sichtbar.

Eine Problemumgehung besteht darin, den Start einer neuen Transaktion zu erzwingen. Führen Sie einfach COMMIT in der Clientsitzung aus, in der veraltete Daten angezeigt werden. Dadurch werden alle offenen Transaktionen aufgelöst und die nächste Abfrage startet eine neue Transaktion.

Eine andere Möglichkeit zum Testen ist die Verwendung eines locking read Abfrage wie SELECT ... FOR UPDATE . Dadurch werden die zuletzt festgeschriebenen Daten unabhängig von der Transaktionsisolationsstufe des Clients gelesen. Das heißt, selbst wenn der Client seine Transaktion mit REPEATABLE-READ gestartet hat, verhält sich ein Locking Read so, als ob er seine Transaktion mit READ-COMMITTED gestartet hätte.