Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Balance de carga MySQL

Estas en el tema de Balance de carga MySQL en el foro de Bases de Datos General en Foros del Web. Hola, tengo un problema, tengo una pagina que utiliza mucho las bases de datos, una vez prove teniendola en un hosting normal (de pago) pero ...
  #1 (permalink)  
Antiguo 31/08/2010, 07:56
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 15 años, 2 meses
Puntos: 0
Exclamación Balance de carga MySQL

Hola, tengo un problema, tengo una pagina que utiliza mucho las bases de datos, una vez prove teniendola en un hosting normal (de pago) pero el tipico hosting que es en un servidor compartido, y lo que me suele pasar es que se me cae la pagina por la cantidad de gente que entra dentro y por el uso de MySQL.

Contrate un VPS durante un mes para la misma web, no se caia tanto como antes, pero si se reducia la velocidad de vez en cuando (y alguna vez se caia).

Y decidi hacer balanceo de carga entre varios VPS 2 o 3 VPS pero no consigo ninguna informacion de como hacer balance de carga,

¿Alguien me puede ayudar con este problema?

Es muy importante poder hacer esto.

Muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 31/08/2010, 09:34
 
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires
Mensajes: 31
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Balance de carga MySQL

La carga del sistema no es solo por lo que hagas en la base de datos, mas bien es una representación del sistema en general.
Como cuando uno vuelve del supermercado, uno está "cargado" no porque tenga solo una mano con 6 kilos de papas. Tal vez uno se considera mas "cargado" con 2 kilos en cada mano.

Las cosas que se me ocurre que podés pensar/revisar relativamente faciles son:
-Revisar que estén todos los indices creados en las tablas.
-No se qué haga el sitio, pero tal vez esta accediendo mucho al disco por ejemplo para grabar archivos temporales? Si es el caso se puede ver formas de evitarlo.

Más complicado es:
-Reducir la cantidad de consultas a MySQL.
-Optimizar el programa PHP

Te recomiendo revisar los indices antes que nada, es fundamental y no es complicado.

saludos
Fernando
  #3 (permalink)  
Antiguo 31/08/2010, 11:21
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Balance de carga MySQL

Gracias por responder kokorini, no tengo indices creados en las tablas, ahora estoy probando con eso, pero no creo que me ayude mucho. No estoy seguro si se accede mucho al disco.
Pero son siempre continuas consultas a la base de datos, y el proceso esta siempre a mas del 80-90%.

No me atrevo a lanzar la web solo con 1 servidor (hay muchas probabilidades de que se caiga).

Yo por eso prefiero distribuir la carga de datos, aunque sea distribuir la carga de la base de datos entre otro servidor, nada mas que no encuentro ningun tutorial ni explicacion de como hacer esto.

Gracias,
saludos.
  #4 (permalink)  
Antiguo 31/08/2010, 13:16
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Balance de carga MySQL

nanshan para manejar cantidades tan altas de datos, considero recomendable entender primero como opera mysql en su interior.

Busca información acerca de la arquitectura de Mysql y como realiza los procesos, cual es el tratamiento que le da a las consultas y donde son almacenadas.

Por ejemplo en Oracle, con una tabla de 10'000.000 de registros, nos encontrabamos con un grave problema de eficiencia. La solución fue tan sencilla que quedé totalmente aterrado. Oracle en su arquitectura tiene un componente cargado en memoria principal (RAM) llamado shared pool. Este componente carga en caché las sentencias DML cifradas bajo una codificación de caracteres. Como los desarrolladores no cumplian estandares al momento de solicitar info a la base de datos por lo que un SELECT *FROM tabla es tratado de forma diferente a select *from tabla. Cuando se aplicaron filtros con WHERE pudimos notar que la shared pool estaba totalmente llena al cargar miles de veces en memoria la misma consulta pero con codificación diferente. La solución fue pedirle a los desarrolladores que manejaran estándares en el llamado de consultas para que cada que se quisiera consultar dicha tabla, toda la información se encontrara rapidamente en memoria y evitara constantes e innecesarias lecturas a disco.

De seguro, si entiendes un poco mejor el funcionamiento de mysql podrás identificar cual es el motivo de la lentitud de tu base de datos. Si el tema persiste, sería muy recomendable montar un cluster que te ayude distribuir la carga de datos como anteriormente lo has planteado.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 31/08/2010, 20:47
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Respuesta: Balance de carga MySQL

Aqui hay un pequño tutorial de optimizacion.

http://www.arsys.info/programacion/b...e-datos-mysql/

No te imaginas el aumento de velocidad que ocurre al crear bien indices a las tablas.
He visto casos de procesos que sin indices duran 5 o 6 minutos ser reducidos a 5 o 6 segundos.
  #6 (permalink)  
Antiguo 01/09/2010, 12:22
 
Fecha de Ingreso: septiembre-2009
Ubicación: España
Mensajes: 136
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Balance de carga MySQL

Muchas gracias a todos por su ayuda, segui los consejos que me dieron, y creé los indices, pero no se si estan bien hechos, les pongo los detalles de como estan puestos:

Nombre de la clave: Referidos_INDEX
Tipo: INDEX
Cardinalidad: Ninguna
Campos: campo1, campo2...

Estaba mirando la configuracion del servidor MySQL (el archivo my.cnf del servidor VPS) y tiene lo siguiente:

Cita:
[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

skip-bdb

set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-bdb

set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2
¿Les parece que deberia de ampliar esos datos de memoria?

Un saludo.
  #7 (permalink)  
Antiguo 22/11/2010, 19:51
Avatar de caelus  
Fecha de Ingreso: mayo-2010
Ubicación: /home
Mensajes: 91
Antigüedad: 14 años, 7 meses
Puntos: 5
Respuesta: Balance de carga MySQL

Has probado usar 'explain CONSULTA' en mysql? de esa forma puedes investigar el resultado real que has obtenido al agregar los índices y si existen mejores campos para usar a la hora de indexar, también te dará una idea si tus consultas usan mucho el disco en fin allí tienes para entretenerte.

En otro aspecto te comento que el montar un cluster mysql (que según entendí era tu idea original) con alta disponibilidad y redundancia es un tema complicado y caro.
Es posible, pero por experiencia te digo que concuerdo con los demás, debes optimizar el código al máximo, puesto que el clúster no hace milagros, nos tocó hace unos meses hacer un clúster para un cliente cuyas consultas no eran buenas y el rendimiento no mejoró en relación al costo que tuvo.
__________________
Infranetworking.com - Hosting profesional

Sitioandroid.com - Telefonos y programacion Android

Etiquetas: balance, carga, mysql
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 01:15.