ASP Bloquea SQL Server

12/11/2004 - 01:20 por Elvio | Informe spam
Hola amigos, tengo el problema que he desarrolado un sitio en ASP y
utilizando SQL server como eran varias paginas que necesitaban conectarse
puse el objeto conection en una variable de session mediante la instruccion
object del global asa.
En cada pagina abro y cierro la conexion, todo bien hasta ahi pero el
problema es que al parecer en algun momento las paginas generan un bloqueo en
la bd no se por que.
Es recomendable poner la coneccion en session ?, este problema se puede
deber a que me olvide de cerrar la conexion en alguna pagina ?.
Que solucion seria la adecuada, ademas el servidor sql no es el mismo que el
servidor web es mas esta muy alejado fisicamente..

Espero que puedan ayudarme Gracias...

Preguntas similare

Leer las respuestas

#1 Miguel Gonzalez
12/11/2004 - 11:07 | Informe spam
Hola Elvio.

Tal como expone el fabricante, Microsoft:

copio
Use ADO Like an Apartment Model

[...] Don't cache an instance of an ADO object, such as a Connection,
globally and invoke methods on it concurrently from multiple threads. If
each client request in your application model invokes the
Connection.Execute method on a globally cached Connection object on the
middle tier, your application will not scale. This is because of
synchronization in the Connection.Execute method.

You will get much better throughput by using an application model where
each client request creates a new instance of a Connection object, calls
Connection.Open and then Connection.Execute, and releases the Connection
object on the middle tier. Each request does have the additional
overhead of creating a new instance of a Connection object and obtaining
a connection from the connection pool. However, because your
Connection.Execute call isn't synchronized, the throughput is much better.

ASP Considerations

Don't cache ADO objects in Global.asa. See "Use ADO Like an Apartment
Model" earlier in this document.
fin copiado

Más recomendaciones (muy útiles) en:

http://msdn.microsoft.com/library/d...ovperf.asp

Si necesitas utilizar la misma conexión en varias páginas, lo más
recomendable es que la situes en un archivo aparte y lo incluyas en las
páginas mediante la directiva "include":

#include file="abreconexion.asp"

:-)

Saludos!
Miguel



Elvio wrote:
Hola amigos, tengo el problema que he desarrolado un sitio en ASP y
utilizando SQL server como eran varias paginas que necesitaban conectarse
puse el objeto conection en una variable de session mediante la instruccion
object del global asa.
En cada pagina abro y cierro la conexion, todo bien hasta ahi pero el
problema es que al parecer en algun momento las paginas generan un bloqueo en
la bd no se por que.
Es recomendable poner la coneccion en session ?, este problema se puede
deber a que me olvide de cerrar la conexion en alguna pagina ?.
Que solucion seria la adecuada, ademas el servidor sql no es el mismo que el
servidor web es mas esta muy alejado fisicamente..

Espero que puedan ayudarme Gracias...
Respuesta Responder a este mensaje
#2 Elvio
12/11/2004 - 22:03 | Informe spam
Gracias...
Pero si pongo ese archivo en cada pagina asp que necesite, entonces tendria
que poner en ese archivo algo como...

Set m_conexion = Server.CreateObject("ADODB.CONECCTION")

con lo cual por cada pagina crearia una nueva conexion, y despues al final
tendria que destruir la conexion...

Entonces no retardaria el rendimiento tener que conectarse caada ves ?
ese objeto m_conexion es visible desde la pagina que lo incluye ?

Bueno esas son algunas de mis dudas

Gracias

Elvio






"Miguel Gonzalez" wrote:

Hola Elvio.

Tal como expone el fabricante, Microsoft:

copio
Use ADO Like an Apartment Model

[...] Don't cache an instance of an ADO object, such as a Connection,
globally and invoke methods on it concurrently from multiple threads. If
each client request in your application model invokes the
Connection.Execute method on a globally cached Connection object on the
middle tier, your application will not scale. This is because of
synchronization in the Connection.Execute method.

