PDA

Ver la Versión Completa : Duda de Perfomance con Zeos...


waly2k1
01-05-2008, 10:49:06
Vi varios hilos donde se aconseja utilizar Zeos con MySQL y de hecho lo estoy usando, funciona perfectamente sin 'grandes' cambios de una aplicación que usaba ADO. El tema en cuestión es que cuando quiero traer un maestro de artículos con 7300 registros aproximadamente se viene todo abajo, trabajando local y sin procesos previos, o sea:

SELECT CAMPO1, CAMPO2, CAMPO3... FROM TABLA ORDER BY ID_PRODUCTO
ID_PRODUCTO es la clave primaria. Es impresionante lo que tarda, ni hablar de que consume todos los recursos de la PC (cuando no se cuelga).

Es esto normal ?.
No son muchos registros. El problema es de Zeos ó MySQL ó ???
Las tablas son de tipo MyISAM y no InnoDB, con lo cual las consultas deberían ser mas 'óptimas'.

A alguien le pasó algo así ?
Bah nose que mas preguntar. Acepto todo tipo de sugerencias.
Saludos y muchas gracias de antemano!

duilioisola
01-05-2008, 11:12:11
Se me ocurre que el problema no sea cuando traes esta tabla maestro, sino una o varias tablas detalle que dependan de esta.

Mira que tienes en los métodos before/afteropen, before/afterscroll y las tablas que tengas unidas a esta por su DataSource.

(Puedes hacer la prueba de desabilitar estas tablas antes de abrir el maestro y luego volver a abrirlas.)

Casimiro Notevi
01-05-2008, 13:36:12
Y pregunto yo, sólo por curiosidad, ¿para qué sirve tener en pantalla una lista de más de 7000 clientes? :eek:
Yo los atiendo siempre de uno en uno.

MaMu
01-05-2008, 15:28:14
Vi varios hilos donde se aconseja utilizar Zeos con MySQL y de hecho lo estoy usando, funciona perfectamente sin 'grandes' cambios de una aplicación que usaba ADO. El tema en cuestión es que cuando quiero traer un maestro de artículos con 7300 registros aproximadamente se viene todo abajo, trabajando local y sin procesos previos, o sea:


