17 votos

MySQL: ¿Cómo puedo obtener mi "Máximo posible" uso de la memoria hacia abajo?

Recientemente he estado teniendo problemas con la paliza como resultado de la ejecución de la memoria. (Mi VPS tiene 256 MB en total)

Estoy tratando de ajustar MySQL usando mysqltuner.pl y obtienen los siguientes resultados:

-------- Estadísticas Generales--------------------------------------------------
[--] Omitido la revisión de la versión para MySQLTuner script
[OK] en la Actualidad ejecutan las versión de MySQL 5.0.51 a-3ubuntu5.4-registro de
[OK] Operando en la arquitectura de 64 bits

-------- Motor De Almacenamiento De Estadísticas-------------------------------------------
[--] Estado: +Archive-BDB-Federado-InnoDB-ISAM-NDBCluster 
[--] De datos en tablas MyISAM: 114M (Tablas: 454)
[!!] Total fragmentado tablas: 34

-------- Las Métricas De Rendimiento-------------------------------------------------
[--] Para: 40s (570 q [14.250 qps], 23 de conn, TX: 154K, RX: 23K)
[--] Lee / Escribe: 100% / 0%
[--] Total de los búferes: 338.0 M global + 2.7 M por hilo (20 max hilos)
[!!] Máximo posible el uso de la memoria: 392.9 M (153% de la memoria RAM instalada)
[OK] consultas Lentas: 0% (5/570)
[OK] Mayor uso de conexiones disponibles: 15% (3/20)
[!!] Tecla de tamaño de búfer / total MyISAM índices: 8.0 M/9.4 M
[!!] Key buffer tasa de éxito: 57.1% (7 caché / 3 lecturas)
[OK] Consulta de la eficacia de la caché: 21.9% (7 caché / 32 selecciona)
[OK] caché de Consultas ciruelas por día: 0
[OK] Tipo que requieren de tablas temporales: 0% (0 temp tipo / 1 clase)
[OK] las tablas Temporales creadas en disco: 0% (0 en el disco / 32 en total)
[OK] Hilo tasa de aciertos de caché: 86% (3 creado / 23 conexiones)
[OK] de la Tabla de tasa de aciertos de caché: 26% (128 abrir / 484 abierto)
[OK] Abrir el límite de archivo utilizado: 25% (259/1K)
[OK] de la Tabla de bloqueos adquiridos inmediatamente: 100% (492 inmediata / 492 cerraduras)

-------- Recomendaciones-----------------------------------------------------
Recomendaciones generales:
 Ejecutar OPTIMIZAR TABLA para desfragmentar tablas para un mejor rendimiento
 MySQL iniciarse dentro de las últimas 24 horas - recomendaciones pueden ser inexactos
 Reducir su total MySQL huella de memoria para la estabilidad del sistema
Variables para ajustar:
 *** MySQL máximo el uso de la memoria es peligrosamente alta ***
 *** Agregar memoria RAM antes de aumentar MySQL búfer de variables ***
 key_buffer_size (> 9.4 M)

Pero estoy un poco confundida sobre cómo obtener el máximo uso de memoria hacia abajo? Parece estar basada en key_buffer y max_connections, pero debe haber algo más involucrado?

mi.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 a través de MySQL optimización de artículos, pero que parece dirigido a las personas que ya saben lo que están haciendo! Cualquier ayuda se agradece. Gracias!

11voto

troyengel Puntos 3581

Usted tiene un servidor con 256M, pero no puede usar todo eso ... recuerden que hay algunos OS sobrecarga. Añadir a que el hecho de que usted está cometiendo como otras personas han mencionado y que sin duda va a thrash aquí. 256M sólo es suficiente para una pequeña DB, 20 conexiones es mucho con lo que tienes configurado.

1) reducir su máximo de conexiones a 4 (estás usando 3 de 20)

2) optimizar la caché de consultas mejor; 8M es muy grande, y 64M total es mucho, en función de sus hits/ciruelas pasas; trate de un 4/32 combo y ver cómo va. Realmente creo que un 2/24 combinado el trabajo para usted.

3) usted no tiene ningún tipo que requieren de tablas temporales, por eso es que max_heap_table_size verbo no? Comentar que fuera, utilice los valores predeterminados

4) ¿usted realmente tiene 128 tablas? Trate de cortar que table_cache en la mitad de 64 o 48

5) reducir thread_cache_size a 4

6) optimizar las tablas para reducir la fragmentación de

Esas son algunas cosas para empezar. Parece que le tiró un montón de números en una configuración sin ningún reales de perfiles para saber lo que necesita y han creado un desastre; si todo lo demás falla volver a los valores predeterminados y deshacerse de sus ajustes personalizados y empezar de nuevo el uso de algunos de ajuste del rendimiento de las guías se pueden encontrar en Google. Obtener la salida de SHOW VARIABLES y MOSTRAR la SITUACIÓN, encontrar a nadie de un bajillion optimización de las guías y el enchufe en su real, los números reales en sus ecuaciones y que voy a decirle exactamente-ish números que usted necesita para poner en su archivo de configuración.

9voto

Georgi Hristozov Puntos 437

Yo no soy un MySQL gurú y yo no puede diagnosticar el problema con esta información, pero he intentado buscar la fórmula en el código fuente. Aquí está:

server_buffers + total_per_thread_buffers * max_connections

Donde:

server_buffers = key_buffer_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size + query_cache_size

y:

total_per_thread_buffers = read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size

Ahora usted tiene que comprobar cada uno de estos valores y averiguar cuál de ellos es el responsable de este gran número. Y no confían en esta secuencia de comandos sin reservas - he intentado correr en una de mis DB servidores y se calcula que la memoria máxima es de 140% de la cantidad total de memoria física, pero el sistema ha estado funcionando durante años sin problemas de estabilidad.

Buena suerte!

0voto

Amalia Puntos 16

Si recuerdo correctamente, MySQL Sintonizador utiliza la siguiente fórmula para estimar la máxima de uso:

read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size

Tenga en cuenta que esto no es 100% correcto, y de hecho es sólo una estimación, como ciertos valores de configuración de MySQL no tiene límite definido.

Usted puede comenzar a bajar el tono de algunos de los ajustes en el archivo de configuración y la ejecución del sintonizador de nuevo, pero me gustaría aconsejar a llegar la ayuda de un experto si usted no tiene tiempo para perder el tiempo cambiando mi.cnf, reiniciar y ejecutar el sintonizador.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: