我需要多less内存才能加载50GB + MySQL表?

我有一个44GB的.MYD文件和34GB的.MYI文件的MySQL表。 我从命令行运行脚本来分析这个表中的数据。 MySQL并不是最大化CPU,我的内存是最大的,VMSTAT报告数据正在交换到磁盘…但我不是非常熟悉这个工具,它是报告。

我正在运行一个高内存双XL亚马逊EC2实例。 它有34GB的RAM。 我不太熟悉MySQL调优,系统在Linux CentOS上以默认安装运行。

当前的机器是否有足够的内存来有效地处理这个表格? 我还需要担心哪些其他configuration? 可用的最大的系统有68GB的内存。 当MySQL加载一个表时,究竟是什么加载到内存中? 我想更好地理解正在发生的事情。

请记住,MyISAM不会cachingMyISAM数据。 它只cachingMyISAM索引。

MyISAM密钥caching(按key_buffer_size大小)在32位系统中的最大大小为4GB。 您可以在64位系统中使MyISAM密钥caching更大。

如果您必须caching整个.MYI文件,以下是可以帮助您的内容:

尝试使用专用的MyISAM密钥caching。

例如,假设您有一个名为mydb.mytable的MyISAM表,它的.MYI文件是34 GB。

以下是如何为该表设置专用密钥caching:

SET GLOBAL my_dedicate_keycache.key_buffer_size = 1024 * 1024 * 1024 * 34; CACHE INDEX mydb.mytable INTO my_dedicate_keycache; LOAD INDEX INTO CACHE mydb.mytable; 

这是一个很大的文件。 你怎么想在mysql启动时加载它?

创build一个名为/var/lib/mysql/startup_stuff.sql的文件

 cd /var/lib/mysql echo "SET GLOBAL my_dedicate_keycache.key_buffer_size = 1024 * 1024 * 1024 * 34;" > startup_stuff.sql echo "CACHE INDEX mydb.mytable INTO my_dedicate_keycache;" >> startup_stuff.sql echo "LOAD INDEX INTO CACHE mydb.mytable;" >> startup_stuff.sql 

接下来,将其添加到/etc/my.cnf

 [mysqld] init_file=/var/lib/mysql/startup_stuff.sql 

最后重启mysql

 service mysql restart 

下载mysql调谐器,并尝试导入后运行它。 它会告诉你在/etc/my.cnf 32GB内存中调整哪些设置应该足够了,如果你已经设置好了索引。