Sto provando ad accelerare un carico della tabella dei fatti come parte di un progetto generale di prestazioni. Il tavolo è di circa 120 milioni di righe circa 100k vengono aggiunte ogni sera. Il tavolo è piuttosto pesantemente indicizzato.Quali sono le conseguenze dell'utilizzo dell'opzione Blocco tabella con una destinazione di caricamento veloce?
Attualmente sto utilizzando una destinazione OLE DB di caricamento rapido SSIS e il caricamento delle 100.000 righe richiede circa 15 minuti. Mi è sembrato molto importante inserire 100k righe, quindi ho modificato il pacchetto in modo da scaricare i risultati in una tabella di staging, quindi ho inserito un inserto T-SQL nella tabella dei fatti da quella tabella di staging. L'inserto ora viene eseguito in meno di 1 minuto.
Ho trovato piuttosto strano che un semplice inserto T-SQL vecchio sia più veloce del caricamento rapido SSIS, quindi ho iniziato a controllare quali caselle erano state selezionate sulla destinazione OLEDB. Si scopre che Table Lock NON è stato controllato. Quando ho selezionato questa opzione, il carico di SSIS è ora inferiore a 1 minuto. Le mie domande sono:
- Quali sono le implicazioni dell'attivazione del blocco tabella?
- L'istruzione di inserimento T-SQL emette un blocco di tabella per impostazione predefinita ed è per questo che inizialmente era più veloce?
Ah, quindi i blocchi a più livelli di riga spiegherebbero la lentezza. Figo, grazie. – AS2012
@ AS2012: non solo questo, ma anche più blocchi occupano più memoria. Gli articoli a cui mi sono collegato sono molto pertinenti e dettagliati su questo argomento. –