Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Ikku en 11 Abril 2012, 12:31 pm



Título: Acceso exclusivo a BBDD
Publicado por: Ikku en 11 Abril 2012, 12:31 pm
Hola,

Recientemente en mi trabajo están teniendo problemas a la hora de acceder a una base de datos, según ven dos aplicaciones acceden al mismo tiempo con consultas muy pesadas y se está planteando si una puede bloquear a la otra.

La duda que me surge es, se supone que cada aplicación genera una transacción no? y cuando acabe esta se incluye en la base de datos. Si yo la aplicación A hace una transacción de 9000 updates y la segunda también hace 5000 updates sobre los mismos elementos de esa tabla. Tiene que esperar a que termine la primera transacción para que se pueda incluir la segunda?

En ese caso, la transacción queda incluida en la BBDD y el programa sigue su ejecución sin esperar o tiene que esperar confirmación de que ha terminado la query para poder continuar?

Gracias
Un saludo


Título: Re: Acceso exclusivo a BBDD
Publicado por: lord_Sirikon en 16 Abril 2012, 01:35 am
Creo que...

Las transacciones son tratadas completamente de una en una cuando afectan a la misma tabla.

Por ejemplo: Hacemos desde la aplicación A una orden en la que borra una línea de la tabla, mientras que desde la aplicación B estamos ordenando de que modifique un dato en ésa línea.

Teniendo en cuenta que la base de datos primero comprueba si la operación se puede realizar y si se puede realizar la realiza...

A enviará la orden, y después de ser validada y antes de ser escrita, llega la orden de la aplicación B, la cual, como todavía no se ha borrado la línea, dará por válida y dará luz verde a ser escrita, justo después de eso la orden A elimina esa línea y posteriormente B intenta modificar esta línea, pero ya no existe por lo que daría un error grave y se petaría la base de datos.

Es por eso que las transacciones al llegar se comprueban si están bien escritas, si se pueden hacer, y después de ser realizadas y avisar al cliente de que se han realizado correctamente, no procesa la siguiente transacción.

En resumen:
1.- Sí tiene que esperar a terminar la primera transacción para incluir la segunda
2.- El programa espera la confirmación de que es query ha sido finalizada para poder procesar la siguiente

Esto que he dicho aquí podría no ser del todo cierto, espero haber ayudado en vez de haberlo liado más.

PD: Si el ordenador que lleva la base de datos en la empresa no es muy potente o no es especializado para servidores, hay que tener en cuenta que si son realmente 9000 updates de una vez pues no es algo ligero de manejar para un ordenador que no esté preparado así que las relentizaciones serían normales.

Saludos!