Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Conexion a base de datos
Autor Mensaje
shadow_mx Sin conexión
Presidente del CEIT
Lobo
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.090
Agradecimientos dados: 8
Agradecimientos: 8 en 3 posts
Registro en: Nov 2010
Facebook
Mensaje: #1
Conexion a base de datos
Buenas gente, aca estoy rompiendome los cuernos por una aplicacion que da el siguiente error:

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

estuve leyendo y hablando con una DBA aca y me dice que puede ser una mala configuracion del IIS...

Yo creo que se debe a esta clase de que administra las conexiones a la base (Oracle)

Spoiler: Mostrar



using System;
using System.Data;
using System.Data.OracleClient;
using System.Configuration;
using System.Web;
using System.Web.SessionState;

/// <summary>
/// Clase que administra la conexion con la base de datos
/// </summary>
public class clsConexion
{
protected OracleConnection db;
protected OracleTransaction tr;

#region Properties
public OracleConnection DBConnection
{
get
{
return db;
}
}

public OracleTransaction DBTransaction
{
get
{
return tr;
}
}
#endregion

#region Contructor
public clsConexion()
{
tr = null;
conectarBD();
}
#endregion

#region Metodos de Instancia
private void conectarBD()
{
string strConnStr;

//Guardo en strConnStr el connection string
strConnStr = Globals.DBConection;
// Remplazo [Usuario] y [Passwd] con lo que trae de SSO
strConnStr = strConnStr.Replace("[Usuario]", Globals.DBUser);
strConnStr = strConnStr.Replace("[Passwd]", Globals.PWDDBUser);

db = new OracleConnection(strConnStr);
db.Open();
}

public void iniciarTransaccion()
{
tr = db.BeginTransaction();
}

public void finalizarTransaccion()
{
tr.Commit();
tr = null;
}

public void errorTransaccion()
{
tr.Rollback();
tr = null;
}
#endregion
}





Para mi el problema esta en que nunca cierra la conexion, en teoria usa una durante toda la sesion del usuario, lo que pienso yo es que como no se cierra, el usuario sale, entra de nuevo (nueva conexion), etc, se llena el pool y muere la aplicacion....

Tengo razon o me estoy mandando cualquiera??


PD: Creo que me mande un re testamento =P

Leandro.


... Y mori queriendo ser libre, encontrar mi lado salvaje!!,
Ponerle alas a mi destino, romper los dientes de este engranaje! ♪♫
02-03-2012 17:13
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza Sin conexión
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.356
Agradecimientos dados: 900
Agradecimientos: 887 en 356 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #2
RE: Conexion a base de datos
Te da el timeout siempre en el mismo lugar, o en distintos lugares tras determinado tiempo de uso de la app ?

[Imagen: v34BEFt.gif]
02-03-2012 20:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
shadow_mx Sin conexión
Presidente del CEIT
Lobo
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.090
Agradecimientos dados: 8
Agradecimientos: 8 en 3 posts
Registro en: Nov 2010
Facebook
Mensaje: #3
RE: Conexion a base de datos
En cualquier parte de la pagina, despues de usar un rato.

Leandro.


... Y mori queriendo ser libre, encontrar mi lado salvaje!!,
Ponerle alas a mi destino, romper los dientes de este engranaje! ♪♫
03-03-2012 00:50
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza Sin conexión
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.356
Agradecimientos dados: 900
Agradecimientos: 887 en 356 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #4
RE: Conexion a base de datos
proba en cerrar las conexiones. Para mi es posible porque se satura la cantidad de conexiones maximas que podes abrir (si mal no interpreto segun me decis, abris una conexion cada vez)


asique probá
tambien puedo estar mandando fruta =P

[Imagen: v34BEFt.gif]
03-03-2012 01:17
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Imakuni Sin conexión
Presidente del CEIT
Boxes tastes like mush
********

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 7.021
Agradecimientos dados: 124
Agradecimientos: 129 en 85 posts
Registro en: Jul 2008
Mensaje: #5
RE: Conexion a base de datos
Existe la buena costumbre de cerar siempre las conexiones. .NET al parecer las cierra automaticamente en algunos casos en particular, pero no necesariamente lo hace cuando vos queres.

Googleando encontré esto:
http://www.compartir-tecnologias.es/resp...87552.html

En programacion web, existe la costumbre de utilizar una sesión por request, que se crea al recibirla, y se cierra cuando ya no la necesitas mas. De esta forma, te evitas este tipo de quilombos.


También puede ser que la conexión no se la banque.... pero me parecería rarisimo. Hace unos meses laburé con un proyecto que recibía alrededor de 1000 requests por momento (no por segundo, sino que siempre que te fijabas, sin importar el intervalo de tiempo, habia alrededor de 1000 requests). El producto lo teníamos dividido en 3 maquinas, y a cada maquina con 6 o 7 conexiones a la BD le sobraba.

(o al menos, ese era el numero que nos tiraba el Toad for oracle =P)
03-03-2012 01:22
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
shadow_mx Sin conexión
Presidente del CEIT
Lobo
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.090
Agradecimientos dados: 8
Agradecimientos: 8 en 3 posts
Registro en: Nov 2010
Facebook
Mensaje: #6
RE: Conexion a base de datos
Hoy antes de irme revise algo que me parecio que hace que se conecte varias veces a la base en un mismo request, usando conexiones distintas. el lunes lo voy a tener que probar bien.

Es muy raro, yo normamente en otros proyectos cada vez que me conectaba a la base, usaba la conexion y la cerraba.

Leandro.


... Y mori queriendo ser libre, encontrar mi lado salvaje!!,
Ponerle alas a mi destino, romper los dientes de este engranaje! ♪♫
(Este mensaje fue modificado por última vez en: 03-03-2012 01:26 por shadow_mx.)
03-03-2012 01:25
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
shadow_mx Sin conexión
Presidente del CEIT
Lobo
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.090
Agradecimientos dados: 8
Agradecimientos: 8 en 3 posts
Registro en: Nov 2010
Facebook
Mensaje: #7
RE: Conexion a base de datos
Buenas, despues de revisar todo y pelearme con un compañero =P encontre que siempre usaba la misma instancia de la clase conexion, pasada como ref (cosa que no me gusto un carajo, pero no puedo hacer un refactor tan grande porque hay otros quilombos ahora.). En una clase que cargaba datos encontre que en una propiedad se cargaban datos de la base, usando una instancia distinta de la clase cada vez que se llemaba a la propiedad...
Asique corregi eso y desde ayer no volvieron a reportar el error.





PD: La carga en la propiedad la hice yo wall

Leandro.


... Y mori queriendo ser libre, encontrar mi lado salvaje!!,
Ponerle alas a mi destino, romper los dientes de este engranaje! ♪♫
06-03-2012 14:10
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)