OVH Community, your new community space.

Mejorar rendimiento MySQL


JarFil
05/09/2008, 21:37
Que estén "masked" no significa que no funcionen, sino que no hay "garantías" de que funcionen y/o de que funcionen "de forma segura". Personalmente en las pruebas que he realizado con eAccelerator no he visto ningún problema en 64bit... pero YMMV.

Shephard
05/09/2008, 13:08
Hola,

No puedo instalar ni Zend Optimizer ni eAccelerator, pues aparentemente no funcionan en 64bits (están masked por emerge). Guardo esa configuración de my.cnf para cuando falle la de isaac, que parece ir bien.

Muchísimas gracias!

Un saludo.

pedrito
05/09/2008, 03:39
¿Tienes instalado Zend Optimizer y eAccelerator/XCache para PHP? ¿Has optimizado Apache? Es posible que tus problemas vengan de ahí, no del MySQL.

En cuanto al mysql, yo lo optimizo así editando el my.cnf:
[mysqld]
local-infile=0
datadir=/var/lib/mysql
skip-locking
skip-innodb
skip-networking
safe-show-database
query_cache_limit=1M
query_cache_size=32M ## 32MB por cada 1GB de RAM
query_cache_type=1
max_user_connections=200
max_connections=500
interactive_timeout=10
wait_timeout=20
connect_timeout=20
thread_cache_size=128
key_buffer=128M ## 128MB por cada 1GB de RAM
join_buffer=1M
max_connect_errors=20
max_allowed_packet=16M
table_cache=1024
record_buffer=1M
sort_buffer_size=1M ## 1MB por cada 1GB de RAM
read_buffer_size=1M ## 1MB por cada 1GB de RAM
read_rnd_buffer_size=1M ## 1MB por cada 1GB de RAM
thread_concurrency=4 ## CPUs o Cores x 2
myisam_sort_buffer_size=64M
server-id=1
collation-server=latin1_general_ci
[mysql.server]
user=mysql
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/lib/mysql/mysql.pid
open_files_limit=8192
[mysqldump]
quick
max_allowed_packet=16M
[mysql]
no-auto-rehash
#safe-updates
[isamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M
[myisamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M
[mysqlhotcopy]
interactive-timeout


También puedes instalar Memcache http://www.novanebula.net/blog/archi...-Memcache.html

Saludos

Shephard
05/09/2008, 00:37
Hola, Isaac.

Parece ser que el reinicio sí arrancó, pero sigue habiendo lag. He pasado la web más pesada al otro servidor, dejándolo como estaba ayer (que iba perfecto), pero hay un lag del copón. Te pego el top:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20276 mysql 20 0 469m 103m 5004 S 16 2.6 2:37.36 mysqld
1111 root 16 -4 6900 572 332 S 1 0.0 0:06.10 udevd
12960 nobody 20 0 32412 4212 1512 S 1 0.1 0:00.50 httpd
17092 nobody 20 0 32344 4124 1488 S 1 0.1 0:00.38 httpd
1 root 20 0 2568 568 488 S 0 0.0 0:00.72 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:00.12 migration/0
4 root 15 -5 0 0 0 S 0 0.0 0:00.04 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.14 migration/1
6 root 15 -5 0 0 0 S 0 0.0 0:00.06 ksoftirqd/1
7 root 15 -5 0 0 0 S 0 0.0 0:00.26 events/0
8 root 15 -5 0 0 0 S 0 0.0

isaaclg
04/09/2008, 23:50
Si ejecutar el comando "top" puedes saber exactamente que proceso es el que te satura el sistema.

Con un reinicio no te arranca? Entonces el server tiene algun problema.
Llevo con ovh como tiempo, no conozco lo de la red espanix, que es?

Shephard
04/09/2008, 23:37
He reiniciado y parece ir un poco mejor, pero nada... sigue habiendo lag, aun suspendiendo desde el OVHm todas las webs que suelen generar mucho movimiento.

¿Será algo de la red de OVH? El famoso Espanix? Ni idea, pero hay un lag del cagarse xD

Shephard
04/09/2008, 23:20
Código:
Hola, isaac.

Hoy ha empezado a dar lag! 2.30% de load usage y 830 MB usados. Apenas carga alguna web a un tiempo decente... tarda unos 20 segundos en cargar :s

Un saludo!
Hmm aparentemente el lag no venía del mysql, pues paré el servicio y seguía sin servir html a un tiempo razonable... ¿qué puede ser?

Mira que me da palo reiniciar el servidor porque normalmente requiere intervención de técnicos, ya que no arranca...

Shephard
04/09/2008, 22:27
Hola, isaac.

Hoy ha empezado a dar lag! 2.30% de load usage y 830 MB usados. Apenas carga alguna web a un tiempo decente... tarda unos 20 segundos en cargar :s

Un saludo!

isaaclg
04/09/2008, 10:03
Me alegro que vaya funcionando.
Ya nos cuentas entonces despues del fin de semana

Saludos

Shephard
04/09/2008, 10:01
De momento, parece que funciona perfecto, aunque necesito que se conecten varios usuarios más para corroborarlo. Supongo que los datos del fin de semana serán más fiables.

Un saludo!

isaaclg
04/09/2008, 08:22
Buenas!

La particion que hace ovh no me gusta nada, por eso siempre la hago yo a mano. Lo hago igual, solo que aumento / en varios gigas, para asi nunca tener problemas.

A mi en su dia me dijeron que si tenia un server con 4 GB de ram, la configuracion para 2 GB me iria bien, por eso no toque nada mas.
Si quieres optimizarla para 4 GB imagino que habria que subir esos datos al doble, mas o menos. Puedes ir toqueteando y probar, si realmente ves que te hace falta.

Entonces te funciona bien no?

Shephard
04/09/2008, 02:53
Hola, isaaclg.

¿Sabes si se puede optimizar tu configuración para 4GB o va bien así igualmente? Hoy ha reventado el nuevo dedicado donde pasé la web que procesaba muchas queries, al llenarse la partición "/" del Release2. Soy el hombre que tropieza dos veces con la misma piedra, pues no me acordé xD.

Cuando peta el servidor por llenarse esa partición, MySQL no se ejecuta, así que estoy ahora, de manera temporal hasta mañana con external mysql, procesando las queries mi servidor grande, donde estaba antes la web esta. He aprovechado para cambiar el my.cnf con tu configuración y he decir que no salgo de mi asombro, pues está aguantando bien los 200 usuarios online, sin apenas ralentizaciones.

Voy a darle un poco más de tiempo a ver si sale el lag a presión por algún lado :P

Muchísimas gracias, Isaac!

Shephard
03/09/2008, 19:50
No, no, no decía de borrar datos que vienen, sino igual borrar cosas que yo mismo añadí, como los cachés y cosas raras.

Un saludo!

isaaclg
03/09/2008, 15:48
De hecho he formateado un server de los que tengo, y he configurado otra vez mysql igual, sin borrar los datos que tengo.

Ya nos contaras que tal.

Saludos

Shephard
03/09/2008, 13:25
Dejo el resto entonces, okay. Esta tarde lo cambiaré y en unos días te comento a ver si hay alguna novedad.

Un saludete y muchísmas!

isaaclg
03/09/2008, 10:48
Yo no borraria nada, quiza entre versiones de mysql algo cambie.
Lo que yo hago es cambiar los valores de las lineas que te pegue, o añadir si alguna no esta.

Shephard
03/09/2008, 10:46
Buenos días, Isaaclg.

¿Borro el resto de la sección [mysqld] para dejar solo lo tuyo o simplemente dejo lo que tengo y cambio los valores de las líneas que escribiste?

Un saludo y muchísimas gracias!

isaaclg
02/09/2008, 12:39
Hola.

Aun asi yo cambiaria la configuracion, te ira mejor todavia.

Mysql por defecto viene configurado con si usaras 512 MB de ram. Asi que te ira mejor.

Recuerda hacer el backup de tu my.cnf por si acaso.

Saludos

Shephard
02/09/2008, 12:31
Cita Publicado inicialmente por isaaclg
Hola.

Configurate tu my.cnf siguiendo los parametros del archivo my-huge.cnf
Ese archivo esta configurado para servidores que tengan 2GB de RAM.

Para buscar el archivo usa este comando.
find /* | grep my-huge.cnf

Haz un backup de tu my.cnf por si acaso.


Las rutas y demas, no hace falta que toques nada, centrate en estos parametros:



Ya nos diras si notas las diferencias.

Saludos
Hola, Isaac. El servidor tiene 4GB DDR2. Aún así, es un poquito tarde, pues compré otro servidor dedicado solo para esa web . Tomo nota por si tengo que recortar gastos y meter todo en el mismo servidor de nuevo. En caso de hacer eso, te dejaré un feedback sobre el nuevo rendimiento.

¿Ahora que no hay lag me recomiendas poner esa configuración? Parece que funciona todo a una buena velocidad.

¡Muchísimas gracias!

Un saludo

isaaclg
02/09/2008, 11:17
Hola.

Configurate tu my.cnf siguiendo los parametros del archivo my-huge.cnf
Ese archivo esta configurado para servidores que tengan 2GB de RAM.

Para buscar el archivo usa este comando.
find /* | grep my-huge.cnf

Haz un backup de tu my.cnf por si acaso.


Las rutas y demas, no hace falta que toques nada, centrate en estos parametros:

# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

[mysqldump]
quick
max_allowed_packet = 16M

[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
Ya nos diras si notas las diferencias.

Saludos

Shephard
30/08/2008, 20:27
Hay bastante lag de nuevo :_( y solo 300 usuarios online ahora.

Shephard
30/08/2008, 12:22
Comenté la línea

Código:
#log-bin
#server-id                                      = 1
del my.cnf. Creo que era eso lo del binary log? xD

Shephard
30/08/2008, 12:14
Cita Publicado inicialmente por JarFil
Adicionalmente a lo que comenta Power, en la parte del servidor:

- Que no tengas activado el log binario
- ...ni el log de texto

No comentas qué aplicación hace uso del MySQL. Si es propia (o no):

- Asegúrate de que las tablas tengan buenos índices, y que las consultas SQL los aprovechen
- Usar consultas preparadas
- Usar procedimientos almacenados
- Optimizar las consultas en general
- Usar una cache de datos a nivel de aplicación
- Usar squid
¿Dónde puedo comprobar si tengo activado el log binario y el de texto? La aplicación que hace uso del MySQL es mysql.

Posteo la parte de [mysqld] (la que más modificaciones tiene) del my.cnf:
Código:
user                                            = asdf*
port                                            = 3300*
socket                                          = /var/run/mysqld/mysqld.sock
pid-file                                        = /var/run/mysqld/mysqld.pid
log-error                                       = /var/log/mysql/mysqld.err
basedir                                         = /usr
datadir                                         = /var/lib/mysql
skip-locking
key_buffer                                      = 60M
max_allowed_packet                      = 3M
table_cache                             = 1500
sort_buffer_size                        = 512K
net_buffer_length                       = 8K
read_buffer_size                        = 256K
read_rnd_buffer_size            = 512K
myisam_sort_buffer_size         = 16M
language                                        = /usr/share/mysql/english
set-variable = max_connections=500
set-variable = max_connect_errors=300
#ANADIDO EL 30 AGOSTO
thread_cache_size = 100
query_cache_size = 15M
query_cache_limit = 10M
query_cache_type = 1
long_query_time = 2
join_buffer_size = 300K
tmp_table_size = 128M
max_heap_table_size = 128M
key_buffer_size = 100M
set-variable = key_buffer=60M
¿Igual el skip-locking tiene algo que ver? Un saludo!

Shephard
30/08/2008, 12:09
Cita Publicado inicialmente por Power
Te recomiendo:

- Que instales mytop para supervisar el funcionamiento de MySQL
- Que optimices MySQL (fichero my.cnf) según la memoria de que dispongas
- Que actives log-slow para que te haga un log de las peticiones tandan demasiado y por tanto puedas optimizarlas.

Saludos
Buenos días!

Ayer instalé MyTop, pero no salen más que 3 procesos ahí. Estuve toqueteando también el my.cnf tras las recomendaciones que algunos software de diagnóstico de MySQL me daban. El log-slow también estaba activado y ayer, que había un lag horrible, no salía ninguna consulta, así como hay unas 72.000 de días anteriores .

Gracias por la respuesta!

JarFil
30/08/2008, 11:13
Adicionalmente a lo que comenta Power, en la parte del servidor:

- Que no tengas activado el log binario
- ...ni el log de texto

No comentas qué aplicación hace uso del MySQL. Si es propia (o no):

- Asegúrate de que las tablas tengan buenos índices, y que las consultas SQL los aprovechen
- Usar consultas preparadas
- Usar procedimientos almacenados
- Optimizar las consultas en general
- Usar una cache de datos a nivel de aplicación
- Usar squid

Power
30/08/2008, 09:47
Te recomiendo:

- Que instales mytop para supervisar el funcionamiento de MySQL
- Que optimices MySQL (fichero my.cnf) según la memoria de que dispongas
- Que actives log-slow para que te haga un log de las peticiones tandan demasiado y por tanto puedas optimizarlas.

Saludos

Shephard
30/08/2008, 00:35
Buenas noches, compañeros.

Me toca abrir un tema para consultar acerca de la configuración de vuestros servidores... o sobre alguna recomendación.

El caso es que en mi servidor (Superplan 08, el de 4GB) utilizamos las bases de datos muy a saco y claro, hay un lag que no hay quien lo aguante en algunas (muchas) ocasiones. Hoy mismo he activado el MySQL caché (me he asegurado de que funcione) y nada, no se ha inmutado la latencia tras reiniciar el servicio.

Ahora mismo está el servidor a 1.94% y el principal proceso es el mysql, como es lógico. Hay unos 300 o 400 usuarios online haciendo queries como locos.

16889 mysql 20 0 236m 52m 5440 S 63% CPU 1.3% MEM 2:07.60 mysqld

¿Alguna recomendación?

Muchísimas gracias y un saludo!