sql >> Databáze >  >> RDS >> Mysql

Migrace Spring Batch sekvenčních tabulek MyISAM do InnoDB

Potvrdil jsem, že pouhá změna sekvenčních tabulek MyISAM na InnoDB způsobí vytvoření aktualizačních zámků na sekvenčních tabulkách po update...set...=last_insert_id() ale dříve, než byla transakce potvrzena. Tyto zámky se nevytvářejí při použití sekvencí MyISAM. Takže „snadný“ přístup by mohl mít negativní dopad na výkon.

Tady je to, na co jsem přišel. Nejsem si jistý, zda je to nejjednodušší způsob, ale funguje to.

  1. Za toto odpověď, zrušte existující sekvenční tabulky a předefinujte je jedním sloupcem uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. Vytvořte uloženou proceduru, která:a) vezme název sekvence jako argument, b) provede vložení do sekvence ac) vrátí LAST_INSERT_ID()
  3. Napište třídu java, která rozšiřuje MySQLMaxValueIncrementer a volá uloženou proceduru v getNextKey() metoda. Používám SimpleJdbcCall příklad, jak to udělat.
  4. Napište třídu java, která implementuje DataFieldMaxValueIncrementerFactory a vrátí instanci z kroku #3 z getIncrementer() metoda
  5. V dávkové konfiguraci aktualizujte org.springframework.batch.core.repository.support.JobRepositoryFactoryBean konfiguraci pro použití továrny na inkrementaci z kroku #4



  1. Jak přimět SQL Server, aby našel přihlašovací jméno odpovídající zadanému jménu?

  2. Vložit do více tabulek v jednom dotazu

  3. Použijte styl CSS na výstup PHP

  4. ORA-00907:Chybějící pravá závorka při vytváření cizího klíče Oracle 12c