Liberar la memoria

18/06/2008 - 18:39 por Miguel Acevedo | Informe spam
Estoy usando una aplicación creada en Visual Basic .Net. Desde la aplicación
en .Net ejecuto varios procedimientos almacenados en una base de datos en SQL
Server 2000, la ejecución de estos procedimientos almacenados consume mucha
memoria. Después de ejecutado todos los procedimientos almacenados cierro la
aplicación (creada en Visual Basic .Net) y se libera la memoria del proceso
asociado a la aplicación de .Net pero NO SE LIBERA LA MEMORIA DEL PROCESO DE
SQL SERVER 2000 (sqlservr.exe). ¿Existe una manera de mandar a liberar la
memoria del SQL Server 2000 desde Visual Basic .Net?

Preguntas similare

Leer las respuestas

#6 Miguel Acevedo
18/06/2008 - 21:41 | Informe spam
Ok Gracias voy a investigar bien eso de limitar la memoria de Sql Server, por
otra parte queria comentarte que navegando encontre esto "DBCC FREEPROCCACHE"
que supuestamente permitirá vaciar del servidor sql server la cache de los
storeds procedures ejecutados, que me puedes recomendar de esto?

Gracias.

"Gux (MVP)" wrote:

La idea de limitra la memoria a consumir por SQL Server es para evitar que
consuma memoria excesiva, que es bueno para SQL Server pero puede ser malo
para el servidor Windows y las demás aplicaciones ejecutando en el mismo
servidor.

Cuando SQL Server tiene un tope de memoria dispone de menos espacio para la
creación de objetos y áreas de uso interno (buffers, caches, memoria para
planes de ejecución, conecciones, etc.) por lo cual si la memoria es escasa,
dinámicamente debe sustituir objetos "viejos" en memoria por nuevos objetos
vivos. Los objetos viejos se persisten en disco hasta que se vuelven a
necesitar.

El resultado final es que el rendimiento es menor versus la estabilidad
general del servidor. Cuando el servidor está dedicado a SQL Server, se suele
permitir que SQL Server consuma toda la memoria que su gula desee :-)

Si le interesan los detalles del consumo de memoria en vivo, le recomiendo
jugar con el comando DBCC MEMORYSTATUS:

INF: Using DBCC MEMORYSTATUS to Monitor SQL Server Memory Usage
http://support.microsoft.com/kb/271624

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Miguel Acevedo" wrote:

> Una pregunta mas y disculpa las molestias, que hace SQL Server cuando se le
> limita el uso de memoria, borra procesos almacenados en la memoria para
> reutilizar el espacio o mas bien usa espacio en disco duro?
>
> Gracias.
>
> "Gux (MVP)" wrote:
>
> > No se puede liberar selectivamente la memoria de SQL Server que es usada por
> > procedimientos. Considere usar sp_configure para que SQL Server no use más de
> > cierto tope de memoria.
> >
> > Gustavo Larriera, Microsoft MVP
> > http://www.linkedin.com/in/gustavolarriera
> > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> >
> >
> >
> > "Miguel Acevedo" wrote:
> >
> > > Gracias por la sugerencia, lo que sucede es que estamos hablando de
> > > servidores que manejan varias aplicaciones y su uso es bastante delicado esto
> > > no permite estar reiniciando los servicios, por otra parte me gustaría poder
> > > libera de la memoria cada store procedure que mande a ejecutar desde mi
> > > aplicación.
> > >
> > > Gracias de antemano por la ayuda que puedan darme.
> > >
> > > "Gux (MVP)" wrote:
> > >
> > > > SQL Server trata de usar lo máximo de memoria que pueda siempre.
> > > >
> > > > Lo que usted puede hacer es configurar a SQL Server para que no consuma más
> > > > de un cierto tamaño de memoria (vea el uso de sp_configure en los Books
> > > > Online).
> > > >
> > > > Si una vez que usted termina la aplicación, no hay más aplicaciones que usen
> > > > al SQL Server, usted puede detener el servicio SQL para liberar memoria. O si
> > > > lo prefiere, reiniciar el servicio. Puede usar el comando de línea NET
> > > > START/STOP para eso.
> > > >
> > > > Gustavo Larriera, Microsoft MVP
> > > > http://www.linkedin.com/in/gustavolarriera
> > > > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> > > >
> > > >
> > > >
> > > > "Miguel Acevedo" wrote:
> > > >
> > > > > Estoy usando una aplicación creada en Visual Basic .Net. Desde la aplicación
> > > > > en .Net ejecuto varios procedimientos almacenados en una base de datos en SQL
> > > > > Server 2000, la ejecución de estos procedimientos almacenados consume mucha
> > > > > memoria. Después de ejecutado todos los procedimientos almacenados cierro la
> > > > > aplicación (creada en Visual Basic .Net) y se libera la memoria del proceso
> > > > > asociado a la aplicación de .Net pero NO SE LIBERA LA MEMORIA DEL PROCESO DE
> > > > > SQL SERVER 2000 (sqlservr.exe). ¿Existe una manera de mandar a liberar la
> > > > > memoria del SQL Server 2000 desde Visual Basic .Net?
> > > > >
Respuesta Responder a este mensaje
#7 Gux (MVP)
18/06/2008 - 23:26 | Informe spam
DBCC FREEPROCCACHE, DBCC DROPCLEANBUFFERS y demás DBCC similares solamente se
recomiendan usar en caso de que usted desee "dejar limpio" un SQL Server
para, por ejemplo, hacer una prueba de stress o para tener al sistema en un
modo limpio como para empezar un análisis de optimización sin interferencias.

