2010-03-21 13 views
7

Tengo una base de datos innodb de MySQL en 1.9GB, que se muestra mediante el siguiente comando.Cargar una base de datos innodb MySQL en la memoria

SELECT table_schema "Data Base Name" 
    , sum(data_length + index_length)/1 048 576 
     as "Data Base Size in MB" 
    , sum(data_free)/ 1 048 576 
     as "Free Space in MB" 
FROM information_schema.TABLES 
GROUP BY table_schema ; 

+--------------------+----------------------+------------------+ 
| Data Base Name  | Data Base Size in MB | Free Space in MB | 
+--------------------+----------------------+------------------+ 
| database_name  |  1959.73437500 | 31080.00000000 | 

Mis preguntas son:

  1. significa si me puse el innodb_buffer_pool_size 2 GB o más grande, toda la base de datos pueden ser cargados en la memoria mucho menos leído de solicitudes de disco son necesarias?

  2. ¿Qué significa el espacio libre de 31GB?

  3. Si la RAM máxima se puede asignar a innodb_buffer_pool_size es 1GB, ¿es posible especificar qué tablas cargar en la memoria mientras que otras siempre se leen desde el disco?

Gracias de antemano.

Respuesta

7
  1. No exactamente. El grupo de búferes de InnoDB se usa para almacenar y leer registros. si se lee la mayor parte de su acceso, la mayoría si se almacenará en caché y se necesitará menos acceso a los discos.
  2. podría ser este bug, no está bien documentado pero creo que data_free es el espacio disponible dentro de los archivos innodb (si escribe más de esto, InnoDB tendrá que agrandar los archivos de datos).
  3. no, pero InnoDB almacenará en caché los datos a los que accede más automáticamente, por lo que debería tener un efecto óptimo de todos modos.

considere usar memcached como una capa de caché para eliminar por completo el acceso a la base de datos si necesita un mejor rendimiento.

2
  1. Es mejor preocuparse por tener suficiente memoria para almacenar en caché los índices en RAM, y dejar los datos en el disco. El rendimiento de la base de datos sufre mucho si los índices deben leerse desde el disco cada vez, mucho más que la sobrecarga de recuperar más tarde los datos deseados del disco.
  2. Los archivos de datos InnoDB se crean en un tamaño fijo, con la opción de autoextenderlos (crear archivos adicionales) si se llenan. Puede ver cuál es el tamaño por archivo con show variables like 'innodb_data_file_path'. El espacio libre informado es la cantidad de archivos de datos actuales que no se utilizan. En tu caso, tienes 2gigs de datos almacenados en (más probable) 32gigs de archivos de datos InnodB, dejando 30 gig disponibles.
  3. ¿Hay alguna razón por la que quiera omitir la propia lógica de caché de InnoDB para fijar tablas específicas en ram? La memoria caché naturalmente tenderá a mantener los datos más frecuentemente accedidos en RAM, y el rendimiento sin duda sufrirá si lo fuerza a mantener los datos menos utilizados en lugar de los más populares.
Cuestiones relacionadas