FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
ADO lento
Hola a todos
Estoy atacando una Base de Datos en SQL Server y me conecto mediante ADO Realizo una consulta que me devuelve la oficina, cuenta y entidad y yo actualizo el digito de control que venia en blanco. El programa funciona y todo muy bonito Pero es exageradamente lento. Lo he ejecutado directamente en el servidor y el resultado es el mismo. He probado a solo seleccionar 10 registros y tambien va muy lento y el codigo tan solo hace lo siguiente Ahh, lo que se llama Tabla realmente es un AdoQuery, a ver si seleccionando solo los registros que tiene entidad funcionaba Y la funcion Cero, añade ceros a la izquierda para la longitud dada
Es cuestiones del ADO y me tengo que resignar o hay algun parametro que se pueda cambiar? O alguna otra forma de atacar al SQL que sea mas rapida, ya sea ODBC con el DBE Un Saludo |
#2
|
||||
|
||||
Hola.
¿ Estás seguro que el problema són los componentes ADO ?. Dices que tienes el mismo resultado ejecutandolo directamente en el Servidor ¿ cierto ?, en ese caso no tiene nada que ver con los componentes de acceso utilizados desde Delphi. Revisa los triggers que pueda haber en esa tabla, los índices que utilizas en la consulta, etc. ... NOTA: ¿ Exactamente cuanto tiempo tarda el proceso ?, ¿ y para cuantos registros ? Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
|||
|
|||
La verdad es que no se cual puede ser el problema.
Pense que podia ser la red, por eso lo ejecute en el servidor directamente Luego pense que el problema podria ser que son muchos registros por eso probe con tan solo 10 Y como el codigo no tiene 'nada' pienso que el problema puede ser ese, pero estoy un pcoo perdido Uso los componentes ADO que vienen con Delphi 6 La tabla no tiene ningun tipo de triggers, indice, ni nada de nada Son aproximadamente 800.000 registros y tarda en actualizar cada registro aproximadamente medio segundo |
#4
|
||||
|
||||
Hola,
detalle importante: Cuando dices que lo ejecutas directamente en el servidor... ejecutas tu aplicación desde el servidor, no? Yo creo que lo mejor sería que intentases algún update directamente desde el Query Analyzer a ver qué te hace. Otra cosa interesante sería que esta actualización la realizaras mediante un Stored Procedure para descartar que se trate de los componentes ADO. Temas relacionados con ADO: Qué tipo de cursor utilizas? Has Probado a utilizar BatchUpdates? Temas de servidor: Esta tabla está indexada correctamente? Has verificado el tamaño de la BD? Tienes algun indice clustered? Has utilizado algún plan de mantenimiento para reducir el tamaño de la BD?? Suerte! |
#5
|
||||
|
||||
Cita:
En cuanto a propiedades de ADO haz pruebas con: * CursorLocation = clServer. * CursorType = ctOpenForwardOnly (sube rendimiento vbastante si no vas a realizar recorridos hacia adelante y atrás). Creo que si el recorrido lo haces por un índice ganarás bastante. ¿Tienes controles DataAware ligados a esos campos? No creo, pero si es así desactivalos (DisableControls) y al acabar los vuelves a activar.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
En efecto, he indexado la tabla y se han actualizado los registros a una velocidad medianamente normal y rapida.
Antes de hacerlo tambien probe a ejecturalo desde el servidor mediante: CursorLocation = clServer. y aalgo gane en velocidad, pero seguia siendo el proceso muy lento En un principio pense que podria ser el ADO, porque creo recordar haber leido que cuando abres una tabla por ADO, te carga los datos en memoria Muchas gracias a todos y un saludo |
#7
|
||||
|
||||
Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
|