严格地说只有RAM很重要?


4

我必须在一个项目上工作,该项目会有一个超过十亿记录的大表,但只有两个字段,一个是id,另一个是文本。

并且id将被设置为BIGINT和PK,然后如果每行的8 + 2(额外2字节的开销)字节被用于索引,那么在我的计算中64GB RAM应该足以容纳至少50亿条记录索引。

但我唯一考虑的因素之一。

您是否认为我还应该考虑其他因素?

如果需要,RAM大小也可以增加。 而这张桌子是最繁忙的桌子,写着很少,很多的阅读。

+1

我可以询问有关这个项目更多的信息?这张桌子的用意是什么?你想解决什么问题? 15 9月. 112011-09-15 07:14:14

3

您需要考虑您将为您的项目使用的存储引擎,因为每个存储引擎对MySQL缓存不同。

MyISAM只缓存索引页。 InnoDB缓存数据和索引页面。

鉴于你有一个大型ID表,我希望你使用MyISAM。

下面是一个查询,以帮助您确定最佳的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; 

这将给推荐设置为给定当前的数据集(the query will cap the recommendation at 4G (4096M).对于32位操作系统,4GB的MyISAM键高速缓冲(key_buffer_size的)已是极限。对于64位,8GB。

UPDATE 2011-09-16 14:49 EDT

如果你正使用InnoDB,施胶的key_buffer_size也无济于事。InnoDB and MyISAM cache differently

这里是同一类型的查询,评估您的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

有趣的是我正在考虑使用InnoDB,因为它在负载下工作更好。所以,我从你的答案中得知,只要有足够的密钥缓存。数据库大小无关紧要? 16 9月. 112011-09-16 16:56:43

  0

我使用InnoDB更新了地址的答案 16 9月. 112011-09-16 18:49:40

  0

但是正如你所提到的那样,MyISAM的最大上限为8GB,那么这意味着超出了RAM资源将无法有效利用的程度? {对不起,这个问题太迟了..} 01 10月. 112011-10-01 22:14:09

+1

@加里:你说得对。为key_buffer_size分配高于8GB的内存将被浪费。这是至关重要的,因为只有索引页面被MyISAM缓存。您可以创建专用于特定MyISAM表的关键缓存:http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 10月. 112011-10-01 22:41:42