Bulk insert in Business Central con AL
Salve lettore, in questo articolo voglio mostrarti come funziona la bulk insert in Business Central. Innanzitutto che cos’è la bulk insert? Letteralmente sono gli inserimenti di massa, in pratica quando hai un’enorme mole di record da inserire, essi possono essere inseriti in massa sulla tabella.
Di default Business Central memorizza automaticamente nel buffer gli inserimenti per inviarli contemporaneamente a Microsoft SQL Server. Utilizzando questa procedura il numero di chiamate al server viene ridotto, migliorando così le prestazioni.
Tuttavia, per poter utilizzare questo processo occorre attenersi a dei vincoli che sono:
- va inserita un’istruzione COMMIT alla fine della transazione dopo l’istruzione INSERT.
- Puoi chiamare anche le istruzione MODIFY o DELETE.
- Puoi utilizzare qualsiasi istruzione FIND.
Inoltre devi sincerarti che il tuo codice non deve contenere:
- un’istruzione del tipo IF Rec.INSERT THEN…
- Il record non abbia campi Blob.
- Il record non abbia al suo interno campi autoincrementali.
Nell’esempio seguente ti mostro le differenze di tempistiche che ci sono tra l’utilizzo dell’istruzione INSERT senza COMMIT; dell’istruzione IF Rec.Insert e con la bulk insert. Sarai stupito dalle differenze di tempi. Ho costruito una tabella con 3 campi, un campo intero e due campi testo da 1000 chars.
Inoltre ho sviluppato una pagina di tipo lista, con una action che inserisce 10000 record di quella tabella.
Ora proviamo ad eseguire l’istruzione solo con la semplice insert come nell’immagine sopra.
La procedura ha impiegato 4 secondi e 96 millesimi. Non male! Vediamo ora, se introduciamo l’istruzione IF NOT BulkInsert.INSERT come nell’immagine seguente.
Vediamo ora quanto impiega la procedura.
Ben 20 secondi e 74 millesimi! Prestazioni molto peggiori rispetto al precedente frammento di codice. Vediamo ora se utilizziamo la bulk insert, come nell’immagine sotto.
Eseguiamo nuovamente la pagina e verifichiamone le prestazioni di inserimento.
Ben 3 secondi e 451 millisecondi! Prestazione eccezionale!
E’ possibile disabilitare la BulkInsert di Business Central, attraverso la modifica del file CustomSettings.config, impostando a FALSE la proprietà BufferedInsertEnabled. Disattivare questa proprietà è utile se si vuole tenere sotto controllo gli errori in inserimento.
E tu hai già avuto modo di provare le potenzialità della bulk insert in AL? A questo link ti lascio la documentazione ufficiale Microsoft.