2010-01-03 7 views
17

sto ottenendo questo errore:V'è memoria di sistema insufficiente nel pool di risorse 'default' per eseguire la query

C'è memoria di sistema insufficiente nel pool di risorse 'default' per eseguire la query.

Ho appena eseguito 100.000 istruzioni di inserimento semplici come mostrato di seguito. Ho ricevuto l'errore approssimativo sull'85.000esimo inserto.

Si tratta di una demo per una classe sto prendendo ...

use sampleautogrow 

INSERT INTO SampleData VALUES ('fazgypvlhl2svnh1t5di','8l8hzn95y5v20nlmoyzpq17v68chfjh9tbj496t4',1) 
INSERT INTO SampleData VALUES ('31t7phmjs7rcwi7d3ctg','852wm0l8zvd7k5vuemo16e67ydk9cq6rzp0f0sbs',2) 
INSERT INTO SampleData VALUES ('w3dtv4wsm3ho9l3073o1','udn28w25dogxb9ttwyqeieuz6almxg53a1ki72dq',1) 
INSERT INTO SampleData VALUES ('23u5uod07zilskyuhd7d','dopw0c76z7h1mu4p1hrfe8d7ei1z2rpwsffvk3pi',3) 

Grazie in anticipo, Jim M

Aggiornamento: Appena notato qualcosa di molto interessante. Ho creato un altro database, ho dimenticato di creare la tabella SampleData. Ho eseguito la query per aggiungere 100.000 righe e ha ottenuto l'errore di memoria insufficiente prima che si lamentasse anche che la tabella non esisteva. Quindi, immagino che stia finendo la memoria solo cercando di "leggere" le mie 100.000 righe?

risposta

32

Hai 100.000 istruzioni di inserimento in una singola richiesta di lotto? Il tuo server ha bisogno di più RAM solo per analizzare la richiesta. Acquista più RAM, esegui l'aggiornamento a x64 o riduci le dimensioni dei singoli batch inviati al server. Vale a dire. cospargere uno GO ogni ora e là nel file .sql.

+0

Se 1000 inserti causano alcun problema, perché farlo 100.000 causare un problema? Ha qualcosa a che fare con le transazioni? Perché aggiungere istruzioni "GO" è d'aiuto? –

+0

Vedere il mio aggiornamento nella domanda originale sopra. –

+9

quando si inviano istruzioni INSERT 100k in un batch, il server inizialmente vedrà circa 1 mil. personaggi di 'cose'. Non sa cosa c'è dentro, potrebbe essere tutti i punti e gli spazi. Prima deve essere analizzato e T-SQL viene analizzato in batch, non in righe (a differenza, ad esempio, di base). Questo parsing consuma memoria e questo è l'errore che vedi. Quando hai provato con una tabella inesistente, il server non ha nemmeno raggiunto il punto in cui verificherebbe se la tabella esiste, poiché ciò si verifica durante la compilazione non durante il tempo di analisi. Deve prima analizzare l'intero batch e questo non può fare. –

0

È possibile provare l'applicazione Strumenti di connessione SQLServer. Ha una funzione chiamata Massive Sql Runner che esegue ogni comando uno per uno. Con questa funzione verrà utilizzata pochissima memoria per eseguire i comandi di script e non si avrà più il problema.

SQL Server Connection Tools

Problemi correlati