Tengo una aplicación que consiste en llenar un datawindow y grabarla en una base de datos sql, la aplicación funciona muy bien hasta 4 usuarios, ¿cuándo 5 o más usuarios presionan el botón de grabación al mismo tiempo la aplicación se vuelve lenta para los usuario 4 y 5 y se "cuelga para el resto de usuarios" como puedo resolver probela?.
1 Respuesta
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
Claro y no veo el problema. Lo que tienes que hacer es incluir en tu aplicación los comandos que refieren a una operación transaccional. Esto significa que debes utilizar los comandos COMMIT y ROLLBACK. Recuerda que las operaciones con una base de datos transaccional son utilizadas con la finalidad de mantener datos de más de una tabla, la idea principal es que si todo finaliza exitosamente la transacción u operación, debe acentarse con éxito, sin embargo si algo sucede en el camino, todas la transacción deberá ser rechazada. El problema que sucede con el sistema lento, esta relacionado por la falta de este tipo de técnica, pues estoy especulando que cada vez que el un usuario modifica o graba algún dato en cualquier tabla común, esta es bloqueada temporalmente para mantener la integridad referencial. Sin embargo si te inclinas por la técnica transaccional, esto debería ser solucionado. Ahora bien, puede que aun utilizando esta técnica tengas bloqueos por parte de los usuarios. Por ejemplo La instrucción ROLLBACK es utilizada para rechazar una transacción, por lo que muchas veces algunos colegas cometen el error de enviar un mensaje al usuario por medio de la pantalla, y este mensaje debe ser cerrado por el propio usuario, y luego hacen o ejecutan el rollback, esto significa que para rechazar la transacción depende que el usuario haga click en el botón de continuar, pues sino, las tablas estarán bloqueadas hasta ese entonces, y por consiguiente el resto de la población no podrá trabajar, o bien el sistema se cuelga. Si ya estas utilizando la técnica de las operaciones transaccionales, entonces revisa el pagineo de indices que tienes estipulados por tabla, muchas veces el pagineo es muy grande y los datos son muy pequeños, esto significa que una tabla puede contener toda su información en una simple página de datos, por lo que cada vez que un registro es modificado la base de datos puede que bloquee temporalmente la página, y hasta que la transacción no finaliza la página no es desbloqueada, esto se soluciona simplemente colocando el numero de registros por página en 1, Si esta técnica la aplicas a tablas muy grandes, los indices serán aun más grandes, por lo que si lo implementaras, te recomiendo primero medir tu espacio disponible de crecimiento. Por ultimo, sqlserver 7 tiene un sistema de bloqueos automáticos los cuales hay que desconectar, pues puede llegar un momento que por una simple consulta, sqlserver 7 asuma que está intentando modificar la tabla, y hace un bloqueo automático a nivel de estructura, entonces aquí nadie puede ingresar ni grabar, ni leer, y el caos esta servido. Para finalizar Primero revisa tu técnica de grabación de datos. Segundo revisa los tamaños de información necesaria y si merece la pena hacer páginas de un registro. Y por ultimo. Si estas utilizando sqlserver 7, consulta con un experto de esta version, en como debes desconectar o bajar las prioridades de bloqueos automáticos de la base de datos.