En mi opinión personal, el uso de DBCC FREE* no debería ser para intentar
limitar el uso de memoria. Observar que al limpiar cache o buffers usted
experimentará problemas de rendimiento, ya que habrá eliminado los planes de
ejecución almacenados y las páginas d edatos cargadas en memoria.

Finalmente y sin haber hechos pruebas yo mismo para confirmarlo, tengo la
intuición que los DBCC FREE* no lograrán liberar una cantidad importante de
memoria.

Si usted hace esas pruebas, por favor comparta en este foro los resultados
obtenidos.

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Miguel Acevedo" wrote:

Ok Gracias voy a investigar bien eso de limitar la memoria de Sql Server, por
otra parte queria comentarte que navegando encontre esto "DBCC FREEPROCCACHE"
que supuestamente permitirá vaciar del servidor sql server la cache de los
storeds procedures ejecutados, que me puedes recomendar de esto?

Gracias.

"Gux (MVP)" wrote:

> La idea de limitra la memoria a consumir por SQL Server es para evitar que
> consuma memoria excesiva, que es bueno para SQL Server pero puede ser malo
> para el servidor Windows y las demás aplicaciones ejecutando en el mismo
> servidor.
>
> Cuando SQL Server tiene un tope de memoria dispone de menos espacio para la
> creación de objetos y áreas de uso interno (buffers, caches, memoria para
> planes de ejecución, conecciones, etc.) por lo cual si la memoria es escasa,
> dinámicamente debe sustituir objetos "viejos" en memoria por nuevos objetos
> vivos. Los objetos viejos se persisten en disco hasta que se vuelven a
> necesitar.
>
> El resultado final es que el rendimiento es menor versus la estabilidad
> general del servidor. Cuando el servidor está dedicado a SQL Server, se suele
> permitir que SQL Server consuma toda la memoria que su gula desee :-)
>
> Si le interesan los detalles del consumo de memoria en vivo, le recomiendo
> jugar con el comando DBCC MEMORYSTATUS:
>
> INF: Using DBCC MEMORYSTATUS to Monitor SQL Server Memory Usage
> http://support.microsoft.com/kb/271624
>
> Gustavo Larriera, Microsoft MVP
> http://www.linkedin.com/in/gustavolarriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Miguel Acevedo" wrote:
>
> > Una pregunta mas y disculpa las molestias, que hace SQL Server cuando se le
> > limita el uso de memoria, borra procesos almacenados en la memoria para
> > reutilizar el espacio o mas bien usa espacio en disco duro?
> >
> > Gracias.
> >
> > "Gux (MVP)" wrote:
> >
> > > No se puede liberar selectivamente la memoria de SQL Server que es usada por
> > > procedimientos. Considere usar sp_configure para que SQL Server no use más de
> > > cierto tope de memoria.
> > >
> > > Gustavo Larriera, Microsoft MVP
> > > http://www.linkedin.com/in/gustavolarriera
> > > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> > >
> > >
> > >
> > > "Miguel Acevedo" wrote:
> > >
> > > > Gracias por la sugerencia, lo que sucede es que estamos hablando de
> > > > servidores que manejan varias aplicaciones y su uso es bastante delicado esto
> > > > no permite estar reiniciando los servicios, por otra parte me gustaría poder
> > > > libera de la memoria cada store procedure que mande a ejecutar desde mi
> > > > aplicación.
> > > >
> > > > Gracias de antemano por la ayuda que puedan darme.
> > > >
> > > > "Gux (MVP)" wrote:
> > > >
> > > > > SQL Server trata de usar lo máximo de memoria que pueda siempre.
> > > > >
> > > > > Lo que usted puede hacer es configurar a SQL Server para que no consuma más
> > > > > de un cierto tamaño de memoria (vea el uso de sp_configure en los Books
> > > > > Online).
> > > > >
> > > > > Si una vez que usted termina la aplicación, no hay más aplicaciones que usen
> > > > > al SQL Server, usted puede detener el servicio SQL para liberar memoria. O si
> > > > > lo prefiere, reiniciar el servicio. Puede usar el comando de línea NET
> > > > > START/STOP para eso.
> > > > >
> > > > > Gustavo Larriera, Microsoft MVP
> > > > > http://www.linkedin.com/in/gustavolarriera
> > > > > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> > > > >
> > > > >
> > > > >
> > > > > "Miguel Acevedo" wrote:
> > > > >
> > > > > > Estoy usando una aplicación creada en Visual Basic .Net. Desde la aplicación
> > > > > > en .Net ejecuto varios procedimientos almacenados en una base de datos en SQL
> > > > > > Server 2000, la ejecución de estos procedimientos almacenados consume mucha
> > > > > > memoria. Después de ejecutado todos los procedimientos almacenados cierro la
> > > > > > aplicación (creada en Visual Basic .Net) y se libera la memoria del proceso
> > > > > > asociado a la aplicación de .Net pero NO SE LIBERA LA MEMORIA DEL PROCESO DE
> > > > > > SQL SERVER 2000 (sqlservr.exe). ¿Existe una manera de mandar a liberar la
> > > > > > memoria del SQL Server 2000 desde Visual Basic .Net?
> > > > > >
Respuesta Responder a este mensaje
#8 Miguel Acevedo
19/06/2008 - 15:28 | Informe spam
Efectivamente los DBCC no liberan una cantidad de memoria que pueda mereser
su uso, muchas gracias por todas tus sugerencias, voy a realizar pruebas con
tu primera recomendacion que es definir un maximo de memoria para el uso de
Sql Server.

