sql >> Database >  >> RDS >> Mysql

MyISAM-reekstabellen voor lente-batch migreren naar InnoDB

Ik heb bevestigd dat alleen het wijzigen van de MyISAM-reekstabellen naar InnoDB ervoor zorgt dat er updatevergrendelingen worden gemaakt op de reekstabellen na de update...set...=last_insert_id() verklaring, maar voordat de transactie is gepleegd. Deze vergrendelingen worden niet gemaakt bij gebruik van de MyISAM-reeksen. De "gemakkelijke" benadering kan dus een negatieve invloed hebben op de prestaties.

Hier is wat ik bedacht. Ik weet niet zeker of dit de gemakkelijkste manier is, maar het werkt.

  1. Per dit antwoord, verwijder de bestaande sequentietabellen en herdefinieer ze met een enkele kolom uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. Maak een opgeslagen procedure die:a) de reeksnaam als argument neemt, b) de invoeging in de reeks doet, en c) LAST_INSERT_ID() retourneert
  3. Schrijf een Java-klasse die MySQLMaxValueIncrementer uitbreidt en roept de opgeslagen procedure aan in de getNextKey() methode. Ik gebruik een SimpleJdbcCall instantie om dit te doen.
  4. Schrijf een Java-klasse die DataFieldMaxValueIncrementerFactory implementeert en retourneert een instantie uit stap #3 van de getIncrementer() methode
  5. Update in de batchconfiguratie de org.springframework.batch.core.repository.support.JobRepositoryFactoryBean configuratie om de incrementerfabriek vanaf stap #4 te gebruiken



  1. Een waarde die is opgehaald uit een database doorgeven aan een andere pagina met behulp van php en mysql

  2. TANH() Functie in Oracle

  3. Hoe te verwijzen naar een samengestelde primaire sleutel in SQL

  4. Hoe een tabel te laten vallen op basis van IF-voorwaarde in postgres?