You will get much better throughput by using an application model where
each client request creates a new instance of a Connection object, calls
Connection.Open and then Connection.Execute, and releases the Connection
object on the middle tier. Each request does have the additional
overhead of creating a new instance of a Connection object and obtaining
a connection from the connection pool. However, because your
Connection.Execute call isn't synchronized, the throughput is much better.

ASP Considerations

Don't cache ADO objects in Global.asa. See "Use ADO Like an Apartment
Model" earlier in this document.
fin copiado

Más recomendaciones (muy útiles) en:

http://msdn.microsoft.com/library/d...ovperf.asp

Si necesitas utilizar la misma conexión en varias páginas, lo más
recomendable es que la situes en un archivo aparte y lo incluyas en las
páginas mediante la directiva "include":

#include file="abreconexion.asp"

:-)

Saludos!
Miguel



Elvio wrote:
> Hola amigos, tengo el problema que he desarrolado un sitio en ASP y
> utilizando SQL server como eran varias paginas que necesitaban conectarse
> puse el objeto conection en una variable de session mediante la instruccion
> object del global asa.
> En cada pagina abro y cierro la conexion, todo bien hasta ahi pero el
> problema es que al parecer en algun momento las paginas generan un bloqueo en
> la bd no se por que.
> Es recomendable poner la coneccion en session ?, este problema se puede
> deber a que me olvide de cerrar la conexion en alguna pagina ?.
> Que solucion seria la adecuada, ademas el servidor sql no es el mismo que el
> servidor web es mas esta muy alejado fisicamente..
>
> Espero que puedan ayudarme Gracias...

Respuesta Responder a este mensaje
#3 Miguel Gonzalez
12/11/2004 - 22:37 | Informe spam
Hola Elvio.

Obviamente, cabe tener también un archivo "cierre.asp", más o menos así:

<%
m_conexion.Close
Set m_conexion = Nothing
%>

... en el que cierres y "destruyas" todas las conexiones y objetos abiertos en la página de apertura.

Saludos!
Miguel

e incluirlo también al final delas páginas ASP:

Elvio wrote:
Gracias...
Pero si pongo ese archivo en cada pagina asp que necesite, entonces tendria
que poner en ese archivo algo como...

Set m_conexion = Server.CreateObject("ADODB.CONECCTION")

con lo cual por cada pagina crearia una nueva conexion, y despues al final
tendria que destruir la conexion...

Entonces no retardaria el rendimiento tener que conectarse caada ves ?
ese objeto m_conexion es visible desde la pagina que lo incluye ?

Bueno esas son algunas de mis dudas

Gracias

Elvio






"Miguel Gonzalez" wrote:


Hola Elvio.

Tal como expone el fabricante, Microsoft:

copio
Use ADO Like an Apartment Model

[...] Don't cache an instance of an ADO object, such as a Connection,
globally and invoke methods on it concurrently from multiple threads. If
each client request in your application model invokes the
Connection.Execute method on a globally cached Connection object on the
middle tier, your application will not scale. This is because of
synchronization in the Connection.Execute method.

You will get much better throughput by using an application model where
each client request creates a new instance of a Connection object, calls
Connection.Open and then Connection.Execute, and releases the Connection
object on the middle tier. Each request does have the additional
overhead of creating a new instance of a Connection object and obtaining
a connection from the connection pool. However, because your
Connection.Execute call isn't synchronized, the throughput is much better.

ASP Considerations

Don't cache ADO objects in Global.asa. See "Use ADO Like an Apartment
Model" earlier in this document.
fin copiado

Mà¡s recomendaciones (muy àºtiles) en:

http://msdn.microsoft.com/library/d...ovperf.asp

Si necesitas utilizar la misma conexión en varias pà¡ginas, lo mà¡s
recomendable es que la situes en un archivo aparte y lo incluyas en las
pà¡ginas mediante la directiva "include":

#include file="abreconexion.asp"

:-)

