Recientemente he tenido problemas con la paliza como resultado de la falta de memoria. (Mi VPS tiene 256M en total)
Estoy tratando de sintonizar MySQL usando mysqltuner.pl y obtengo los siguientes resultados:
-------- Estadísticas Generales ---------------------------------------- ---------- [-] Verificación de versión omitida para el script MySQLTuner [OK] Actualmente ejecuta MySQL compatible versión 5.0.51a-3ubuntu5.4-log [OK] Operando en arquitectura de 64 bits -------- Estadísticas del motor de almacenamiento --------------------------------------- ---- [-] Estado: + Archivo -BDB -Federated -InnoDB -ISAM -NDBCluster [-] Datos en tablas MyISAM: 114M (Tablas: 454) [!!] Tablas totales fragmentadas: 34 -------- Métricas de rendimiento ---------------------------------------- --------- [-] Hasta: 40 s (570 q [14.250 qps], 23 conn, TX: 154K, RX: 23K) [-] Lecturas / Escrituras: 100% / 0% [-] Buffers totales: 338.0M global + 2.7M por hilo (20 hilos máximo) [!!] Uso de memoria máximo posible: 392.9M (153% de RAM instalada) [OK] Consultas lentas: 0% (5/570) [OK] Mayor uso de conexiones disponibles: 15% (3/20) [!!] Tamaño del búfer clave / índices totales de MyISAM: 8.0M / 9.4M [!!] Tasa de aciertos del búfer clave: 57,1% (7 en caché / 3 lecturas) [Aceptar] Eficiencia de caché de consulta: 21,9% (7 en caché / 32 selecciones) [OK] Consulta de ciruelas pasas por día: 0 [OK] Clasificaciones que requieren tablas temporales: 0% (0 clasificaciones temporales / 1 clasificaciones) [OK] Tablas temporales creadas en disco: 0% (0 en disco / 32 en total) [OK] Tasa de aciertos de caché de subprocesos: 86% (3 creadas / 23 conexiones) [OK] Tasa de aciertos de caché de tabla: 26% (128 abiertos / 484 abiertos) [OK] Límite de archivo abierto utilizado: 25% (259 / 1K) [OK] Bloqueos de tabla adquiridos inmediatamente: 100% (492 inmediatos / 492 bloqueos) -------- Recomendaciones ----------------------------------------- ------------ Recomendaciones generales: Ejecute OPTIMIZE TABLE para desfragmentar tablas para un mejor rendimiento MySQL comenzó en las últimas 24 horas: las recomendaciones pueden ser inexactas Reduzca su huella general de memoria MySQL para la estabilidad del sistema Variables a ajustar: *** El uso máximo de memoria de MySQL es peligrosamente alto *** *** Agregue RAM antes de aumentar las variables del búfer MySQL *** key_buffer_size (> 9.4M)
¿Pero estoy un poco confundido sobre cómo reducir el uso máximo de memoria? Parece estar basado en key_buffer y max_ connections, pero ¿debe haber algo más involucrado también?
my.cnf:
key_buffer = 8M max_allowed_packet = 12M thread_stack = 128K thread_cache_size = 8 max_ connections = 20 table_cache = 128 tmp_table_size = 256M max_heap_table_size = 256M join_buffer_size = 256K query_cache_limit = 8M query_cache_size = 64M
He estado tratando de leer los artículos de ajuste de MySQL, ¡pero parecen estar dirigidos a personas que ya saben lo que están haciendo! Cualquier ayuda sería apreciada. ¡Gracias!
Respuestas:
Tiene un servidor con 256M, pero no puede usar todo eso; recuerde que hay algunos gastos generales del sistema operativo. Agregue a eso el hecho de que se está comprometiendo demasiado como lo han mencionado otras personas y definitivamente golpeará aquí. 256M es suficiente para una pequeña base de datos, 20 conexiones son muchas con lo que has configurado.
1) reduce tus conexiones máximas a 4 (estás usando 3 de 20)
2) optimiza mejor tu caché de consultas; 8M es realmente grande, y 64M en total se basan mucho en tus golpes / ciruelas pasas; pruebe un combo 4/32 y vea cómo va. Realmente creo que un combo de 2/24 funcionaría para ti.
3) no tiene ningún tipo que requiera tablas temporales, ¿por qué ese verbo max_heap_table_size está ahí? Comenta eso, usa los valores predeterminados
4) ¿realmente tienes 128 mesas? Intenta cortar esa tabla_caché a la mitad a 64 o 48
5) reduce thread_cache_size a 4
6) optimizar esas tablas para reducir la fragmentación
Esas son algunas cosas para comenzar. Parece que arrojó un montón de números en una configuración sin ningún perfil real para saber lo que necesita y ha creado un desastre; Si todo lo demás falla, regrese a los valores predeterminados, elimine su configuración personalizada y comience de nuevo utilizando algunas guías de ajuste de rendimiento que puede encontrar en Google. Obtenga la salida de SHOW VARIABLES y SHOW STATUS, encuentre cualquiera de las miles de guías de ajuste y conecte sus números reales y reales en sus ecuaciones y eso le dirá los números exactos que necesita para poner en su archivo de configuración.
fuente
No soy un gurú de MySQL y no puedo diagnosticar el problema con esta información, pero intenté buscar la fórmula en el código fuente. Aquí está:
Dónde:
y:
Ahora debe verificar cada uno de estos valores y determinar cuál es el responsable de este gran número. Y no confíe en este script sin reservas: intenté ejecutarlo en uno de mis servidores de base de datos y calculó que la memoria máxima es el 140% de la cantidad total de memoria física, pero el sistema ha estado funcionando durante años sin problemas de estabilidad.
¡Buena suerte!
fuente
Si no recuerdo mal, MySQL Tuner usa la siguiente fórmula para estimar el uso máximo:
Tenga en cuenta que esto no es 100% correcto, y de hecho es solo una estimación, ya que ciertas configuraciones en MySQL no tienen un límite definido.
Puede comenzar a atenuar algunas de las configuraciones en su archivo de configuración y ejecutar el sintonizador nuevamente, pero le aconsejaría que obtenga la ayuda de un experto si no tiene tiempo que perder cambiando my.cnf, reiniciando y ejecutando el sintonizador.
fuente
El uso del software mysqlcalculator.com puede ahorrarle muchas horas.
fuente