Hola, tenemos una aplicacion que se ha visto lenta cuando accesa la base de
datos.
Me puse a leer el Books On Line de SQL Server y encontre este parrafo:
· Applications that are not processing all results to completion.
After sending a query to the server, all applications must immediately fetch
all result rows to completion. If an application does not fetch all result
rows, locks may be left on the tables, blocking other users. If you are
using an application that transparently submits Transact-SQL statements to
the server, the application must fetch all result rows. If it does not (and
if it cannot be configured to do so), you may be unable to resolve the
blocking problem. To avoid the problem, you can restrict these applications
to a reporting or decision-support database.
No entiendo bien esto. Por ejemplo, si tengo esta rutina (pseudo codigo)
public function ConsigueRegE(byval strID as string) as string
dim es as ADODB.Recorset
dim strSQL as string
strSQL = "Select Campo1,Campo2 from MiTabla where IdProd=" & strID
set rs = new adodb.recordset
rs.cursorlocation = adClient
rs.open strSQL, dbConex
do until rs.eof
if rs!Campo1 = "E" then
exit loop
end if
rs.movenext
loop
ConsigueRegE = rs!Campo2
end function
Se asume que dbConex esta debidamente inicializado. Si localizo
el registro con el Id de producto correspondiente y Campo1 es "E"
entonces me salgo del bucle, asigno el valor de regreso y me salgo
de la rutina. ¿Esto va a causar problemas de bloqueo como dice el
texto?
Y si despues de la linea de Campo2 hago esto:
rs.close
set rs = nothing
¿Esto mejorara el asunto? Segun yo, como declare rs local a la funcion
se deben liberar los recursos que rs emplea cuando me salgo de la rutina.
Gracias por su retroalimentacion! Saludos, Saga
Leer las respuestas