Saludos!
Miguel



Elvio wrote:

Hola amigos, tengo el problema que he desarrolado un sitio en ASP y
utilizando SQL server como eran varias paginas que necesitaban conectarse
puse el objeto conection en una variable de session mediante la instruccion
object del global asa.
En cada pagina abro y cierro la conexion, todo bien hasta ahi pero el
problema es que al parecer en algun momento las paginas generan un bloqueo en
la bd no se por que.
Es recomendable poner la coneccion en session ?, este problema se puede
deber a que me olvide de cerrar la conexion en alguna pagina ?.
Que solucion seria la adecuada, ademas el servidor sql no es el mismo que el
servidor web es mas esta muy alejado fisicamente..

Espero que puedan ayudarme Gracias...



Respuesta Responder a este mensaje
#4 Sashka
12/11/2004 - 23:39 | Informe spam
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Hay que tener mucho cuidado con éste tema
Suele interpretarse como que el include va a abrir la conección de todas
manerasy esto puede ser muy peligroso
Aca tienes un ejemplo de cómo podría ser éste include y cual es la forma
correcta de usarlo
http://www.asp-php.co.uk/en/asp-php...ctions.php

Sashka
MS MVP Access
MCP ASP.Net

"Miguel Gonzalez" escribió en el mensaje
news:OvJei$
Hola Elvio.

Obviamente, cabe tener también un archivo "cierre.asp", más o menos así:

<%
m_conexion.Close
Set m_conexion = Nothing
%>

... en el que cierres y "destruyas" todas las conexiones y objetos abiertos
en la página de apertura.

Saludos!
Miguel

e incluirlo también al final delas páginas ASP:

Elvio wrote:
Gracias...
Pero si pongo ese archivo en cada pagina asp que necesite, entonces
tendria que poner en ese archivo algo como...

Set m_conexion = Server.CreateObject("ADODB.CONECCTION")

con lo cual por cada pagina crearia una nueva conexion, y despues al final
tendria que destruir la conexion...

Entonces no retardaria el rendimiento tener que conectarse caada ves ?
ese objeto m_conexion es visible desde la pagina que lo incluye ?

Bueno esas son algunas de mis dudas

Gracias

Elvio






"Miguel Gonzalez" wrote:


Hola Elvio.

Tal como expone el fabricante, Microsoft:

copio
Use ADO Like an Apartment Model

[...] Don't cache an instance of an ADO object, such as a Connection,
globally and invoke methods on it concurrently from multiple threads. If
each client request in your application model invokes the
Connection.Execute method on a globally cached Connection object on the
middle tier, your application will not scale. This is because of
synchronization in the Connection.Execute method.

You will get much better throughput by using an application model where
each client request creates a new instance of a Connection object, calls
Connection.Open and then Connection.Execute, and releases the Connection
object on the middle tier. Each request does have the additional overhead
of creating a new instance of a Connection object and obtaining a
connection from the connection pool. However, because your
Connection.Execute call isn't synchronized, the throughput is much better.

ASP Considerations

Don't cache ADO objects in Global.asa. See "Use ADO Like an Apartment
Model" earlier in this document.
fin copiado

Mà¡s recomendaciones (muy àºtiles) en:

http://msdn.microsoft.com/library/d...ovperf.asp

Si necesitas utilizar la misma conexión en varias pà¡ginas, lo mà¡s
recomendable es que la situes en un archivo aparte y lo incluyas en las
pà¡ginas mediante la directiva "include":

#include file="abreconexion.asp"

:-)

Saludos!
Miguel



Elvio wrote:

Hola amigos, tengo el problema que he desarrolado un sitio en ASP y
utilizando SQL server como eran varias paginas que necesitaban conectarse
puse el objeto conection en una variable de session mediante la
instruccion object del global asa.
En cada pagina abro y cierro la conexion, todo bien hasta ahi pero el
problema es que al parecer en algun momento las paginas generan un
bloqueo en la bd no se por que.
Es recomendable poner la coneccion en session ?, este problema se puede
deber a que me olvide de cerrar la conexion en alguna pagina ?.
Que solucion seria la adecuada, ademas el servidor sql no es el mismo que
el servidor web es mas esta muy alejado fisicamente..

