7 votos

¿Cómo puedo asignar un límite de memoria para mySQL?

mysql sintonizador de informes que mySQL se puede utilizar un 166% de la memoria ram instalada, ¿cómo puedo limitar el uso de la RAM ?

[!!] Máximo posible el uso de la memoria: 426.8 M (166% de la memoria RAM instalada)

8voto

RolandoMySQLDBA Puntos 10660

Usted puede configurar

  • Todos MyISAM
  • Todos InnoDB
  • La mezcla de MyISAM y InnoDB

Antes de asignar memoria a motor, es bueno reflexionar sobre lo que el almacenamiento en caché va con cada Motor de Almacenamiento

La configuración para MYISAM

El principal mecanismo utilizado es la clave de caché. Sólo se almacena en caché las páginas de índice .MYI archivos. Para cambiar el tamaño de la caché de claves, ejecute la siguiente consulta:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Esto le dará el valor Recomendado para el Caché de Claves de MyISAM (key_buffer_size) dada su actual conjunto de datos (la consulta se tapa la recomendación en 4G (4096M). Para sistemas operativos de 32 bits, 4 GB es el límite. Para 64 bits, 8 GB.

La configuración para InnoDB

El principal mecanismo utilizado es el de InnoDB grupo de búferes. Almacena los datos y las páginas de índice de tablas InnoDB acceso. Para el tamaño de su InnoDB grupo de Búfer, ejecute la siguiente consulta:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Esto le dará el valor Recomendado para el tamaño de la InnoDB grupo de Búfer (innodb_buffer_pool_size) dada su actual conjunto de datos.

No olvides cambiar el tamaño de la InnoDB Archivos de Registro (ib_logfile0 y ib_logfile1). MySQL de Código Fuente se coloca una tapa de la combinación de los tamaños de todos los InnoDB Archivos de Registro debe ser < 4G (4096M). (NOTA: Percona Server binarios de superar esto. Recientemente he configuración de un servidor de base de datos grande con 4G para una sola InnoDB Archivo de Registro mediante innodb_log_file_size)

Por el bien de la simplicidad, dado que sólo dos de los archivos de registro, aquí es cómo se puede cambiar el tamaño de ellos:

  • Paso 1) agregar innodb_log_file_size=NNN /etc/my.cnf (NNN debe ser de 25% de innodb_buffer_pool_size o 2047M, el que sea menor)
  • Paso 2) servicio de mysql stop
  • Paso 3) rm /var/log/mysql/ib_logfile[01]
  • Paso 4) service mysql start (ib_logfile0 y ib_logfile1 son recreados)

ADVERTENCIA

Al Final de ambas consultas es una de una línea de Consulta : (SELECT 2 PowerOfTwo) B

  • (SELECT 0 PowerOf1024) le da el valor en Bytes
  • (SELECT 1 PowerOf1024) le da el valor en Kilobytes
  • (SELECT 2 PowerOf1024) le da el valor en Megabytes
  • (SELECT 3 PowerOf1024) da la opción de Configuración en Gigabytes
  • No hay poderes menor que 0 o mayor que 3 es aceptado

EPÍLOGO

No hay ningún sustituto para el sentido común. Si la memoria es limitada, una mezcla de los motores de almacenamiento, o una combinación de los mismos, usted tendrá que ajustar para diferentes escenarios.

Si usted tiene 2GB de RAM y 16GB de InnoDB, asignar los 512M como innodb_buffer_pool.

Si usted tiene 2GB de memoria RAM y 4 gb de MyISAM Índices, asignar los 512M como key_buffer_size.

Si usted tiene 2GB de memoria RAM y 4 gb de MyISAM Índices y 16GB de InnoDB, asignar los 512M como key_buffer_size y 512M como innodb_buffer_pool.

Los escenarios posibles son infinitas !!!

Recuerde, lo que usted distinguir, deje suficiente RAM para DB Conexiones y el Sistema Operativo.

3voto

Alex Puntos 5342

Usted debe retocar key_buffer_size y innodb_buffer_pool_size en su my.cnf, estos dos son los más importantes valores relacionados con la memoria. Para obtener su actual de los valores de uso show variables like 'key_buffer_size'; y show variables like 'innodb_buffer_pool_size'; en mysql de la línea de comandos de cliente.

3voto

Oskar N. Puntos 2124

en caso de Motor Myisam

key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections

este valor indica la cantidad de memoria que mysql se puede consumir.Este debe ser menos que su memoria RAM o casi el 60 % de la RAM. en caso de innodb innodb_buffer_pool_size debe ser menor que la memoria RAM o el 60% de la memoria ram

Melodía por encima de los valores,de modo que el uso de la RAM será de 60% de la RAM.

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: