2012-04-20 3 views
6

Ho un file di un file .sql lungo circa 22.000 righe. È generato da qualcos'altro, ma fondamentalmente contiene solo una dichiarazione di aggiornamento per riga.Il file SQL lungo esegue la memoria esaurita di SQL Server (22.000 righe)

Viene visualizzato questo errore quando eseguo il file in SQL Server Management Studio.

C'è memoria di sistema insufficiente nel pool di risorse 'interna' a eseguire questa query

penso ho solo bisogno di dividere file questa query, ma non sono sicuro il modo migliore per andare su di esso. Potrei tagliare il file in blocchi di 2000 righe o qualcosa che suppongo.

Questo sembra un problema semplice, e lo farò abbastanza spesso mi piacerebbe trovare una buona soluzione. Qualche idea?

+2

22000 aggiornamenti suona come qualcosa non viene fatto bene. Non c'è modo di rendere questa operazione più basata su set? –

+0

Beh, è ​​stato creato da un foglio di calcolo Excel che crea uno strumento molto specializzato.Il foglio di calcolo ha linee X che devono aggiornare le righe corrispondenti nel database, ma questo è uno strumento molto vecchio e esporta solo in Excel. – BurntToast

+4

La tua vita fa schifo. :) Excel è la rovina di qualsiasi DBA. –

risposta

5

Si potrebbe voler controllare l'esecuzione del proprio script tramite SQLCMD invece di passare attraverso l'interfaccia della GUI SSMS.

3

Probabilmente stai raggiungendo un limite sulle dimensioni del batch, quindi SQL Server sta riscontrando problemi durante l'analisi del batch. Se riesci a eseguire circa ~ 5000 blocchi di linee (evidenziare, Esegui), ciò conferma la mia teoria.

Una volta che si conosce la dimensione del lotto corretto verso il basso, è possibile:

  1. le istruzioni INSERT GO in mezzo, per forzare un nuovo lotto
  2. Split a più file

Un po 'di shell lo scripting dovrebbe essere sufficiente per entrambi. Il UnxUtils di split, head e tail dovrebbe rivelarsi utile.

2

Ho avuto un problema simile e in esecuzione sotto il comando nel prompt dei comandi da blog mi ha salvato.

sqlcmd -S YOURSQLSERVER\INSTANCENAME -i "C:\Your Script.sql" 
0

È possibile allocare più memoria al vostro server, con questa soluzione:

  1. In Esplora oggetti, fare clic destro un server e selezionare Proprietà.
  2. Fare clic sul nodo Memoria.
  3. In Opzioni memoria server, immettere l'importo desiderato per Memoria minima del server e Memoria massima del server.

l'impostazione predefinita di massimo è 2147483647, l'ho modificata in 9147483647 e il mio problema è stato risolto.

Problemi correlati