Código SQL [-] (http://www.clubdelphi.com/foros/#)SELECT CAMPO1, CAMPO2, CAMPO3... FROM TABLA ORDER BY ID_PRODUCTO


ID_PRODUCTO es la clave primaria. Es impresionante lo que tarda, ni hablar de que consume todos los recursos de la PC (cuando no se cuelga).

Es esto normal ?.
No son muchos registros. El problema es de Zeos ó MySQL ó ???
Las tablas son de tipo MyISAM y no InnoDB, con lo cual las consultas deberían ser mas 'óptimas'.

A alguien le pasó algo así ?
Bah nose que mas preguntar. Acepto todo tipo de sugerencias.
Saludos y muchas gracias de antemano!

Yo creo que el problema pasa por otro lado. Trabajo con mySQL y tablas MyISAM, tengo una ventana en donde hago un SELECT * de más de 16000 registros, y la consulta es practicamente instantánea, tengo claves primareas y unas cuantas foráneas. Creo que deberías realizar un mantenimiento del mySQL, posiblemente haya algún índice roto. Tengo una PC Athlon 2.2 con 512Mb de ram, y nunca tuve problemas de recursos, ni trabajando con mySQL de local.

enecumene
01-05-2008, 15:48:11
Yo creo que el problema pasa por otro lado. Trabajo con mySQL y tablas MyISAM, tengo una ventana en donde hago un SELECT * de más de 16000 registros, y la consulta es practicamente instantánea, tengo claves primareas y unas cuantas foráneas. Creo que deberías realizar un mantenimiento del mySQL, posiblemente haya algún índice roto. Tengo una PC Athlon 2.2 con 512Mb de ram, y nunca tuve problemas de recursos, ni trabajando con mySQL de local.

Yo Tampoco tengo problemas con Zeos y MySQL, yo tengo una tabla de 47,000 registros y al hacer un select me lo muestra todos en el momento y es igual en la red o local, concuerdo con MAMU de que debe haber un indice roto o falta algunas de ellas.

Saludos.

waly2k1
02-05-2008, 02:24:40
Y nose que decirles, seguiré probando pero es muy raro. Con SQL Server jamás noté falta de rendimiento con tan pocos registros.

La PC de un cliente era un Celeron 2.X con 512mb de ram, y tardaaaaba, entonces me traje la base para probarla en casa, con un Athlon 3600 y 1 GB de Ram, tarda caaaasi 5 minutos menos, juas! es altamente repulsivo el sistema así. Si me tarda 5 minutos en traer 7000 registros me retiro de la programación y me dedico al arte culinario!

Casimiro, no son clientes sino productos, pero en caso que lo fueran y quisiera traer los 7000/20000 registros no es nada, el gestor de BD se
debería 'bancar' perfectamente. Ahora, al menos me queda claro que no es el motor ni zeos, entonces veré como optimizar mi sistema/consultas.

Muchas gracias muchachos ya encontraré el problema.

waly2k1
03-05-2008, 08:51:16
En el evento FormShow del formulario en cuestión
tenía estas tres lineas:


Data.zqryPROD.SortedFields := 'COD_SCANNER';
Data.zqryPROD.SortType := stDescending;
grdDataTitleClick( grdData.Columns[1] );


De manera tal que me quede ordenado de manera Ascendente en una grilla y seleccionado ese campo para busquedas automaticamente. O sea lo ordenaba en forma descendente y luego en el evento grdDataTitleClick lo vuelvo a ordenar, todo esto sin llegar a cargar el form(Y solo para que se resalte el campo a buscar)

Algo totalmente sin importancia, pero ordenar una tabla mediante Sort es pesado con zeos. No así con ADO, pero bueh, no voy a comparar un metodo de acceso con otro.

Es todo gente, muchas gracias por la atención brindada.

MaMu
03-05-2008, 10:21:00
...pero ordenar una tabla mediante Sort es pesado con zeos. No así con ADO, pero bueh, no voy a comparar un metodo de acceso con otro.

Compatriota mío...

Es curioso, porque el Sort en Zeos yo lo adoro, y es uno de los puntos fuertes que le encontré, ya el hecho de tener propiedades SortedField y SortType dotan a este componente de una utilidad muy importante.
Yo acabo de probar realizar una consulta a una tabla que tiene 24 campos, 1 clave primaria y 2 foráneas. Esta tabla tiene en su RecordCount la cantidad de 244.178 registros, y la devolución del cursor de datos es "al ojo" casi imperceptible, por no decirte instantánea. No se que versión de Zeos estes usando, pero asegurate de bajar la ultima versión que este disponible, y fijate de usar el driver adecuado en la propiedad Protocol de la conexión.

Saludos

waly2k1
03-05-2008, 20:44:59
No se que versión de Zeos estes usando, pero asegurate de bajar la ultima versión que este disponible, y fijate de usar el driver adecuado en la propiedad Protocol de la conexión.


MaMu, creo que me desconcertaste un poco en cuanto a version/protocolo, ya que creo es la ultima.

ver.: 6.6.2-RC
protocolo: mysql-5 (Acá puede haber diferencias, ya que hay varios drivers para MySQL)

En caso de que haya algo mejor me avisas por favor, o que yo lo emplee mal nose.

Me fascinó Zeos porque pasar un sistema completo hecho con ADO fue muy rápido y con un mínimo esfuerzo. Mi idea era lograr que el sistema funcione en web, funciona pero no como debería ya que al ser muchas tablas que actualizo se torna un poco pesado y se va por timeout.

Bueno compa, decime por favor qué/cómo lo usas y lo pruebo, estoy seguro que debe mejorar el rendimiento.

Saludos y muchas gracias!

AzidRain
04-05-2008, 00:06:21
Yo ya me andaba espantando con 250 mil registros pero MySQL los maneja como plumas. Ahora que también tiene que ver que el sort lo hago del lado del servidor mediante ORDER BY por lo cual sin duda es mucho más rápido.

waly2k1
04-05-2008, 05:36:41
Yo ya me andaba espantando con 250 mil registros pero MySQL los maneja como plumas. Ahora que también tiene que ver que el sort lo hago del lado del servidor mediante ORDER BY por lo cual sin duda es mucho más rápido.

Azid: El método Sort realiza el orden con los registros ya en memoria o sea que debería ser mucho mas rápido que acceder a un server, extraer los registros y ordenarlos, ya sea éste el que los ordene y después los recibas ordenados y los cargues en memoria. Además el order by sería rápido si todos los campos por el que quisieras ordenar estuviesen indexados.

Estoy probando con los distintos protocolos, pero no logro acelerar esto. Es un bicho raro!

Saludos