¿Sólo la memoria RAM importa?


4

Tengo que trabajar en un proyecto que tendría una tabla extra grande con miles de millones de registros, pero solo dos campos, uno es id y el otro es texto.

Y la identificación se establecería en BIGINT y PK luego, si se toman en cuenta los 8 bytes (2 bytes adicionales por sobrecarga) por fila, en mi cálculo, la memoria RAM de 64 GB debería ser suficiente para mantener un índice de al menos 5 mil millones de registros.

Pero es un solo factor que estoy considerando.

¿Crees que también hay otros factores que debería considerar?

Y el tamaño de la RAM también se puede aumentar si es necesario. Y esa tabla sería la tabla más ocupada con pocas escrituras y muchas lecturas.

+1

¿Puedo pedir un poco más de información sobre este proyecto?¿Para qué se utiliza esta tabla?¿Que problema estas tratando de resolver? 15 sep. 112011-09-15 07:14:14

3

Debe considerar el motor de almacenamiento que usará para su proyecto porque MySQL se almacena en caché de manera diferente para cada motor de almacenamiento.

MyISAM almacena en caché las páginas de índice solamente.InnoDB almacena en caché los datos y las páginas de índice.

Dado que tiene una tabla con identificadores grandes, espero que esté usando MyISAM.

Aquí hay una consulta para ayudarlo a determinar la mejor key_buffer_size:

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á la Configuración recomendada para el Caché de clave MyISAM (the query will cap the recommendation at 4G (4096M). clave) dado su conjunto de datos actual (the query will cap the recommendation at 4G (4096M). Para sistemas operativos de 32 bits, 4GB es el límite. Para 64 bits, 8GB.

ACTUALIZACIÓN 2011-09-16 14:49 EDT

Si está utilizando InnoDB, el tamaño de key_buffer_size no ayudará.InnoDB and MyISAM cache differently .

Este es el mismo tipo de consulta para dimensionar su grupo de búferes InnoDB:

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;
  0

Curiosamente, estoy pensando en usar InnoDB porque funciona mejor bajo carga.Entonces, lo que aprendí de su respuesta es que siempre que haya suficiente caché de claves.Tamaño de DB no importa? 16 sep. 112011-09-16 16:56:43

  0

Actualicé mi respuesta a la dirección usando InnoDB 16 sep. 112011-09-16 18:49:40

  0

Pero como mencionó que el límite máximo es de 8 GB para MyISAM, ¿significa que más allá de eso, los recursos de RAM no se utilizarán de manera eficiente?{Perdón por hacer esta pregunta demasiado tarde ...} 01 oct. 112011-10-01 22:14:09

+1

@Gary: Tienes razón.La memoria asignada por encima de 8 GB para key_buffer_size se desperdicia.Esto es crítico ya que solo las páginas de índice se almacenan en caché para MyISAM.Puede crear cachés de claves dedicadas a tablas MyISAM específicas: http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 oct. 112011-10-01 22:41:42