Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   Lento al actualizar datos (update) en registros de BD postgre (https://www.clubdelphi.com/foros/showthread.php?t=75167)

thelibmx 03-08-2011 00:15:48

Lento al actualizar datos (update) en registros de BD postgre
 
Hola tengo una base de datos en postgre con una tabla que contiene 9000 registros, en esta base se conectan 10 usuarios simultáneamente y están actualizando información en registros diferentes, los datos si se guardan pero siento que es un poco lento, hablo aproximadamente de 5 segundos por cada dato que se actualiza a veces mas o menos, uso delphi 2010, mi conexión la hice la primera ves con componentes zeos y solo ocupe un ZConnection y un ZQuery pero al ver lo lento que era lo cambie por los componentes que vienen en delphi en BDE entonces puse un tdatabase y un tquery y mi conexion por medio de un odbc, pero aun asi sigue super lenta, no se si sea la manera correcta de hacerlo pues por lo general había trabajado con un solo usuario y las actualizaciones eran rápidas en otros programas diferentes a este,pero no se si cambie si varios usuarios van hacer uso de la misma base o conexión practicamente todo mi codigo es esto:
Código Delphi [-]

Formquerys.Querybase.Close;
FormQuerys.Querybase.SQL.Clear;
FormQuerys.Querybase.SQL.Add('update tabla1 set campoa1='''+edit1.text+''' where folioe='''+EditfOLIO.text+''' ');
FormQuerys.Querybase.ExecSQL;
y sin embargo se tarda aproximadamente 5 segundos, no se si con un tdatabase y un tquery sea lo único necesario que necesite para tener una buena conexión o si el problema este en la base de datos, por cierto no se si también afecte o tenga que ver, pero a la ves que actualizo un dato también hago un insert en otra tabla en la misma base de datos, aparentemente el insert si es rapido (menos de un segundo)..

Cualquier comentario o sugerencia que me pueda ayudar o dar una pista se los agradeceré ..

:confused:

movorack 03-08-2011 03:25:27

Hola,

1. No! nunca! jamas! ni en sueños! ni loco! recomendaria pasar de Zeos a BDE.
2. debes revisar si la tabla tiene triggers a ver si eso está haciendo lenta la actualización
3. Revisaria la configuración de PostgreSQL en el servidor... asignación de memoria nucleo en que trabaja, carga de red... cosas así

Estamos en contacto.

thelibmx 03-08-2011 04:37:13

Gracias movorack por tu respuesta

1.-Me intriga tu respuesta no.1 No! nunca! jamas! ni en sueños! ni loco! recomendaria pasar de Zeos a BDE.
jaja tan tragico es?.. la verdad que he leido que ya no es bueno utilizar el bde de delphi y por lo general
hago el intento por ya no utilizarlo pero todo parece apuntar que es lo que se seguira utilizando
he comentado en los foros y a ciencia cierta no me dan una respuesta concreta de por que ya no
y me sorprende por que aun en delphi 2010 lo siguen utilizando y los componentes zeos pues los he utilizado
antes y no he tenido problema pero estos ultimos que utilizo son todavia de prueba por que no hay zeos para delphi2010 ya liberados
entonces por eso pense que tal ves ahi pudiera estar el problema, aparte de que parece ser que son un poco mas lentos que los componentes
que delphi trae pero para mi en teoria casi tardan lo mismo..la verdad que no he hecho pruebas tan especificas como algunos compañeros del club
2.- la tabla no contiene triggers solo algunos constrains simples como llaves principales o campos autonumericos
3.- yo estoy casi seguro que es la red o algo por parte del servidor pero no tengo manera de medir el trafico de la red o el ancho de
banda que tengo disponible, ahora por otro lado la base de datos que tengo en postgre tiene su origen en un DBF que por medio de un programa
lo trasformo a sql, al montar la tabla en postgre solo asigno una llave primaria y eso es todo, cres que se me paso algo mas?..

newtron 03-08-2011 09:43:02

Hola.

Igual digo una tontería pero ¿tienes creado un índice para el campo "folioe"?

Saludos

Neftali [Germán.Estévez] 03-08-2011 11:47:04

La verdad es que es un tiempo "excesivo".

Cita:

Empezado por thelibmx (Mensaje 408288)
3.- yo estoy casi seguro que es la red o algo por parte del servidor pero no tengo manera de medir el trafico de la red o el ancho de banda que tengo disponible, ahora por otro lado la base de datos que tengo en postgre tiene su origen en un DBF que por medio de un programa lo trasformo a sql, al montar la tabla en postgre solo asigno una llave primaria y eso es todo, cres que se me paso algo mas?..

Se trataría de ver qué sentencia es exactamente y lanzarla desde un programa externo a Delphi.
No se si tienes alguna herramienta de administración. Con eso descartas que sea problemas de los componentes de conexión.
Si desde un programa externo tarda también mucho ya sabes que no tiene que ver con Zeos.


Cita:

Empezado por newtron (Mensaje 408291)
Igual digo una tontería pero ¿tienes creado un índice para el campo "folioe"?

Yo también lo he pensado, pero con 9000 registros, aunque no tuviera índices, es demasiado tiempo. De todas formas, sea de una manera u otra el índice ayudará (si no lo tienes).

Cita:

Empezado por movorack (Mensaje 408285)
...No recomendaria pasar de Zeos a BDE.

+1

thelibmx 04-08-2011 06:14:55

Gracias por responder, después de hacer revisiones entre dos cabezas <con ayuda de otro programador> vimos que lo que hacia lento el programa no era el query ni los componentes, se me paso decir que también cargaba 4 imágenes a la vez de un servidor, en el cual tengo aproximadamente 140,000 imágenes, entonces prácticamente lo que tardaba era la carga y búsqueda de las imágenes y no el query, ya que al des-habilitar las imágenes los querys funcionaron y no tardaron ni un segundo, las imagenes las mandaba llamar directamente desde su ruta sin embargo el programador hizo una funcion y las imagenes se pasaron tipo web por http y aparentemente el programa ya quedo bien. las imagenes aunque son las mismas no tardan ni un segundo en cargar, por lo que el programa ya funciona muy bien, mi tabla no la tengo indexada pero en si ya como trabaja el programa y la velocidad que tiene creo que ya no sera necesario, hablo aproximadamente de medio segundo por transaccion, aparte de que no hago insert ni deletes en esa tabla en especifico.

Les agradezco mucho su ayuda y atención movorack, newtron , Neftali y disculpen que no haya mencionado las imágenes, tal ves hubiéramos encontrado la solución mas pronto ;)

Gracias totales..

jejo1984 16-01-2012 15:39:49

sera mejor que crees un procedimiento almacenado

Casimiro Notevi 16-01-2012 15:53:37

Por favor, jejo1984, fíjate que son hilos antiguos los que estás contestando. Si lo vas a resucitar, al menos, ofrece una respuesta completa y detallada. Gracias.

jejo1984 16-01-2012 17:30:36

Vamos Casimiro se supune que es un foro el tema aún no esta cerrado por que no dice o describes que este tema ya esta cerrado

Casimiro Notevi 16-01-2012 17:37:37

Nadie a dicho que no puedas contestar este o cualquier otro, tan sólo he aconsejado que ya que los contestas, que lo hagas con más "fundamento" :)
En caso contrario, no estás aportando nada.


La franja horaria es GMT +2. Ahora son las 11:54:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi