Problema concurrencias

09/11/2005 - 11:00 por JorTriFa | Informe spam
Hola a todos

Hace tiempo hice una aplicacion en BVB para uso personal en la oficina que
atacaba una base datos SQL server, en principio era para usarlo en uno-dos
puestos, pero con el tiempo el numero de usuarios que lo utilizan es
bastante mayor, el problema es que ahora cuando lo utilizan varios usuarios
al mismo tiempo y uno de ellos hace una operacion (una transaccion) bloquea
al resto hasta que se acaba la transacion.

Se que sin ver el codigo y todo eso es dificil, pero a alguien se le ocurre
como podria optimizarlo tocando el menor codigo posible (indices,
bloqueos...?)utilizo para todo lo que puedo procedimientos
almacenados

Algun consejillo?

Preguntas similare

Leer las respuestas

#1 jfmorales
09/11/2005 - 13:19 | Informe spam
Hola, viejo yo tuve el mismo problema, tengo una aplicacion con 52
usuarios y cuando uno de ellos hace alguna transaccion (begin tran - commit
tran) , los demas ususario deben esperar, entonces solo con la instruccion
SELECT se puede utilizar el comando WITH (NO LOCK) esto me dio resultado en
las consultas, pero no se puede hacer nada cuando otro usuario necesita
hacer una transaccion , obligatoriamente se debe esperar a que termine la
primera transaccion para poder hacer la segunda transaccion


"JorTriFa" escribió en el mensaje
news:
Hola a todos

Hace tiempo hice una aplicacion en BVB para uso personal en la oficina que
atacaba una base datos SQL server, en principio era para usarlo en uno-dos
puestos, pero con el tiempo el numero de usuarios que lo utilizan es
bastante mayor, el problema es que ahora cuando lo utilizan varios


usuarios
al mismo tiempo y uno de ellos hace una operacion (una transaccion)


bloquea
al resto hasta que se acaba la transacion.

Se que sin ver el codigo y todo eso es dificil, pero a alguien se le


ocurre
como podria optimizarlo tocando el menor codigo posible (indices,
bloqueos...?)utilizo para todo lo que puedo procedimientos
almacenados

Algun consejillo?


Respuesta Responder a este mensaje
#2 Penta
09/11/2005 - 13:33 | Informe spam
Hola.
Solo indica como ejecutas la query. ( lo mas probable es que esa sea la
causa.)

Atte.
Penta.
Respuesta Responder a este mensaje
#3 Alejandro Mesa
09/11/2005 - 15:16 | Informe spam
jfmorales,

Deberiamos hablar tambien de las implicaciones que trae usar este "hint".
Cuando usamos "WITH (NO LOCK)" en una sentencia select, corremos el riesgo de
leer data que no ha sido salvada o "committed" por lo que la data leida puede
que no haya existido logicamente.

Los consejos a seguir son:

- Tratar de que las transacciones sean lo mas corta posible
- No usar transacciones que requieran la entrada (presionar una tecla para
continuar o algo parecido) de un usuario.
- Incluir en la transaccion solo lo necesario y usarlas solo cuando se va a
cambiar algo de la bd.
- Usar niveles de "isolation" que mas se ajusten a las necesidades del proceso


AMB

"jfmorales" wrote:

Hola, viejo yo tuve el mismo problema, tengo una aplicacion con 52
usuarios y cuando uno de ellos hace alguna transaccion (begin tran - commit
tran) , los demas ususario deben esperar, entonces solo con la instruccion
SELECT se puede utilizar el comando WITH (NO LOCK) esto me dio resultado en
las consultas, pero no se puede hacer nada cuando otro usuario necesita
hacer una transaccion , obligatoriamente se debe esperar a que termine la
primera transaccion para poder hacer la segunda transaccion


"JorTriFa" escribió en el mensaje
news:
> Hola a todos
>
> Hace tiempo hice una aplicacion en BVB para uso personal en la oficina que
> atacaba una base datos SQL server, en principio era para usarlo en uno-dos
> puestos, pero con el tiempo el numero de usuarios que lo utilizan es
> bastante mayor, el problema es que ahora cuando lo utilizan varios
usuarios
> al mismo tiempo y uno de ellos hace una operacion (una transaccion)
bloquea
> al resto hasta que se acaba la transacion.
>
> Se que sin ver el codigo y todo eso es dificil, pero a alguien se le
ocurre
> como podria optimizarlo tocando el menor codigo posible (indices,
> bloqueos...?)utilizo para todo lo que puedo procedimientos
> almacenados
>
> Algun consejillo?
>
>



Respuesta Responder a este mensaje
#4 Miguel Egea
10/11/2005 - 20:47 | Informe spam
Sobre el tema del isolation level escribí hace mucho tiempo algo para
technet

http://www.microsoft.com/spain/tech...vaisl.mspx


Miguel Egea
Visita mi web http://www.portalsql.com
SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com
"Solid Quality Learning is the trusted global provider of advanced education
and solutions for the entire Microsoft database platform"

"Alejandro Mesa" wrote in message
news:
jfmorales,

Deberiamos hablar tambien de las implicaciones que trae usar este "hint".
Cuando usamos "WITH (NO LOCK)" en una sentencia select, corremos el riesgo
de
leer data que no ha sido salvada o "committed" por lo que la data leida
puede
que no haya existido logicamente.

Los consejos a seguir son:

- Tratar de que las transacciones sean lo mas corta posible
- No usar transacciones que requieran la entrada (presionar una tecla para
continuar o algo parecido) de un usuario.
- Incluir en la transaccion solo lo necesario y usarlas solo cuando se va
a
cambiar algo de la bd.
- Usar niveles de "isolation" que mas se ajusten a las necesidades del
proceso


AMB

"jfmorales" wrote:

Hola, viejo yo tuve el mismo problema, tengo una aplicacion con 52
usuarios y cuando uno de ellos hace alguna transaccion (begin tran -
commit
tran) , los demas ususario deben esperar, entonces solo con la
instruccion
SELECT se puede utilizar el comando WITH (NO LOCK) esto me dio resultado
en
las consultas, pero no se puede hacer nada cuando otro usuario necesita
hacer una transaccion , obligatoriamente se debe esperar a que termine
la
primera transaccion para poder hacer la segunda transaccion


"JorTriFa" escribió en el mensaje
news:
> Hola a todos
>
> Hace tiempo hice una aplicacion en BVB para uso personal en la oficina
> que
> atacaba una base datos SQL server, en principio era para usarlo en
> uno-dos
> puestos, pero con el tiempo el numero de usuarios que lo utilizan es
> bastante mayor, el problema es que ahora cuando lo utilizan varios
usuarios
> al mismo tiempo y uno de ellos hace una operacion (una transaccion)
bloquea
> al resto hasta que se acaba la transacion.
>
> Se que sin ver el codigo y todo eso es dificil, pero a alguien se le
ocurre
> como podria optimizarlo tocando el menor codigo posible (indices,
> bloqueos...?)utilizo para todo lo que puedo procedimientos
> almacenados
>
> Algun consejillo?
>
>



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