Avrò un database SQL Server 2012 e una tabella con 3 milioni di righe e forse 50 colonne. Quale sarà il modo più veloce per un processo .net in background non presidiato (forse emette un comando SQL o Powershell) per esportarlo in un file di testo, una riga per ogni riga di dati? Il processo .net dovrebbe sapere quando l'esportazione è terminata o se si sono verificati errori. Il tipo di dati sarà tutto int
o nvarchar
.
Suppongo che un codice C # puro che utilizza ado.net per eseguire un select *
comando e scorrere in loop sul datareader e scrivere su un file per ogni record sia lento e non c'è modo di parallelizzare questo.
Idealmente, l'esportazione avverrà in una cartella di rete condivisa remota e non in una cartella locale sul computer SQL Server. SQL Server sarà un cluster HA. SSIS è più adatto a questo, non è richiesta la trasformazione dei dati?
Il processo .Net verrebbe eseguito sulla macchina A, SQL Server sulla macchina B e la destinazione finale del file è una condivisione di rete. Un'opzione è che il server SQL scrive il file direttamente nella condivisione di rete. L'altra opzione è che SQL Server scrive sulla macchina A e quindi quando il file viene scritto il processo .net lo copia nella condivisione di rete. Non ho uno SLA formale ma mi aspetto 30 minuti - 1 ora per la scrittura del file.
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- da dove verrà eseguita l'app .NET? Nel peggiore dei casi, ciò potrebbe significare che i dati devono passare attraverso 2 hop di rete, che sarà probabilmente il maggiore collo di bottiglia. Inoltre, il numero di righe è in qualche modo irrilevante: qual è la dimensione totale approssimativa dei dati? Hai uno SLA delle prestazioni che devi rispettare per questo processo?