2013-02-19 20 views
5

In SQL Server 2008, sto provando a BULK INSERIRE un CSV di dimensioni pari a 1 GB. Come sto facendo, sta creando un enorme file tempdb.mdf. Al momento, è 35GB per questo file CSV da 1 GB.È sicuro eliminare manualmente il file tempdb.mdf?

ho provato le varie soluzioni che Microsoft provides, e non sembrano funzionare.

Sto pensando il modo più semplice per "compattare" il file tempdb.mdf su un sistema non di produzione è quello di eliminare solo mentre il servizio SQL è giù.

Questo causerà problemi? Se sì, quali tipi di problemi ci si possono aspettare?

modifiche

1) ecco una fila dal CSV (ha circa 4M righe):

PS D:\> gc .\map.items.csv | select -last 1 
40747646;jdbc:patent/8046822;8683;other/patent;12/31/69 16:00:00.00 PST;E6 E6 80 6D FD 6D 0B 5F 44 66 4E 1C 35 DE 46 BB 19 36 3C 31 37 67 4D 1D DF 58 A5 99 A8 A0 3B 52;crawled;full_patent_db2;Electronic apparatus, function selection method of electronic apparatus and management system of electronic apparatus;Sony Corporation;Tokyo;03;G06F21/00 

2) Ecco il DB descrivere informazioni Classifica (niente di esotico, e nessun trigger): https://gist.github.com/mlissner/4cd13db5a1bbae91dd50

3) Ho il database è impostato sul modello di recupero semplice.

+1

Mostra la tua struttura della tabella (inclusi gli indici), il formato generale del file CSV (un paio di righe va bene), e il numero di righe nel file. Fateci sapere anche se la tabella alla quale state tentando di inserire in massa ha trigger, se avete caratteristiche esotiche come CDC e tracciamento delle modifiche, replica, ecc. –

+1

Cancellare sicuramente mentre offline non farà molto quando viene ripristinato all'avvio? – chrisb

+0

@chrisb hai provato questo? Consiglieresti di provarlo su un'istanza di produzione? Ti piacerebbe volontariamente la tua istanza di produzione per questo test? –

risposta

1

Alla fine, sì, è stato sicuro per me cancellare questo file. SHRINKFILE non funzionava in modo coerente (non so perché, probabilmente qualcosa di base), e l'eliminazione del file funzionava perfettamente.

Una specie di mossa voodoo, sì, ma il file è stato ricreato automaticamente e si è verificato alcun problema.

4

No, non è possibile eliminare il file mdf tempdb.

Se è necessario compattare nuovamente il file, riavviare SQL Server, e quindi eseguire DBCC SHRINKFILE(). Questa è un'operazione supportata, diversamente da "Elimina un file mdf mentre SQL Server non sembra" voodoo.

Potresti essere in grado di ottimizzare l'operazione di massa in modo che tempdb non venga colpito così pesantemente nella prima parte, ma è impossibile dire con i dettagli dato quale sia il vero problema.

+0

Grazie. Vedi sopra per le modifiche. – mlissner

0

È possibile utilizzare BCP? Questo è un metodo consigliato per caricare file flat di grandi dimensioni su SQL Server.

In alternativa si può passare dal modello di recupero completo del modello di recupero? Ciò ridurrà la quantità di registrazione delle transazioni eseguita dal server.

+0

MSDN in realtà [dice il contrario] (http://msdn.microsoft.com/en-us/library/ms190421 (v = sql.105).aspx): "Laddove possibile, utilizzare un'istruzione Transact-SQL per importare i dati di massa in SQL Server perché Transact-SQL è più veloce di bcp." – Pondlife

+0

Abbastanza giusto. Ho sempre capito che BCP era l'approccio raccomandato. Argomento: esiste un articolo MSDN [collegamento] (http://msdn.microsoft.com/en-us/library/ms190422 (v = sql.105) .aspx) http://msdn.microsoft.com/en -us/library/ms190422 (v = sql.105) .aspx che sembra rilevante. –