Caché de la base de datos MySQL en memoria


11

Tengo problemas con un sitio web con 600 MB de base de datos MySQL. El sitio web es demasiado lento. Noté que cuanto más grande es la base de datos MySQL, más lenta se vuelve. Cuando tenía 5 MB, el sitio web era muy rápido. Cuando comenzó a crecer, comenzó a volverse cada vez más lento y ahora, a 600 MB, es realmente lento, y tarda unos 10 segundos en cargar las páginas.

Verifiqué los procesos principales y no está relacionado con la alta carga ni nada. Ni siquiera está relacionado con IOPS, ya que probé en unidades HDD de 7.2k rpm y dio el mismo problema ahora con las pruebas con unidades SSD Intel 320, por lo que tampoco creo que se trate de consultas altas.

El sitio web está utilizando Wordpress y hay como 9 complementos activos. La gente dijo que podrían ser los complementos ... bueno, tal vez ... pero en este momento solo quiero almacenar en caché toda la base de datos en la memoria y me gustaría obtener ayuda y dirección sobre dónde comenzar y cómo hacerlo.

Tengo 16 GB de RAM y 4 núcleos i5-2400 @ 3.1 GHz. OS es centos 5.7

top - 07:23:57 up 9 days, 12:15, 0 users, load average: 0.09, 0.04, 0.05
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.2%us, 1.0%sy, 0.0%ni, 90.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16367532k total, 3641628k used, 12725904k free, 612140k buffers
Swap: 1046520k total, 0k used, 1046520k free, 1538896k cached

Respuestas:


10

Si fuera usted, cambiaría todos los datos a InnoDB. El bloqueo de tabla / bloqueo de fila ha sido discutido por muchos durante mucho tiempo. Siempre elegiría InnoDB sin dudas. Sin embargo, hay otra razón profunda para elegir InnoDB ... CACHING .

Si bien la mayoría de las personas se jactan de que MyISAM es más rápido para las lecturas, la mayoría de las personas olvidan que la gran cantidad de caché para MyISAM, que se llama caché de claves (establecida por key_buffer_size), solo almacena en caché las páginas de índice de los archivos .MYI. Nunca almacena en caché las páginas de datos. Tiene un máximo oficial de 4 GB en sistemas de 32 bits. 8 GB es el mejor máximo para 64 bits.

El InnoDB Buffer Pool almacena en caché los datos y las páginas de índice. Dependiendo del servidor que tenga, puede almacenar en caché hasta el conjunto de datos completo en la RAM. Puede ajustar InnoDB para hasta un 80% de RAM y un 10% para las conexiones de base de datos, y dejar un 10% para el sistema operativo. Esto es cierto incluso para diferentes sistemas operativos .

He recomendado estas cosas para los clientes de Drupal con un éxito maravilloso. Se aplica a Wordpress también. He proporcionado soporte DB para clientes con WordPress. Las mismas mejoras.

Siempre puede configurar la memoria para InnoDB de manera más efectiva que con MyISAM. Siempre hay una manera de modificar InnoDB para satisfacer sus necesidades de rendimiento . A medida que crecen sus datos, eventualmente se convertirá en un requisito .

ACTUALIZACIÓN 2011-11-21 11:44 EST

Si su conjunto de datos completo es lo suficientemente pequeño, puede ejecutar una consulta SELECT en cada tabla que tenga justo después de que mysql se inicie.

Para todas las tablas que son InnoDB y / o MyISAM, ejecute esta consulta:

SELECT DISTINCT
    CONCAT('SELECT ',ndxcollist,' FROM ',
    db,'.',tb,' ORDER BY ',ndxcollist,';') SelectQueryToLoadCache
FROM (
    SELECT
        engine,table_schema db,table_name tb,index_name,
        GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
    FROM (
        SELECT
            B.engine,A.table_schema,A.table_name,
            A.index_name,A.column_name,A.seq_in_index
        FROM
            information_schema.statistics A INNER JOIN
            (SELECT engine,table_schema,table_name
            FROM information_schema.tables
            WHERE engine IN ('InnoDB','MyISAM')) B
            USING (table_schema,table_name)
        WHERE
            B.table_schema NOT IN ('information_schema','mysql')
            AND A.index_type <> 'FULLTEXT'
        ORDER BY
            table_schema,table_name,index_name,seq_in_index
        ) A
    GROUP BY
        table_schema,table_name,index_name
) AA
ORDER BY
    engine DESC,db,tb
;

Esto generará todas las consultas SELECT posibles que necesite ejecutar que convocarán todos los índices a los que se hará referencia. Coloque esta consulta en un archivo llamado /root/MakeSelectQueriesToLoad.sql. Ejecute el script y recopile la salida /root/SelectQueriesToLoad.sql. Finalmente, ejecútalo:

mysql -u... -p... -AN < /root/MakeSelectQueriesToLoad.sql > /root/SelectQueriesToLoad.sql
mysql -u... -p... < /root/SelectQueriesToLoad.sql

Esto definitivamente precargará todas las páginas de índice en el InnoDB Buffer Pool y MyISAM Key Cache. Si todos sus datos son InnoDB, realice dos cambios:

  • reemplazar WHERE engine IN ('InnoDB','MyISAM')conWHERE engine='InnoDB'
  • reemplazar CONCAT('SELECT ',ndxcollist,' FROM ',conCONCAT('SELECT * FROM ',

Esto también completará más páginas de datos en el InnoDB Buffer Pool.

NOTA FINAL: Asegúrese de que el InnoDB Buffer Pool sea lo suficientemente grande como para contener todos sus datos de InnoDB


2

Ya está almacenando en caché toda la base de datos en la memoria. El problema es casi con certeza el tiempo que lleva buscar en la base de datos, incluso en la RAM.

Mire las estadísticas de E / S de su disco. Probablemente verá que solo hay un bit aleatorio ocasional de E / S de disco. La base de datos está en la memoria. Ese no es el problema. Necesita instalar iostatprimero. No menciona su plataforma o distribución, pero probablemente esté en un paquete llamado iostat. Puede encontrar atopmás amigable.

¿Lo hicieron las personas que le dijeron eso después de obtener alguna evidencia de que toda su base de datos no estaba en la memoria o que la E / S del disco era el problema? De lo contrario, su consejo es el equivalente a un médico que nunca lo ha visto o examinado, pero acaba de escuchar que le duele el brazo diciéndole que le eche un yeso.


-1

Instale un buen complemento de almacenamiento en caché para Wordpress, podría ayudar. Pero tarde o temprano tienes que descubrir el cuello de botella que ralentiza tu sistema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.