Configurando y Optimizando un servidor. my.cnf

Tengo un servidor con Linux CentOs, es un servidor dedicado y que me lo dieron con la configuración por defecto.

Lo que venia notando es que al cambiar la web de un servidor a otro, la web iba muy muy lenta.
Me preguntaba porque si he escrito toda la web desde 0 con Cakephp Framework, los modelos y las vistas están cacheados y se ha cambiado a un nuevo servidor mucho mas potente

  • Pentium E2200 Dual Core 2,2 GHz (2 cores, 1 MB caché, 800 FSB)
  • 2 GB SDRAM DDR2
  • 2 x 250 GB SATA (7.200rpm)
  • 2.000 GB de transferencia al mes
  • SAS 6iR internal RAID controler
  • 100MB de ancho de banda

porque me iba tan mal la web?

El tema es la configuracion por defecto de los servidores no es la optima para albergar una web, un servidor puede estar configurado para ser un servidor web, un servidor de correo, un servidor de juegos o simplemente se puede usar esa máquina como un ordenador normal.

Para ello hay que configurar varios aspectos, inicialmente: El apache, y el MySQL.

Lo primero que hice es optimizar el MySQL, y con esto el rendimiento del servidor mejoró notablemente.

Conectados como root en la máquina (los paths aqui indicados son los míos, verificar los vuestros.)

Lo primero un backup

cp  /etc/my.cnf /etc/my.cnf.backup

abrimos el archivo con vuestro editor favorito.

vi  /etc/my.cnf

por defecto en mi my.cnf sólo venia lo siguiente:

