Procedimiento Almacenado con OPENQUERY y Error de Memoria Insuficiente

19/06/2007 - 17:28 por Mario G. Contreras Arriaga | Informe spam
Saludos,

Estoy en proceso de migración de un servidor con SQL Server 2000 a otro con
SQL Server 2005. Estamos usando dos equipos prácticamente similares en
cuestión de hardware, es decir, no es una actualización encima de la versión
previa sino que vamos moviendo las bases de datos hasta que quede desplazado
el servidor anterior.

En una de las bases de datos tenemos dos procedimiendos almacenados que me
están generando problemas. El primero (digamos que se llama prGeneral) manda
a llamar al segundo (el cual llamaremos prCopiar) más de una vez
(aproximadamente 70 veces). En prCopiar se ejecuta un OPENQUERY() sobre un
servidor vinculado para esa información insertarla en una tabla de SQL
Server.

Más o menos así están:

prGeneral

EXEC prCopia 'val1'
EXEC prCopia 'val2'
...
EXEC prCopia 'val1'

prCopia

...
SELECT * INTO Tabla FROM OPENQUERY(ServidorVinculado, 'SELECT * FROM Tabla')
...

Cabe remarcar que los nombres de las tablas son diferentes en cada llamada y
es el parámetro que se le pasa a prCopia desde prGeneral por lo que el
SELECT INTO y el OPENQUERY() se ejecutan dinámicamente.

Bien, el asunto es que en el equipo anterior (SQL Server 2000) funciona bien
y sin problemas. El proceso toma de 15 a 20 minutos y no hay queja de este
lado. Sin embargo cuando se recreó el esenario en el servidor con SQL Server
2005 ya no todo fue como se esperaba. Se ejecuta el procedimiento general
(prGeneral) y este manda a llamar las n veces al procedimiento prCopia. Se
ven los mensajes y cuando va al 95% de la ejecución del procedimiento se
comienza a ver que el servidor no permite más conexiones o se ralentiza en
extremo. Si revisamos el Visor de Sucesos encontramos que comienzan a
aparecer muchos mensajes de error número 701, nivel 17 con descripción
"There is insufficient system memory to run this query". Tenemos que
reiniciar los servicios para restablecer la operación normal.

El error completo es el siguiente:

Event Type: Error
Event Source: MSSQLSERVER
Event Category: (2)
Event ID: 701
Date: 19/06/2007
Time: 10:22:53 AM
User: Usuario
Computer: Servidor
Description:
There is insufficient system memory to run this query.

A todo esto, el servidor vinculado apunta a un origen de datos de ODBC de
Visual FoxPro que toma tablas de Clipper (xBASE) desde otro equipo. El
procedimiento se ejecuta normalmente desde un job tres veces al día.

¿Alguna recomendación para evitar el error de memoria insuficiente? Si no se
puede evitar ¿cómo me recupero de ese error sin reiniciar el servicio de tal
forma que se pueda automatizar la recuperación?

¿O existe algún otro mecanismo para importar vía T-SQL archivos DBF a tablas
de SQL Server? Remarco que en un equipo similar pero con SQL Server 2000
esto funcionaba sin problema alguno.

Muchas gracias de antemano por sus comentarios.



Mario G. Contreras Arriaga (Nazul)
http://www.nazul.net/

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera (MVP)
19/06/2007 - 20:11 | Informe spam
El SQL Server 2005 ya tiene aplicado el último service pack disponible?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Mario G. Contreras Arriaga" wrote:

Saludos,

Estoy en proceso de migracin de un servidor con SQL Server 2000 a otro con
SQL Server 2005. Estamos usando dos equipos prcticamente similares en
cuestin de hardware, es decir, no es una actualizacin encima de la versin
previa sino que vamos moviendo las bases de datos hasta que quede desplazado
el servidor anterior.

En una de las bases de datos tenemos dos procedimiendos almacenados que me
estn generando problemas. El primero (digamos que se llama prGeneral) manda
a llamar al segundo (el cual llamaremos prCopiar) ms de una vez
(aproximadamente 70 veces). En prCopiar se ejecuta un OPENQUERY() sobre un
servidor vinculado para esa informacin insertarla en una tabla de SQL
Server.

Ms o menos as estn:

prGeneral

EXEC prCopia 'val1'
EXEC prCopia 'val2'
...
EXEC prCopia 'val1'

prCopia

...
SELECT * INTO Tabla FROM OPENQUERY(ServidorVinculado, 'SELECT * FROM Tabla')
...

Cabe remarcar que los nombres de las tablas son diferentes en cada llamada y
es el parmetro que se le pasa a prCopia desde prGeneral por lo que el
SELECT INTO y el OPENQUERY() se ejecutan dinmicamente.

Bien, el asunto es que en el equipo anterior (SQL Server 2000) funciona bien
y sin problemas. El proceso toma de 15 a 20 minutos y no hay queja de este
lado. Sin embargo cuando se recre el esenario en el servidor con SQL Server
2005 ya no todo fue como se esperaba. Se ejecuta el procedimiento general
(prGeneral) y este manda a llamar las n veces al procedimiento prCopia. Se
ven los mensajes y cuando va al 95% de la ejecucin del procedimiento se
comienza a ver que el servidor no permite ms conexiones o se ralentiza en
extremo. Si revisamos el Visor de Sucesos encontramos que comienzan a
aparecer muchos mensajes de error nmero 701, nivel 17 con descripcin
"There is insufficient system memory to run this query". Tenemos que
reiniciar los servicios para restablecer la operacin normal.

El error completo es el siguiente:

Event Type: Error
Event Source: MSSQLSERVER
Event Category: (2)
Event ID: 701
Date: 19/06/2007
Time: 10:22:53 AM
User: Usuario
Computer: Servidor
Description:
There is insufficient system memory to run this query.

A todo esto, el servidor vinculado apunta a un origen de datos de ODBC de
Visual FoxPro que toma tablas de Clipper (xBASE) desde otro equipo. El
procedimiento se ejecuta normalmente desde un job tres veces al da.

Alguna recomendacin para evitar el error de memoria insuficiente? Si no se
puede evitar cmo me recupero de ese error sin reiniciar el servicio de tal
forma que se pueda automatizar la recuperacin?

O existe algn otro mecanismo para importar va T-SQL archivos DBF a tablas
de SQL Server? Remarco que en un equipo similar pero con SQL Server 2000
esto funcionaba sin problema alguno.

Muchas gracias de antemano por sus comentarios.



Mario G. Contreras Arriaga (Nazul)
http://www.nazul.net/


Respuesta Responder a este mensaje
#2 Mario G. Contreras Arriaga
19/06/2007 - 22:30 | Informe spam
Gustavo,

Si, así es. Tiene SP2 así como Windows tiene todos los SPs y hotfixes.

Se que hay un problema que afecta a SQL Server 2005 con o sin SP1 pero que
hay un hotfix para ello y que se incluyó en el SP2 así que creo que no es mi
caso.

Por otro lado, he estado leyendo un poco y parece ser que sería cuestión de
ampliar el VAS pero no estoy seguro de si sea correcto (además de como
hacerlo sin que esto repercuta).

Gracias por la atención al mensaje.



Mario G. Contreras Arriaga (Nazul)
http://www.nazul.net/


"Gustavo Larriera (MVP)"
wrote in message news:
El SQL Server 2005 ya tiene aplicado el último service pack disponible?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.

Respuesta Responder a este mensaje
#3 Mario G. Contreras Arriaga
20/06/2007 - 01:41 | Informe spam
Si quedó aumentando el VAS con -g al momento de iniciar la instancia.

Gracias.


Mario G. Contreras Arriaga (Nazul)
http://www.nazul.net/


"Mario G. Contreras Arriaga" wrote in message
news:
Gustavo,

Si, así es. Tiene SP2 así como Windows tiene todos los SPs y hotfixes.

Se que hay un problema que afecta a SQL Server 2005 con o sin SP1 pero que
hay un hotfix para ello y que se incluyó en el SP2 así que creo que no es
mi caso.

Por otro lado, he estado leyendo un poco y parece ser que sería cuestión
de ampliar el VAS pero no estoy seguro de si sea correcto (además de como
hacerlo sin que esto repercuta).

Gracias por la atención al mensaje.



Mario G. Contreras Arriaga (Nazul)
http://www.nazul.net/

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida