Bloqueos en SQL Server 7.0

12/08/2003 - 21:14 por EDY | Informe spam
Qué tal !!

Tengo un problema con mi aplicación ASP, COM+ y SQL
Server, es una aplicación Punto de Venta y su medio de
comunicación es Internet, las sucursales accesan al
servidor por medio de la línea telefónica.

Lo que pasa es que tengo una tabla "Inventarios" y en ella
como se imaginan contiene información acerca de las
existencia de los productos y por lo tanto cada vez que se
realiza una venta o algún proceso que afecte el
inventario, esta tabla es afectada. Resulta ser que cuando
se realizan Ajustes al inventario a diferentes sucursales
el sistema se vuelve notoriamente más lento al momento de
generar ventas, he estado revisando mi código(DLL de VB y
COM+) y veo que por cada producto que se le va a modificar
su existencia abre una conexión a la BD, modifica la
existencia del producto y actualiza el registro de otra
tabla que guarda el producto, la fecha de ajuste, la
cantidad ajustada y la cantidad anterior.

Todo eso por cada partida.

Comunmente se realizan ajustes(inventarios) al rededor de
300 productos y se van realizando en bloques de 50pzas.

Mi problema es el rendimiento en mi server y por supuesto
mi conexión(que es la línea telefónica), sin embargo en
nuestro corporativo se tiene un enlace dedicado a 128,
además de que como nuestra aplicación es en tres capas, el
procesamiento de los datos se realiza en nuestro server.

Cuando realizamos consultas a las existencia mientras se
realizan inventarios, notamos que el sistema se vuelve
lento. Ahora bien, estoy suponiendo que como la
tabla "Inventarios" es una tabla en constante operación,
sufre de muchos bloqueos por parte del server y eso hace
que el rendimiento se deteriore.


Ustedes cómo ven, según yo, es el bloqueo que sufre la
Tabla "Inventarios" por tanta concurrencia, es cierto que
mis conexiones son lentas, pero el procesamiento lo
realiza el server no mi aplicación cliente.

Espero me puedan dar su comentario.

SALUDOS !!!

EDY

Preguntas similare

Leer las respuestas

#1 Javier Loria\(MVP\)
12/08/2003 - 22:18 | Informe spam
Hola Edy:
Dependiendo de como este escrito el codigo puede ser el problema:
a) Si el codigo esta corriendo en el IIS el unico que se conecta es el
servidor IIS ya sea con su cuenta de usuario de Windows o de SQL no deberia
dar ningun problema. La razon es que el OLE-DB y ODBC te ofrece "conexion
pooling" de manera que si usas la misma setencia de conexion (Tiene que ser
EXACTAMENTE igual). Si el IIS esta usando la cuenta de usuario entonces si
podria significar un problema.
b) Si lo anterior no es problema es muy posible que tengas una situacion
de bloqueos. Si estas usando ASP y COM que como tienes configurado el
bloqueo? (optimista o pesimista) y donde usas el cursor? (cliente o
servidor)
Una posiblidad es mover el codigo de actualizacion unicamente a un
Procedimiento para reducir al minimo el bloqueo.

Saludos,



Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

EDY escribio:
Mostrar la cita
#2 EDY
12/08/2003 - 22:41 | Informe spam
Hola Javier, gracias por tu tiempo.

Mira, yo no utilizo cursores, yo tengo un sp en el server
el cual realiza la actualización a las tablas. Este sp es
llamado desde un componente para cada producto
seleccionado.

La conexión a la BD se realiza con una misma cuenta.

SALUDOS !!



Mostrar la cita
el problema:
Mostrar la cita
se conecta es el
Mostrar la cita
de SQL no deberia
Mostrar la cita
ofrece "conexion
Mostrar la cita
conexion (Tiene que ser
Mostrar la cita
usuario entonces si
Mostrar la cita
tengas una situacion
Mostrar la cita
configurado el
Mostrar la cita
(cliente o
Mostrar la cita
unicamente a un
Mostrar la cita
ella
Mostrar la cita
se
Mostrar la cita
cuando
Mostrar la cita
sucursales
Mostrar la cita
de
Mostrar la cita
y
Mostrar la cita
modificar
Mostrar la cita
de
Mostrar la cita
supuesto
Mostrar la cita
el
Mostrar la cita
que
Mostrar la cita
#3 Javier Loria\(MVP\)
12/08/2003 - 23:57 | Informe spam
Hola Eddy:
Me alegra mucho que no utilices cursores, mucha gente que trabaja con
VB, Interdev y en general ADO no sabe que cuando construye sus recordsets y
los fija del lado del servidor, en realidad esta haciendo un cursor y eso
produce problemas de de desempeno muy serios.
Si quieres asegurarte que NO es un problema de bloqueos prueba
monitoreando los siguientes estadisticas en el Performance Monitor:
SQLServer:Locks-Average Wait Time y SQLServer:Locks- Locks Waits/sec. El
primero te da cuanto tiempo en promedio dura un bloqueo y el segundo cuantos
bloqueos tuvieron que esperar para realizarse (porque el recurso ya estaba
bloqueado).
En este caso ambos valores es deseable que sean el minimo (0 es perfecto
pero poco probable). Si estas en el rango de menos de 5 segundos (5000
milisegundo) y menos de una decena por segundo, yo buscaria en otro lado el
problema.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.\

EDY escribio:
Mostrar la cita
#4 Hernan Nieto
14/08/2003 - 17:42 | Informe spam
Javier:

Disculpa que me "adjunte" a este hilo, yo con Ado estoy utilizando
Recordset, y vos decis que esto afecta mucho el rendimiento de la
aplicacion, me podrias indicar que otras alternativas existen para el acceso
a datos, y cual es el rendimiento de las mismas?.

Gracias
#5 Javier Loria\(MVP\)
15/08/2003 - 03:39 | Informe spam
Hola Hernan:
Con mucho gusto.
ADO siempre usa cursores, los puedes configurar en el cliente que esta
bien, y los del servidor en cuyo caso hay tener mucho cuidado por el
impacto. No es que sean malos es que consumen importantisimos recursos en el
servidor.
La forma de configurarlos es muy sencilla, si se esta usando
directamente el objeto RecordSet, busca la propiedad CursorLocation. Si
tienes duda o si no tienes el codigo fuente o es mucho que revisar. Usa el
Profile, inicia una traza y capturas el evento de Cursor:Open para buscar
posibles culpables.
Las alternativas: decirlas es muy facil, construirlas no tanto. Usa
procedimientos almacenados, para Seleccionar, Insertar, Actualizar y Borrar.
Si quieres hacer mucho mas facil esto pasate a VB.NET, que tiene este
comportamiento y con un clic derecho y tres izquierdos configura casi todo.
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Hernan Nieto escribio:
Mostrar la cita
Ads by Google
Search Busqueda sugerida