[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

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

He añadido una serie de parámetros nuevos

[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

# nueva configuracion
# este parámetro es fundamental, hay que registrar las consultas lentas, todas las que duren mas de 2 segundos.
# asi se puede ver las consultas que se hacen y que tienen que ser optimizadas
log-slow-queries=/var/log/mysql-slow-queries.log 
long_query_time = 2
log-queries-not-using-indexes
query_cache_limit=1M
query_cache_size=32M
query_cache_type=1
max_connections=500
interactive_timeout=100
# Reducido wait_timeout para prevenir que clientes inactivos retengan una conexion.
wait_timeout=30
connect_timeout=10
# establecido a 128 para que no use mas memoria
thread_cache_size=128
key_buffer=64M
join_buffer=1M
max_allowed_packet=16M
table_cache=512
record_buffer=1M
sort_buffer_size=2M
read_buffer_size=2M
max_connect_errors=10

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# nueva configuracion
open_files_limit=8192

# nueva configuracion
[mysql]
no-auto-rehash
#safe-updates

# nueva configuracion
[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

  • query_cache_size:
    MySQL 4 proporciona una característica que puede resultar muy útil – una caché de consultas. En una situación en la base de datos tiene que ejecutar varias veces las mismas preguntas en el mismo conjunto de datos, devolviendo el mismo resultado cada vez, MySQL puede cachear resultados, evitando la sobrecarga de ejecución a través de los datos una y otra y es extremadamente útil en servidores con mucha carga.
  • key_buffer_size:
    El valor de key_buffer_size es el tamaño del búfer utilizado con los índices. Cuanto mayor sea el buffer, más rápido terminará el comando SQL y el resultado será devuelto. Se supone que lo mejor es ajustar el key_buffer_size con al menos un cuarto de la memoria del servidor, pero no más de la mitad de la cantidad total. Idealmente, será lo suficientemente grande como para contener todos los índices (el tamaño total de todos los archivos. MYI en el servidor).
  • table_cache:
    El valor predeterminado es 64. Cada vez que MySQL tiene acceso a una tabla, se coloca en la caché. Si el sistema accede a muchas tablas, es más rápido para tener estas en la caché. MySQL al ser multi-threaded, puede ejecutar muchas consultas sobre sobre una tabla a la vez, y cada uno de éstas abrirá una tabla.
  • sort_buffer:
    El sort_buffer es muy útil para acelerar las operaciones de myisamchk (razón por la cual se fija mucho más alto para ese fin en los archivos de configuración por defecto), pero también puede ser útil cuando se realizan todos los días un gran número de ordenaciones o clasificaciones.
  • thread_cache:
    Si se tiene un servidor con mucha carga que está recibiendo una gran cantidad de conexiones rápida, hay que configurar la thread_cache lo suficientemente alto para que el valor d threads_created en SHOW STATUS deja de aumentar. Esto debe tomar parte de la carga fuera de la CPU.
  • tmp_table_size:
    (no incluido en el archivo de configuracion, pero este parámetro también se puede configurar).”Created_tmp_disk_tables” son el número de tablas temporales implícitos en el disco creado durante la ejecución declaraciones y “Created_tmp_tables” están basados en memoria. Obviamente, es malo si tiene que ir a la disco en lugar de la memoria todo el tiempo.

También lee este post, como crear el log slow queries

Éstos valores son los idóneos para mi servidor, aunque tampoco estoy muy seguro pues todavía estoy comprobando la respuesta que está dando mi máquina antes esta nueva configuración, y la estoy ajustando a las necesidades de la web.

Lo mejor es que vayáis ajustando poco a poco éstos parámetros. Si sabéis de algún parámetro que se me haya escapado comentármelo please

Tags de búsquedas:

my cnf,configurar my cnf,my cnf centos,fichero my cnf en centos,configurar my cnf mysql,configurar my cnf en linux,my cnf mysql,archivo my cnf,optimizar mysql centos,my cnf linux,Configurando y Optimizando un servidor my cnf,my cnf no configurado,optimizar centos 6,optimizar apache mysql,donde esta my cnf

Noticias relacionadas »

13 comentarios en Configurando y Optimizando un servidor. my.cnf

  1. diana
    / Responder

    quisiera saber cual es el comando que se utiliza para guardar los cambios al terminar de realizar la edición, gracias de antemano

  2. gnxdevelop
    / Responder

    Todo excelente! pero me pregunto si esta esto vigente al día de la fecha 28/08/2014

  3. richard
    / Responder

    felicidades por el post, pero cuando tengo un servidor de correo con mailscanner .. derrepente esta muy lento y los correos se demoran en salir , ademas se notaque esta leyendo el disco duro.

  4. Marcelo
    / Responder

    Tengo un servidor Centos con mysql , como sacas la formula para los valores que pones la configuración, pues actualmente tengo una enorme carga de informacion y ultimamente se me quedan hasta 400 conexiones al mysql en espera y el buffer los topo al 100%. De mysql no se nada , pues lo mio es administracion de redes pero me toco meterle mano al servidor para ver como se lo optimiza

  5. Yuri Coicca
    / Responder

    Te comento amigo, que nuestro servidor con Linux CentOS solo lee archivos PHP de un tamaño determinado, no todos…por ejemplo, no levanta archivos con tamaños:
    1.5 a 3.5 Kb
    3.6 a 4.8 Kb
    4.9 a 6.8 Kb
    6.9 a 7.1 Kb
    7.2 a 8.6 Kb
    8.7 a 30.0 Kb
    31.1 a 100 Kb

    Que crees que está sucediendo?

    • pedro
      / Responder

      Hola Yuri,

      Lo que me comentas es super raro. Que permisos tienen los archivos que no se leen? Quien es el propietario de esos archivos php?
      Has mirado que la codificación este bien y no tengan ningún error? Que hay en el log de error de apache?
      Investiga todo esto que te pregunto. Y me cuentas. .
      Un saludo!

  6. muy bueno
    / Responder

    Muy buen tuto… he leido el que sigue tambien… despues de aplicazrtle los cambio le aplique el mysqltuner y no me detecta algunos cambios… es problema mio o del servidor??? por ejemplo la variable thread_cache tambien la cambie a 128, pero luego entre a la base de datos con phpmyadmin y la variable sigue en cero… el errado es el phpmyadmin o el my.cnf

    Y gracias otra vez, genial blog

  7. Miguel
    / Responder

    Me parece un excelente articulo, estaria genial que actualizaras estos post dando a saver si aun funcionan correctamente en este año, si algo ha cambiado, etc.

    Tambien seria buena idea que nos dejaras un tutorial sobre optimización del kernel

    • Renato
      / Responder

      No quieres un cafe con leche y un par de empanadas??

  8. / Responder

    Buen dia, Pedro…. ya tengo funcionando el mysql server en Centos 5.6 y va bien…hice ajustes segun me sugeriste y esta caminando bien…. ahora bien, algunas variables no me las esta aceptando…. no se si es porque las tengo despues del [Mysql_safe] pero intenté colocar esa seccion de ultimo y no camina…. te ha pasado alguna vez????

    • Pedro Ventura
      / Responder

      Buenas,
      no nunca me ha pasado. Prueba a ver si es un problema, con letras mayusculas, minusculas, espacios, etc.. cada archivo de configuracion ya sea apache, mysql, samba, etc.. tiene un formato determinado, ten cuidado que lo estés escribiendo bien. Échale un ojo a todas las directivas posibles de mysql para [mysql_safe] en la docu oficial de mysql http://dev.mysql.com/doc/refman/5.1/en/mysqld-safe.html

  9. Andrea
    / Responder

    Excelente articulo.
    Gracias, me ha ayudado mucho.
    tengo consultas complejas sobre db grandes y la configuración ha optimizado las mismas visiblemente.

  10. Pingback: Configurando y Optimizando un servidor. Nuevas mejoras en My.cnf y arrancando en utf8 | Pedro Ventura

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

10$ gratis con Digital Ocean »

Este blog está funcionando con Digital Ocean,
para todos los lectores 10$ gratis! para probar el cloud a través del siguiente enlace.


Ir a Digital Ocean

¡Comparte este artículo! »

Sígueme en Facebook »

  • sdfgsdf sdfgsdf (2 semanas)
    dsfasd sdfas asdf asdfa asdfasdfafa asdfsdewtr fdsfsdfasfwewesfsd sdf ds
  • sdfgsdf sdfgsdf (2 semanas)
    sdfgsdf sdfgsdfgsdf sdfg
  • Luis (1 mes)
    Hola Pedro, muchas gracias por transmitirnos tu conocimiento. Te comento…
  • Senado.es: Vuelta al año 2000 - Yorokobu (1 mes)
    […] desarrollador Pedro Ventura explica en su blog cómo alternativas…
  • Pedro Ventura (1 mes)
    Hola Edwer La manera de como hacerlo viene explicada en…
  • Rodrigo (1 mes)
    Tengo una duda, como hago para no repetir el tweet?…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
Configurando y Optimizando un servidor. log slow queries

Lo primero es editar el my.cnf Conectados como root en la máquina (los paths aqui indicados son los míos, verificar...

Cerrar