urgente!!! liberar 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 =(

Preguntas similare

Leer las respuestas

#1 Jhonny Vargas P.
22/07/2004 - 16:54 | Informe spam
Hola Rick...

Usas Crystal Report para generar reportes?... o utilizas solo html?.

Muestrame los procedimientos almacenados o los querys que utilizas para
traer registros de la base de datos... ya que no es habitual lo que
mencionas.


Saludos,
Jhonny Vargas P. [MVP]
Santiago de Chile
http://msmvps.com/jvargas




"Rick" escribió en el mensaje
news:usPNWZ$
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 =(


Respuesta Responder a este mensaje
#2 Jhonny Vargas P.
22/07/2004 - 17:29 | Informe spam
Ok...

Primero... deberías crear un indice con el siguiente orden:
- cl_unidline
- cl_instalacion
- cl_area
- cl_operacion
- fh_lectura

Segundo... en el "FROM lectura" agrega (nolock)... ejemplo:
Select ... From Lectura (nolock)

Tercero... abre una conección y luego realiza el Recordset... ejemplo:

Dim objCon, objRec
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "... con string ... "

Set objRec = objCon.Execute ( lsSqltxt )

While Not objRec.Eof()

' ... codigo ...

objRec.MoveNext
Wend

Set objRec = Nothing

objCon.Close
Set objCon = Nothing


Saludos,
Jhonny Vargas P. [MVP]
Santiago de Chile
http://msmvps.com/jvargas



"Rick" escribió en el mensaje
news:eRFJz7$
solo asp y html
mira te pongo un reporte
<% function tabla(lsUnidadM)

Dim rsy, rsz, lsSqltxt,lsEnergia,liColor
liColor=0
%>
<center><FONT face="ARIAL" size="4">
CENTRAL&#160&#160 <%=gsInstalacion%><br>
UNIDAD&#160&#160 <%=lsUnidadM%><br>
DE&#160&#160 <%=gtFecha1%> 00:00:00 &#160&#160 HASTA &#160&#160
<%=gtFecha2%> 23:59:59</FONT>
<%
set rsy=createobject("ADODB.Recordset")
lsSqltxt="SELECT DISTINCT CONVERT(CHAR(20),fh_lectura,13) as


fh_lectura
FROM lectura where cl_unidline='"& lsUnidadM &"' and cl_instalacion='"&
gsInstalacion &"' and cl_area='"& gsArea &"' and cl_operacion='C' and
fh_lectura between '"& gtFecha1 &" 00:00:00" &"' and '"& gtFecha2 &"
23:59:59.999' and "& lsconsultaadd
rsy.CursorType=3
rsy.open lsSqltxt,conn
if rsy.eof and rsy.bof then
%>
<center><FONT FACE="ARIAL" size="4">NO EXISTEN DATOS PARA
MOSTRAR</font></center><br>
<%
else%>
<br><br>
<table width="75%" border=".5" align="center" cellpadding="2"
cellspacing="0" bordercolor="GRay" rules="all" id="ProjectsGrid"



style="border-color:White;border-style:None;width:75%;border-collapse:collap
se;">
<tr align="center" >
<th nowrap bgcolor="#006666" scope="col"><font color="#FFFFFF"


size="3"
face="Arial">FECHA</FONT></th>
<th nowrap bgcolor="#006666" scope="col"><font color="#FFFFFF"


size="3"
face="Arial">ER</FONT></th>
<th nowrap bgcolor="#006666" scope="col"><font color="#FFFFFF"


size="3"
face="Arial">EE</FONT></th>
<th nowrap bgcolor="#006666" scope="col"><font color="#FFFFFF"


size="3"
face="Arial">EA</FONT></th>
<th nowrap bgcolor="#006666" scope="col"><font color="#FFFFFF"


size="3"
face="Arial">SG</FONT></th>
</tr>
<%
rsy.close
set rsy=nothing

giVisible=1
set rsy=createobject("ADODB.Recordset")
lsSqltxt="SELECT DISTINCT CONVERT(CHAR(20),fh_lectura,13) as fh_lectura
FROM lectura where cl_unidline='"& lsUnidadM &"' and cl_instalacion='"&
gsInstalacion &"' and cl_area='"& gsArea &"' and cl_operacion='C' and
fh_lectura between '"& gtFecha1 &" 00:00:00" &"' and '"& gtFecha2 &"
23:59:59.999' and "& lsconsultaadd
rsy.CursorType=3
rsy.open lsSqltxt,conn
if not (rsy.eof and rsy.bof) then %>
<tr align="center">
<%
Do while not rsy.eof
if liColor=0 then
%><td align="center" nowrap><font face="Arial" size="3"><strong><%
else
%><td align="center" nowrap bgcolor="#FFFFFF"><font face="Arial"
size="3"><strong><%
end if
response.write FormatDateTime(rsy("fh_lectura"),2)&" "
If Hour(rsy("fh_lectura"))<10 then
response.write "0"&Hour(rsy("fh_lectura"))
else
response.write Hour(rsy("fh_lectura"))
end if
response.write":"
If Minute(rsy("fh_lectura"))<10 then
response.write "0"&Minute(rsy("fh_lectura"))
else
response.write Minute(rsy("fh_lectura"))
end if
response.write":"
If Second(rsy("fh_lectura"))<10 then
response.write "0"&Second(rsy("fh_lectura"))
else
response.write Second(rsy("fh_lectura"))
end if
%>
</strong></font></td>
<%
if giEr=1 then
lsStrconn = cl_Conexion_DB
set cnn = server.createobject("adodb.connection")
cnn.open lsStrconn
set rsz=createobject("ADODB.Recordset")
lsSqltxt="SELECT valor FROM lectura where cl_unidline='"& lsUnidadM


&"'
and cl_instalacion='"& gsInstalacion &"' and cl_area='"& gsArea &"' and
cl_operacion='C' and fh_lectura between '"&
FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&"' and '"&FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&".999' and cl_ubica='ER'"
rsz.open lsSqltxt,cnn
if not (rsz.eof and rsz.bof) then
rsz.MoveFirst
lsEnergia=rsz("valor")
else
lsEnergia="*"
end if
rsz.close
set rsz=nothing
cnn.close
else
lsEnergia="N/A"
end if
if liColor=0 then
%><td align="center" nowrap><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
else
%><td align="center" nowrap bgcolor="#FFFFFF"><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
end if
if giEe=1 then
lsStrconn = cl_Conexion_DB
set cnn = server.createobject("adodb.connection")
cnn.open lsStrconn
set rsz=createobject("ADODB.Recordset")
lsSqltxt="SELECT valor FROM lectura where cl_unidline='"& lsUnidadM


&"'
and cl_instalacion='"& gsInstalacion &"' and cl_area='"& gsArea &"' and
cl_operacion='C' and fh_lectura between '"&
FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&"' and '"&FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&".999' and cl_ubica='EE'"
rsz.open lsSqltxt,cnn
if not (rsz.eof and rsz.bof) then
rsz.MoveFirst
lsEnergia=rsz("valor")
else
lsEnergia="*"
end if
rsz.close
set rsz=nothing
cnn.close
else
lsEnergia="N/A"
end if
if liColor=0 then
%><td align="center" nowrap><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
else
%><td align="center" nowrap bgcolor="#FFFFFF"><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
end if
if giEe=1 then
lsStrconn = cl_Conexion_DB
set cnn = server.createobject("adodb.connection")
cnn.open lsStrconn
set rsz=createobject("ADODB.Recordset")
lsSqltxt="SELECT valor FROM lectura where cl_unidline='"& lsUnidadM


&"'
and cl_instalacion='"& gsInstalacion &"' and cl_area='"& gsArea &"' and
cl_operacion='C' and fh_lectura between '"&
FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&"' and '"&FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&".999' and cl_ubica='EA'"
rsz.open lsSqltxt,cnn
if not (rsz.eof and rsz.bof) then
rsz.MoveFirst
lsEnergia=rsz("valor")
else
lsEnergia="*"
end if
rsz.close
set rsz=nothing
cnn.close
else
lsEnergia="N/A"
end if
if liColor=0 then
%><td align="center" nowrap><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
else
%><td align="center" nowrap bgcolor="#FFFFFF"><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
end if
if giSg=1 then
lsStrconn = cl_Conexion_DB
set cnn = server.createobject("adodb.connection")
cnn.open lsStrconn
set rsz=createobject("ADODB.Recordset")
lsSqltxt="SELECT valor FROM lectura where cl_unidline='"& lsUnidadM


&"'
and cl_instalacion='"& gsInstalacion &"' and cl_area='"& gsArea &"' and
cl_operacion='C' and fh_lectura between '"&
FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&"' and '"&FormatDateTime(rsy("fh_lectura"),2)&" "&



Hour(rsy("fh_lectura"))&":"&Minute(rsy("fh_lectura"))&":"&Second(rsy("fh_lec
tura"))&".999' and cl_ubica='SG'"
rsz.open lsSqltxt,cnn
if not (rsz.eof and rsz.bof) then
rsz.MoveFirst
lsEnergia=rsz("valor")
else
lsEnergia="*"
end if
rsz.close
set rsz=nothing
cnn.close
else
lsEnergia="N/A"
end if
if liColor=0 then
%><td align="center" nowrap><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
else
%><td align="center" nowrap bgcolor="#FFFFFF"><font face="Arial"
size="3"><strong><%response.write lsEnergia%></strong></font></td><%
end if%>
</tr>
<%
rsy.MoveNext
if liColor=0 then
liColor=1
else
liColor=0
end if
loop
end if
rsy.close
set rsy=nothing
%>
</table>
</center><br>
<% end if
End Function%>

como puedes ver son solo selects pero lo raro es que una vez que termoina


el
sql se queda con la memoria, no libera y de ahi en mas sigue aumentando =s

"Jhonny Vargas P." escribió en el


mensaje
news:OaF4Zu$
> Hola Rick...
>
> Usas Crystal Report para generar reportes?... o utilizas solo html?.
>
> Muestrame los procedimientos almacenados o los querys que utilizas para
> traer registros de la base de datos... ya que no es habitual lo que
> mencionas.
>
>
> Saludos,
> Jhonny Vargas P. [MVP]
> Santiago de Chile
> http://msmvps.com/jvargas
>
>
>
>
> "Rick" escribió en el mensaje
> news:usPNWZ$
> > 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 =(
> >
> >
>
>


Respuesta Responder a este mensaje
#3 Jhonny Vargas P.
22/07/2004 - 20:48 | Informe spam
"Rick" escribió en el mensaje
news:
oki dejame lo intento, basicamente eso de hacer la conecion y usar el rs


lo
he hecho con otros reportes porque de repente el asp me marcaba errores d
conexion y los resolvi usando el metodo que mencionas
=)
el no lock en que ayuda?? entiendo que no bloquea la tabla pero en
performance??



Según la ayuda:
No emite bloqueos compartidos y no respeta los bloqueos exclusivos. Cuando
esta opción tiene efecto, es posible leer una transacción no confirmada o un
conjunto de páginas deshechas en mitad de una lectura. Es posible realizar
lecturas diferidas. Sólo se aplica a la instrucción SELECT.


Saludos,
Jhonny Vargas P. [MVP]
Santiago de Chile
http://msmvps.com/jvargas
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida