super urgente!! memoria

22/07/2004 - 09:14 por Rick | Informe spam
que tal colegas espero alguien me pueda ayudar, tengo varios reportes hechos
en asp que consultan un server sql 2000, mi problema es que ciertos reportes
hacen que sql tome muchisima memoria (veo el admin de tareas de windows y
consume el 100% de uso del cpu y la memoria que toma es de 98 mb hasta 300
mb y mas aveces) mi lio es que obvio los reportes tardan en generarse, pero
cuando se generan sql no libera la memoria que tomó, es decir si veo nuieva
mente el admin de tareas se queda sql con la cantidad de memoria hasta la
que llegó, y si genero otro reporte sobre esa memoria que ya tenia tomada
empieza a consumir mas, no tengo instalado ningun service pack, el servidor
sql corre sobre la misma pc que el IIS, osea todo en una misma pc, existira
algun comando para decirle a sql que libere la memoria?? porque la unica
manera que me he encontrado para que la libere, es parando el servicio sql y
volviendolo a iniciar... esto no es lo normal los reportes no son
complejos son simples listados, creo que el lio va por el # de registros que
despliegan pero lo que no entiendo es porque sql consume mucha memoria y no
la libera =(
 

Leer las respuestas

#1 Gustavo Larriera [MVP SQL]
22/07/2004 - 18:00 | Informe spam
El consumo de memoria dinámico "tomar lo más que se pueda" de SQL Server es
By Design. Puedes limitar el consumo de memoria del SQL Server para
favorecer a los procesos del IIS usando sp_configure.


/* Copy&Paste de los Books Online (BOL) de tu instalación SQL Server */

La configuración recomendada es permitir que SQL Server utilice la memoria
de manera dinámica; no obstante, puede establecer manualmente las opciones
de memoria y suplantar la capacidad de SQL Server de utilizar la memoria de
manera dinámica. Antes de establecer la cantidad de memoria para SQL Server,
determine la configuración de memoria apropiada restando de la memoria
física total la memoria necesaria para Windows NT 4.0 o Windows 2000 y todas
las demás instancias de SQL Server (y otros usos del sistema, si el equipo
no está dedicado totalmente a SQL Server). El resultado será la cantidad de
memoria máxima que puede asignar a SQL Server.

Hay dos métodos principales para establecer manualmente las opciones de
memoria de SQL Server:

a.. En el primer método, se establece el mismo valor para las opciones min
server memory y max server memory. Este valor corresponde a la cantidad fija
de memoria que se va a asignar a SQL Server.


b.. En el segundo método, las opciones min server memory y max server
memory se establecen de manera que abarquen un intervalo de valores de
memoria. Esto resulta útil en los casos en que los administradores de bases
de datos o de sistemas desean configurar una instancia de SQL Server junto
con los requisitos de memoria de otras aplicaciones que se ejecutan en el
mismo equipo.
Al ejecutar Microsoft® Windows NT® o Windows® 2000, el comportamiento
predeterminado de administración de memoria del motor de base de datos de
SQL Server no es adquirir un cantidad específica de memoria, sino tanta como
pueda sin provocar un exceso de paginación de E/S. El motor de la base de
datos lo lleva a cabo adquiriendo tanta memoria como es posible, aunque
dejando suficiente memoria libre para que el sistema operativo no tenga que
intercambiar la memoria con el disco duro.

Una instancia de SQL Server cambiará su objetivo según cambie la carga de
trabajo. Según se conectan más usuarios y generan más trabajo, la instancia
tenderá a adquirir más memoria para mantener la memoria libre disponible por
debajo del límite de 4 MB. Según disminuye la carga de trabajo, la instancia
ajustará su objetivo en torno a los 10 MB de espacio libre, dejará más
memoria libre al sistema operativo. Mantener esta cantidad de espacio libre
entre 10 y 4 MB evita que Windows NT o Windows 2000 paginen la memoria en
exceso, a la vez que permite que SQL Server tenga la caché de búfer de mayor
tamaño posible sin que cause ningún intercambio adicional.

Cuando se inician otras aplicaciones en un equipo que ejecuta una instancia
de SQL Server, consumen memoria y la cantidad de memoria física disponible
cae por debajo del destino de SQL Server. La instancia de SQL Server libera
entonces memoria suficiente de su espacio para direcciones para devolver
aumentada la memoria disponible al destino de SQL Server. Si se detiene otra
aplicación y proporciona más memoria disponible, la instancia de SQL Server
aumenta el tamaño de su asignación de memoria. SQL Server puede liberar y
adquirir varios megabytes de memoria cada segundo, permitiendo ajustarse
rápidamente a los cambios de asignación de memoria.


Gustavo Larriera
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Rick" wrote in message
news:%23qXq7Y$
que tal colegas espero alguien me pueda ayudar, tengo varios reportes


hechos
en asp que consultan un server sql 2000, mi problema es que ciertos


reportes
hacen que sql tome muchisima memoria (veo el admin de tareas de windows y
consume el 100% de uso del cpu y la memoria que toma es de 98 mb hasta 300
mb y mas aveces) mi lio es que obvio los reportes tardan en generarse,


pero
cuando se generan sql no libera la memoria que tomó, es decir si veo


nuieva
mente el admin de tareas se queda sql con la cantidad de memoria hasta la
que llegó, y si genero otro reporte sobre esa memoria que ya tenia tomada
empieza a consumir mas, no tengo instalado ningun service pack, el


servidor
sql corre sobre la misma pc que el IIS, osea todo en una misma pc,


existira
algun comando para decirle a sql que libere la memoria?? porque la unica
manera que me he encontrado para que la libere, es parando el servicio sql


y
volviendolo a iniciar... esto no es lo normal los reportes no son
complejos son simples listados, creo que el lio va por el # de registros


que
despliegan pero lo que no entiendo es porque sql consume mucha memoria y


no
la libera =(


Preguntas similares