Muchas Gracias.

"Gux (MVP)" wrote:

DBCC FREEPROCCACHE, DBCC DROPCLEANBUFFERS y demás DBCC similares solamente se
recomiendan usar en caso de que usted desee "dejar limpio" un SQL Server
para, por ejemplo, hacer una prueba de stress o para tener al sistema en un
modo limpio como para empezar un análisis de optimización sin interferencias.

En mi opinión personal, el uso de DBCC FREE* no debería ser para intentar
limitar el uso de memoria. Observar que al limpiar cache o buffers usted
experimentará problemas de rendimiento, ya que habrá eliminado los planes de
ejecución almacenados y las páginas d edatos cargadas en memoria.

Finalmente y sin haber hechos pruebas yo mismo para confirmarlo, tengo la
intuición que los DBCC FREE* no lograrán liberar una cantidad importante de
memoria.

Si usted hace esas pruebas, por favor comparta en este foro los resultados
obtenidos.

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Miguel Acevedo" wrote:

> Ok Gracias voy a investigar bien eso de limitar la memoria de Sql Server, por
> otra parte queria comentarte que navegando encontre esto "DBCC FREEPROCCACHE"
> que supuestamente permitirá vaciar del servidor sql server la cache de los
> storeds procedures ejecutados, que me puedes recomendar de esto?
>
> Gracias.
>
> "Gux (MVP)" wrote:
>
> > La idea de limitra la memoria a consumir por SQL Server es para evitar que
> > consuma memoria excesiva, que es bueno para SQL Server pero puede ser malo
> > para el servidor Windows y las demás aplicaciones ejecutando en el mismo
> > servidor.
> >
> > Cuando SQL Server tiene un tope de memoria dispone de menos espacio para la
> > creación de objetos y áreas de uso interno (buffers, caches, memoria para
> > planes de ejecución, conecciones, etc.) por lo cual si la memoria es escasa,
> > dinámicamente debe sustituir objetos "viejos" en memoria por nuevos objetos
> > vivos. Los objetos viejos se persisten en disco hasta que se vuelven a
> > necesitar.
> >
> > El resultado final es que el rendimiento es menor versus la estabilidad
> > general del servidor. Cuando el servidor está dedicado a SQL Server, se suele
> > permitir que SQL Server consuma toda la memoria que su gula desee :-)
> >
> > Si le interesan los detalles del consumo de memoria en vivo, le recomiendo
> > jugar con el comando DBCC MEMORYSTATUS:
> >
> > INF: Using DBCC MEMORYSTATUS to Monitor SQL Server Memory Usage
> > http://support.microsoft.com/kb/271624
> >
> > Gustavo Larriera, Microsoft MVP
> > http://www.linkedin.com/in/gustavolarriera
> > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> >
> >
> >
> > "Miguel Acevedo" wrote:
> >
> > > Una pregunta mas y disculpa las molestias, que hace SQL Server cuando se le
> > > limita el uso de memoria, borra procesos almacenados en la memoria para
> > > reutilizar el espacio o mas bien usa espacio en disco duro?
> > >
> > > Gracias.
> > >
> > > "Gux (MVP)" wrote:
> > >
> > > > No se puede liberar selectivamente la memoria de SQL Server que es usada por
> > > > procedimientos. Considere usar sp_configure para que SQL Server no use más de
> > > > cierto tope de memoria.
> > > >
> > > > Gustavo Larriera, Microsoft MVP
> > > > http://www.linkedin.com/in/gustavolarriera
> > > > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> > > >
> > > >
> > > >
> > > > "Miguel Acevedo" wrote:
> > > >
> > > > > Gracias por la sugerencia, lo que sucede es que estamos hablando de
> > > > > servidores que manejan varias aplicaciones y su uso es bastante delicado esto
> > > > > no permite estar reiniciando los servicios, por otra parte me gustaría poder
> > > > > libera de la memoria cada store procedure que mande a ejecutar desde mi
> > > > > aplicación.
> > > > >
> > > > > Gracias de antemano por la ayuda que puedan darme.
> > > > >
> > > > > "Gux (MVP)" wrote:
> > > > >
> > > > > > SQL Server trata de usar lo máximo de memoria que pueda siempre.
> > > > > >
> > > > > > Lo que usted puede hacer es configurar a SQL Server para que no consuma más
> > > > > > de un cierto tamaño de memoria (vea el uso de sp_configure en los Books
> > > > > > Online).
> > > > > >
> > > > > > Si una vez que usted termina la aplicación, no hay más aplicaciones que usen
> > > > > > al SQL Server, usted puede detener el servicio SQL para liberar memoria. O si
> > > > > > lo prefiere, reiniciar el servicio. Puede usar el comando de línea NET
> > > > > > START/STOP para eso.
> > > > > >
> > > > > > Gustavo Larriera, Microsoft MVP
> > > > > > http://www.linkedin.com/in/gustavolarriera
> > > > > > Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
> > > > > >
> > > > > >
> > > > > >
> > > > > > "Miguel Acevedo" wrote:
> > > > > >
> > > > > > > Estoy usando una aplicación creada en Visual Basic .Net. Desde la aplicación
> > > > > > > en .Net ejecuto varios procedimientos almacenados en una base de datos en SQL
> > > > > > > Server 2000, la ejecución de estos procedimientos almacenados consume mucha
> > > > > > > memoria. Después de ejecutado todos los procedimientos almacenados cierro la
> > > > > > > aplicación (creada en Visual Basic .Net) y se libera la memoria del proceso
> > > > > > > asociado a la aplicación de .Net pero NO SE LIBERA LA MEMORIA DEL PROCESO DE
> > > > > > > SQL SERVER 2000 (sqlservr.exe). ¿Existe una manera de mandar a liberar la
> > > > > > > memoria del SQL Server 2000 desde Visual Basic .Net?
> > > > > > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida