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

Lesen beim Aktualisieren der Tabelle verhindern

Angenommen, Sie verwenden eine Transaktions-Engine (normalerweise Innodb), löschen und füllen Sie die Tabelle in derselben Transaktion neu.

Stellen Sie sicher, dass Ihre Leser READ_COMMITTED oder eine höhere Transaktionsisolationsstufe verwenden (der Standardwert ist REPEATABLE READ, was höher ist).

Auf diese Weise können Leser während des Updates weiterhin die alten Inhalte der Tabelle lesen.

Es gibt ein paar Dinge, auf die Sie achten sollten:

  • Wenn die Tabelle so groß ist, dass sie den Rollback-Bereich erschöpft, ist dies möglich, wenn Sie (sagen wir) eine 1-Millionen-Zeilentabelle vollständig aktualisieren. Natürlich ist dies einstellbar, aber es gibt Grenzen
  • Wenn die Transaktion teilweise fehlschlägt und zurückgesetzt wird - das Zurücksetzen großer Transaktionen ist in InnoDB SEHR ineffizient (es ist für Commits optimiert, nicht für Rollbacks)
  • Achten Sie auf Deadlocks und Sperrwartezeitüberschreitungen, die wahrscheinlicher sind, wenn Sie große Transaktionen verwenden.