Ver Mensaje Individual
  #6 (permalink)  
Antiguo 04/09/2009, 07:58
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: conexiones a bd

Overhead se considera, generalmente, como la combinación de excesos de tiempo, memoria, ancho de banda o cualquier otro recurso de computación necesario para obtener un resultado determinado. Estos tiempos pueden ser directos (los producidos por los procesos directamente implicados), o indirectos (producidos por procesos, acciones o características no directamente vinculadas al proceso específico).
En el case del overehad en este tipo de trabajos, estos pueden darse:
- Excesos de tiempo en el establecimiento de enlaces TCP/IP, tráfico en la red o usuarios conectados.
- Concurrencia de solicitudes o procesos.
- baja optimización de hardware o software, o bien su obsolecencia.
- Recursos limitados en el servidor, las computadoras implicadas o limitaciones de la propia LAN.
- Priorización de comunicaciones por jerarquía de usarios.
- Otros (muchos) m0tivos.

Uno de los motivos por los que se recomienda enfáticamente no crear constantemente conexiones, es debido a una particularidad de Windows: Windows no libera inmediatamente los recursos de conexión luego de ser usados. En lugar de eso pasa un largo tiempo en segundos o minutos en que la conexión cerrada en un enlace al servidor de BBDD todavía figura en el pool de conexiones como "usado". Esto hace que en un momento dado, si existe una ráfaga de conexiones demasiado elevada que se abren y cierran, el pool se encuentre lleno, siendo imposible realizar una solicitud por una conexión nueva, ya que no la admite por saturación.
Esto es un defecto de construcción del propio Windows y es salvable a través de ciertas técnicas.

La concurrencia se produce cuando dos o más usuarios intentan acceder al mismo recurso al mismo tiempo. El sistema sólo dejará que uno de ellos acceda, dejando al resto en espera en una cola.
En las bases de datos esto se da cuando dos o más usuarios quieren acceder a la misma tabla. No es posible admitir que los dos escriban o modifiquen la misma tabla al mismo tiempo, por lo que esto se debe controlar a través de transacciones o bien de bloqueos específicos.
Por otro lado, si uno accede para leer y otro para escribir, el primero puede estar leyendo datos que inmediatamente ya no existen o no son los mismos. Si esto sucede entre dos conexiones del mismo usuario y la primera es lectura y la segunda escritura, puede darse el caso de que en la segunda se intente escribir un registro que ha sido borrado por otro usuario entre las dos conexiones, puesto que realizó la acción entre ellas.
¿Se entiende?
Por ello es mejor realizar toda la tarea en una sola conexión, bloqueando las tablas para escritura cuando se está por realizar alguna modificación.

Hay mucho material en la web sobre estos temas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)