2010-01-03 15 views
17

estoy recibiendo este error:No hay suficiente memoria del sistema en el fondo de recursos 'por defecto' para ejecutar esta consulta

No hay suficiente memoria del sistema en el fondo de recursos 'por defecto' para ejecutar esta consulta.

Estoy ejecutando 100.000 instrucciones simples de inserción como se muestra a continuación. Recibí el error aproximadamente en el inserto 85,000.

Esta es una demostración para una clase que estoy tomando ...

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) 

Gracias por adelantado, Jim M

Actualización: acabo de notar algo muy interesante. Creé otra base de datos, olvidé crear la tabla SampleData. Ejecuté la consulta para agregar las 100.000 filas y obtuve el error de memoria insuficiente antes de que incluso se quejara de que la tabla no existía. Por lo tanto, supongo que se está quedando sin memoria solo tratando de "leer" mis 100,000 líneas.

Respuesta

32

Tiene 100.000 instrucciones de inserción en una única solicitud por lotes? Su servidor necesita más RAM solo para analizar la solicitud. Compre más RAM, actualice a x64 o reduzca el tamaño de los lotes individuales enviados al servidor. Es decir. espolvorear un GO de vez en cuando en el archivo .sql.

+0

Si 1000 inserciones no causan ningún problema, ¿por qué 100.000 causa un problema? ¿Tiene algo que ver con las transacciones? ¿Por qué la adición de declaraciones "IR" ayuda? –

+0

Ver mi actualización en la pregunta original anterior. –

+9

cuando envía 100k instrucciones INSERT en un lote, el servidor verá inicialmente alrededor de 1 mil. personajes de 'cosas'. No sabe qué hay dentro, podrían ser todos los puntos y espacios. Tiene que analizarse primero, y T-SQL se analiza en lotes, no en líneas (a diferencia, digamos, Básico es). Ese análisis consume memoria y este es el error que ves. Cuando ha intentado con una tabla inexistente, el servidor ni siquiera llegó al punto en el que verificaría si la tabla existe, ya que eso ocurre durante el tiempo de compilación no durante el tiempo de análisis. Tiene que analizar todo el lote primero, y eso no puede hacer. –

0

Puede probar la aplicación SQLServer Connection Tools. Tiene una característica llamada Massive Sql Runner que ejecuta cada comando uno por uno. Con esta función se usará muy poca memoria para ejecutar comandos de script y ya no tendrá el problema.

SQL Server Connection Tools

Cuestiones relacionadas