Espero que puedan ayudarme Gracias...



Respuesta Responder a este mensaje
#5 Miguel Gonzalez
13/11/2004 - 14:46 | Informe spam
Buena precisión, Sashka!

:-)

Saludos!
Miguel

Sashka wrote:
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Hay que tener mucho cuidado con éste tema
Suele interpretarse como que el include va a abrir la conección de todas
manerasy esto puede ser muy peligroso
Aca tienes un ejemplo de cómo podría ser éste include y cual es la forma
correcta de usarlo
http://www.asp-php.co.uk/en/asp-php...ctions.php

Sashka
MS MVP Access
MCP ASP.Net

"Miguel Gonzalez" escribió en el mensaje
news:OvJei$
Hola Elvio.

Obviamente, cabe tener también un archivo "cierre.asp", más o menos así:

<%
m_conexion.Close
Set m_conexion = Nothing
%>

... en el que cierres y "destruyas" todas las conexiones y objetos abiertos
en la página de apertura.

Saludos!
Miguel

e incluirlo también al final delas páginas ASP:

Elvio wrote:

Gracias...
Pero si pongo ese archivo en cada pagina asp que necesite, entonces
tendria que poner en ese archivo algo como...

Set m_conexion = Server.CreateObject("ADODB.CONECCTION")

con lo cual por cada pagina crearia una nueva conexion, y despues al final
tendria que destruir la conexion...

Entonces no retardaria el rendimiento tener que conectarse caada ves ?
ese objeto m_conexion es visible desde la pagina que lo incluye ?

Bueno esas son algunas de mis dudas

Gracias

Elvio






"Miguel Gonzalez" wrote:



Hola Elvio.

Tal como expone el fabricante, Microsoft:

copio
Use ADO Like an Apartment Model

[...] Don't cache an instance of an ADO object, such as a Connection,
globally and invoke methods on it concurrently from multiple threads. If
each client request in your application model invokes the
Connection.Execute method on a globally cached Connection object on the
middle tier, your application will not scale. This is because of
synchronization in the Connection.Execute method.

You will get much better throughput by using an application model where
each client request creates a new instance of a Connection object, calls
Connection.Open and then Connection.Execute, and releases the Connection
object on the middle tier. Each request does have the additional overhead
of creating a new instance of a Connection object and obtaining a
connection from the connection pool. However, because your
Connection.Execute call isn't synchronized, the throughput is much better.

ASP Considerations

Don't cache ADO objects in Global.asa. See "Use ADO Like an Apartment
Model" earlier in this document.
fin copiado

Mà¡s recomendaciones (muy àºtiles) en:

http://msdn.microsoft.com/library/d...ovperf.asp

Si necesitas utilizar la misma conexión en varias pà¡ginas, lo mà¡s
recomendable es que la situes en un archivo aparte y lo incluyas en las
pà¡ginas mediante la directiva "include":

#include file="abreconexion.asp"

:-)

Saludos!
Miguel



Elvio wrote:


Hola amigos, tengo el problema que he desarrolado un sitio en ASP y
utilizando SQL server como eran varias paginas que necesitaban conectarse
puse el objeto conection en una variable de session mediante la
instruccion object del global asa.
En cada pagina abro y cierro la conexion, todo bien hasta ahi pero el
problema es que al parecer en algun momento las paginas generan un
bloqueo en la bd no se por que.
Es recomendable poner la coneccion en session ?, este problema se puede
deber a que me olvide de cerrar la conexion en alguna pagina ?.
Que solucion seria la adecuada, ademas el servidor sql no es el mismo que
el servidor web es mas esta muy alejado fisicamente..

Espero que puedan ayudarme Gracias...









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida