sql >> Databasteknik >  >> RDS >> Mysql

Vilolägesmappning av relationer/Öppna batchinsatser

ID-genereringsstrategin är avgörande för batchinfogning i Hibernate. I synnerhet kommer IDENTITY-generering vanligtvis inte fungerar (observera att AUTO vanligtvis mappar till IDENTITY också). Detta beror på att Hibernate under batchinsättning har en flagga som heter "requiresImmediateIdAccess" som säger om genererade ID:n krävs omedelbart eller inte; i så fall är batchbearbetning inaktiverad.

Du kan enkelt upptäcka detta i loggarna på DEBUG-nivå när det står "kör identitetsinfogning omedelbart" - detta betyder att den har hoppat över batchbearbetning eftersom det fick veta att genererade ID:n krävs direkt efter infogning.

Generationsstrategier som vanligtvis gör arbete är TABLE och SEQUENCE, eftersom Hibernate kan förgenerera ID:n och därigenom möjliggöra batchinsättning.

Ett snabbt sätt att upptäcka om din satsinsättning fungerar är att aktivera loggar på DEBUG-nivå eftersom BatchingBatcher uttryckligen kommer att tala om för dig batchstorleken som den kör ("Executing batch size:" + batchSize ).

Dessutom är följande egenskaper viktiga för att uppnå batchinsättning. Jag vågar inte säga att de krävs eftersom jag inte är tillräckligt med en Hibernate-expert för att göra det - det kanske bara är min speciella konfiguration - men enligt min erfarenhet behövdes de ändå:

hibernate.order_inserts = true
hibernate.order_updates = true

Dessa egenskaper är ganska dåligt dokumenterade, men jag tror att de gjorde det möjligt för SQL INSERT- och UPDATE-satserna att grupperas korrekt för batchkörning; Jag tror att det här kan vara de flerradiga skären du är ute efter. Skjut mig inte om jag har fel i detta, minns jag från minnet.

Jag ska också gå vidare och anta att du anger följande egenskap; om inte, bör detta fungera som en påminnelse:

hibernate.jdbc.batch_size = xx

Där xx är din önskade batchstorlek, naturligtvis.



  1. PHP kan inte lösa mysql containernamn under vissa omständigheter

  2. n:te percentilberäkningar i postgresql

  3. Hur man proaktivt samlar in SQL Server Index Fragmenteringsinformation

  4. FEL 1148:Det använda kommandot är inte tillåtet med denna MySQL-version