Foros del Web » Programando para Internet » PHP »

Rendimiento Query's MySQL

Estas en el tema de Rendimiento Query's MySQL en el foro de PHP en Foros del Web. Estimados Amigos Expertos !! Tengo unos problemas serios con el rendimiento de mi aplicación WEB. Estimo que es urgente. El sistema lleva sólo 30 dias ...
  #1 (permalink)  
Antiguo 22/02/2008, 09:49
 
Fecha de Ingreso: octubre-2007
Mensajes: 267
Antigüedad: 17 años
Puntos: 1
Rendimiento Query's MySQL

Estimados Amigos Expertos !!

Tengo unos problemas serios con el rendimiento de mi aplicación WEB. Estimo que es urgente.

El sistema lleva sólo 30 dias de puesta en producción, con unos 5000 registros de Movimientos y 1000 de trabajos, y se esta poniendo pesado, no me quiero imaginar en un mes mas, menos despues

Paso a describirles las Caracteristicas de mi sistema:

1- lenguajes usados: php, mysql, js, html. Esta actualmente funcionando publicada en Internet, en un server con apache, mysql server,,, en gral las conexiones del cliente y el server son buenas, dado q el sistema comenzo funcionado a buen rendimiento. El sistema actualmente se "ataca" desde 2 puntos solamente. NO uso graficos ni nada que lo recargue. Aunque creo q mi principal problema es el upload.

2- Estructura de Datos (BD):
    1. Una BD con 7 tablas, en general de poco trafico: entre 50 y 200 bytes cada una, a excepción de dos que describo a continuación.
    2. El registro de la tabla más usada (Movimientos) mide 50 bytes. y una cantidad de registros de 90.000 noventamil por año.
    3. El registro de la tabla 2da. más usada (Trabajos) 160 bytes. 18000 reg estimados por año.
(por cada trabajo agregado o modificado, se agrega un movimiento, en promedio hasta 5 reg de movimientos x trabajo, pudiendo ser más)

Preguntas (ayudaaaaaa!!)

1- las querys (inserts y updates) las realizo del registro completo. ¿Es posible hacerlo solo de un campo y no todo el registro si no es necesario? ¿eso ayudaria?

2- en este tipo de aplicaciones es conveniente cachear (diseñar alguna estructura de buffer) quiza al iniciar sesion en el sistema, que cachee algunos resitros no los de grabacion, pero si los de consulta para eviar perdidas de tiempo en ello.

3- El ppal problema se da al almacenar. Estimo que se ve muy agravado por las conexion adsl del cliente y el triste 25% de upstream. Pero con ello no puedo hacer nada. ¿Solo me queda disminuir el grueso del flujo de trafico?

4- ¿Qué aumenta la percepción de mejor rendimiento del usuario? ¿Usar por ejemplo el nombre en el campo o el id de nombre y crear otra tabla nombres?


En fin. Espero respuesta a alguno o todos los ítems.

Un abrazo
  #2 (permalink)  
Antiguo 22/02/2008, 10:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: Rendimiento Query's MySQL

Es muy compleja tu pregunta, pero para responder por partes:
1.- Si es posible, solo haz el insert:
Código:
INSERT INTO `tabla` (`campo1`) VALUES ('valor')
2.- Siempre es conveniente cachear, también verifica el tipo de tablas, si son tablas que son para cache te recomiendo usar tablas tipo MEMORY.

3.- ¿Que es el ppal?

4.- ¿Podrías explicar mas esta pregunta?

Saludos.
  #3 (permalink)  
Antiguo 22/02/2008, 10:37
Avatar de Darkot  
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla, España
Mensajes: 5
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Rendimiento Query's MySQL

Pues a ver...

a tus preguntas no tengo unas respuestas muy claras y alas que tengo me tomaria bastante aclarartelas. Pero si te puedo dar unos consejos que aceleran bastante una Base de datos:

1. Siempre es mas rapido buscar por numeros que por cadenas (tenlo en cuenta por lo de la ultima de tus cuestiones)

2. Nunca esta de mas crea indices en los campos mas usados.

3. cuando crees una tabla en la B.D. siempre pon como primer campo la clave y acontinuacion los campos fijos. Es decir si guardas un DNI lo pones antes que un campo en el que guardes un textos con la listas de hobbyes del usuario (por ejemplo un usuario no te inserta este dato, por lo ke la longitud seria 0 y otro te escribe 1200...este tipo de campos suelen ir al final ;)) y siempre tienen preferencia en el orden los campos numericos alos de texto y los datos binarios siempre al final.

4. Los datos que vayas ha usar abitualmente es mejor llevarlos en ina variable de sesion que crees en el login de usuario y no tener que ralizar las consultas cada 2 paginas.

5. Al usuario siempre le es mas comodo esperar cuando realiza inserciones o modificaciones en la B.D. y sin embargo prefiere respuestas rapidas en las consultas. asi que hacelera esto.

6. Haras que tu servidor vaya mas rapido realizando consultas si tiene que intentar menos consultas erroneas asi que comprueba los datos con JavaScript antes de enviarlos al servido.



Weno y hay tienes unos cuantos modestos consejos ;) si tienes alguna duda concreta mas me lo comunicas ;)


Saludos.
  #4 (permalink)  
Antiguo 23/02/2008, 11:21
 
Fecha de Ingreso: octubre-2007
Mensajes: 267
Antigüedad: 17 años
Puntos: 1
Re: Rendimiento Query's MySQL

GatorV :

Antes de aclararte las preguntas, te consulto:
¿tablas tipo Memory,,,, a qué tipo te referis? ¿ISAM, MYISAM, HEAP, MERGE, INNODB? tampoco entiendo mucho la diferencia entre estas.

4- ppal = principal
5- me refiero a un problema de diseño de la estructura de las tablas. Por ej.
suponte:
Opción 1:
tabla EXPEDIENTES__PROPIETARIOS_ESTADOS = campos: ID_expediente, Propietario, Estado, Fecha

u Opción 2:
tabla 1: EXPEDIENTES = ID_expediente, ID_propietario, ID_estado, Fecha
tabla 2: PROPIETARIOS = ID_propietario, Propietario
tabla 3: ESTADOS = ID_estado, Estado

¿A fines de rendimiento, me parece q las consultas serían más rapidas usando la opcion 1. aunque me imagino que el peso de esa tabla sería muy grande? ¿cual me conviene?

Finalmente me gustaria conseguir información sobre tratamiento de optimización pero en español, porque veo que todo es estos temas esta en inbles o frances. Gracias!!
  #5 (permalink)  
Antiguo 23/02/2008, 12:15
 
Fecha de Ingreso: octubre-2007
Mensajes: 267
Antigüedad: 17 años
Puntos: 1
Re: Rendimiento Query's MySQL

Darkot.
Te consulto:
A que te refieres en el punto 1. con "...campos más usados". Generalmente realizo busquedas involucrando un set de campos q podriamos considerar mas usados, pero los updates, los hagos siempre de todo el registro, por mas que se actualice un sólo campo del mismo.
Crear un Indice para cada campo ¿crearia un archivo de Indices aparte, no? pero sólo para indexar las búsquedas de ese campo en particular, pero para que funcione el indice, ¿como haría la busqueda? ¿por dicho campo en el WHERE CONDITIONS? ¿por mas que sea de texto funcionaría?
¿la asceleración lo veo claro para las lecturas, pero ¿lo serían para los updates e inserts? Pq me parece q no utilizarían dicho indice... y si lo hicieran, me gustaría saber cómo se instrumentarían.

Gracias.
  #6 (permalink)  
Antiguo 25/02/2008, 02:28
Avatar de Darkot  
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla, España
Mensajes: 5
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Rendimiento Query's MySQL

Con campos mas usado me refiero ha... los campos por los que realizas consulatas (los que pones en los where ) y nos son parte de la clave. En mi web tengo un codigo de usuario que es la clave de la tabla pero tengo un indice creado en ella para el campo en el que guardo el nombre de usuario porque realizo muchas consultas atraves de el, por ejemplo al dar de alta un usuario debo comprobar antes que no exista uno con el mismo nombre de usuario(el mismo nick, claro. por supuesto que puede haber 2 pepes XD) y esa busqueda es de logica que este acelerado con un indice.

Los indices funcionan para Insert, updates, deletes y lo ke se te ocurra.. Si estas trabajando con el MyAdmin es muy facil crear los indices sino, se realiza con la instruccion "create Index".

Por cierto eso que haces de actualizar todos los campos aunque solo vayas a cambiar el valor de uno de ellos esta muy,muy,muy mal. No lo hagas, entre algunos de los motivos estan esos:

1. Crea basura en memoria quue te cagas...
2. Imaginate que hay un error y cambias uno de los campos que no debias cambiar :S...pero imaginte que uno de los campos que cambias es una clave ajena de otra tabla...se te puede ir toda la estructura de la base de datos a la m*****

3. Es mucho mas costoso para el sistema actualizar todos los campos.



Aqui te dejo un ejemplo de como crear una tabla con indices:

Código:
PRIMARY KEY (nombre_columna_1 [,nombre_columna2...])UNIQUE 
INDEX nombre_indice (columna_indexada1 [,columna_indexada2 ...])
INDEX nombre_indice2(columna_indexada1 [,columna_indexada2...])
Y aki una update que no tiene porque afectar a todoas los campos:

Código:
update into TABLA where CONDICION set(campo1 [, ...] ) values (nuevo_valor_campo1 [, ...] ) ;


Saludos.


PD: Perdon por tardar tanto en contestar
  #7 (permalink)  
Antiguo 25/02/2008, 02:36
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Re: Rendimiento Query's MySQL

¿Has localizado ya tus cuellos de botella? ¿Has hecho alguna medicion? Porque de la forma en la que comentas todo parece que no, que simplemente te parece que va lento y te parece que la culpa es de MySQL.
  #8 (permalink)  
Antiguo 02/03/2008, 20:44
 
Fecha de Ingreso: octubre-2007
Mensajes: 267
Antigüedad: 17 años
Puntos: 1
Re: Rendimiento Query's MySQL

Qué tipo de medición? qué tendria que medir y cómo? Las Querys? o el servidor? tengo los reportes que emite phpmyadmin, que es el gestor que utilizo, y me pone algunas cosas en rojo de lo cual me estoy ocupando, en relación a los índices... pero después no sé muy bien a qué mediciones haces referencia.
Por lo demás estoy cacheando todo lo que puedo, ahora estoy pensando en cachear una tabla de 200 registros (utilizando arrays de variables de sesion) no sé si convenga (no puedo usar tablas memory ya que el usuario podría necesitar agregar o cambiar registros) qué opinas?
Gracias Amigo
  #9 (permalink)  
Antiguo 02/03/2008, 21:53
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Rendimiento Query's MySQL

CONSEJO. usa store procedures. elimina los autoincrement id , y haz un cambio a la vez para que veas el rendimiento. por que si haces 2 cambios no podras ver la mejora que hayas hecho . saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:12.