Ver Mensaje Individual
  #9 (permalink)  
Antiguo 19/01/2012, 12:21
Avatar de stramin
stramin
 
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Sistema sobrecargado

Cita:
Iniciado por gildus Ver Mensaje
Hay muchos detalles que deberias de revisar, desde el codigo que realizas para la consulta hasta la consulta misma, y es mas como recuperas los resultados; tambien si usas Frameworks ?, que versiones de PHP usas?, que version y actualizacion de tu BD, y de web server?, usas jquery?.

Memcache te va ha ayudar muchisimo, y si vas ha tener tu server localmente, podrias implementar mejor un balanceo y proxies.
Saludos
las consultas que dan problemas en realidad son todas aquellas donde se use esa tabla y se ordene, o sea basta con hacer un:
SELECT id FROM tablagigante ORDER BY id;
para que demore entre 1 y 5 segundos, si intento hacer más filtros o cruzarla con otra tabla puede llegar a demorar minutos.
No estoy usando frameworks, la version de PHP es 5, la versión de MySQL es 5.0.77, el apache es 2.2 y si uso jQuery, pero en esta parte específica no, pero si estoy usando AJAX.

si la verdad el problema es que a MySQL se le está haciendo dificil ordenar los datos, ese es el problema 1, el segundo problema es de PHP, que demora demasiado en obtener los datos de la BD y muchas veces devuelve la variable incompleta, o llega al tiempo maximo de ejecución (60 segundos)


Cita:
Iniciado por jercer Ver Mensaje
No se si me he explicado bien, lo que quiero decir, es que cuando tienes que manejar datos tan grandes, lo que se suele hacer es pasar de tu tabla

Después lo que deberías hacer es un proceso para guardar datos, que establezca el umbral en que tu tabla deja de ser funcional y al llegar a él, cree una nueva tabla, asignando los valores en "tbl_tbl_ruedas".

Otro proceso para leer datos, que vaya a "tbl_tbl_ruedas", vea la tabla donde están los datos, los coja y los devuelva.

Estos procesos, claro deberían estar lo mas optimizados posible (Procedimientos almacenados ¿?)

Esto no quita todo lo que te han ido diciendo, para mezclarlo con "otras cosas", por ejemplo la última tabla de ese grupo será la única que "guardará datos", por lo que podría ser InnoDB, mientras que cuando se "cierre", se podría pasar a MyIsam. Este proceso debería hacerse en un momento de poca carga, etc.

Otra cosa, lo que he dicho de dividir una tabla en una tabla padre y 2 tablas, se puede extrapolar a una tabla padre, que llame a diferentes tablas en diferentes discos duros, o diferentes servidores / equipos, etc.
VAYA! la verdad es que la idea suena bastante bien, incluso podrían ser tablas mensuales o semanales, por ejemplo

mi_tabla_2011_10
mi_tabla_2011_11
mi_tabla_2011_12
mi_tabla_2012_01
mi_tabla_2012_02

haciendo eso me evitaría crear la "tabla padre", no?

ahora el problema de sobrecarga no se soluciona, ya que si quiero por ejemplo tomar un año completo y ordenar todos los datos por presión o temperatura del neumático tendría que tomar todas esas tablas...

Cita:
Iniciado por jercer Ver Mensaje
Respecto al tercer problema de: "el equipo del cliente se pega al mostrar tantos datos (por que lo que se muestra es un gráfico interactivo de todos los datos en el tiempo)"

Si el cliente pide la información de un año entero, deberías pasar los datos por día (por ejemplo) no de cada 5 segundos, que a efectos prácticos quedaría igual en el gráfico. ¿No?

Quizás hacer una función que haga que devuelva siempre 100 datos (o X) a pintar en el gráfico, es decir si la consulta es de 1000 datos, 1000/100 = 10, por lo que devolver los resultados multiplos de 10 (ordenados por fecha), 10, 20, ..., 1000
No es mala idea, la verdad me gustaría hacer eso o un promedio de esos 10, pero no sabría como hacer la consulta, además de que lo normal es que se ocupen filtros y ese filtro podría hacer que justamente el resultado de ID 10, 15 y 20 no estén en el filtro, un ejemplo:

id equipo
1 1
2 2
3 1
4 1
5 2
6 1
7 1
8 2
9 1
10 2

SELECT * FROM tabla WHERE equipo='1' AND id%5=0;

Esto no me daría resultados, pero quizas sería posible por ejemplo obtener el quinto resultado independiente de la ID (no se como)

Ahora una cosa que me gustaría hacer es obtener los promedios por hora o por dia en vez de todos los resultados de cada segundo, pero tampoco estoy seguro de como hacer eso.

Por cierto Gracias a quienes me están ayudando, espero sigan ayudandome con el tema, por que de esto depende la vida de los trabajadores de una empresa, y se ha puesto muy complicado desde que comenzó este retardo en el sistema.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D