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/
 

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/


Preguntas similares