sql >> Databasteknik >  >> RDS >> Mysql

Migrera Spring Batch MyISAM-sekvenstabeller till InnoDB

Jag bekräftade att bara ändring av MyISAM-sekvenstabellerna till InnoDB gör att uppdateringslås skapas på sekvenstabellerna efter update...set...=last_insert_id() uttalande men innan transaktionen har genomförts. Dessa lås skapas inte när du använder MyISAM-sekvenserna. Så det "enkla" tillvägagångssättet kan ha en negativ inverkan på prestandan.

Här är vad jag kom på. Inte säker på att detta är det enklaste sättet, men det fungerar.

  1. Per detta svara, släpp de befintliga sekvenstabellerna och omdefiniera dem med en enda kolumn uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. Skapa en lagrad procedur som:a) tar sekvensnamnet som ett argument, b) gör infogningen i sekvensen och c) returnerar LAST_INSERT_ID()
  3. Skriv en java-klass som utökar MySQLMaxValueIncrementer och anropar den lagrade proceduren i getNextKey() metod. Jag använder ett SimpleJdbcCall instans för att göra detta.
  4. Skriv en java-klass som implementerar DataFieldMaxValueIncrementerFactory och returnerar en instans från steg #3 från getIncrementer() metod
  5. I batchkonfigurationen uppdaterar du org.springframework.batch.core.repository.support.JobRepositoryFactoryBean konfiguration för att använda inkrementerarens fabrik från steg #4



  1. Hur lagrar man väldigt gamla datum i databasen?

  2. psql returnerar "anonym" i resultatmatrisen

  3. Kan en kontrollbegränsning relatera till en annan tabell? Orakel

  4. Kan vi köra en mysql-fråga via kommandotolken i Windows?