最好的Mysqlcaching设置为8GB内存专用MySQL服务器只使用Innodb(5GB数据库)

我是一个非常大的noob当涉及到设置MySQL的性能。 老实说,我并不担心微调会挤出MySQL的每一个performance,但我知道最重要的事情是提供一些最好的结果是正确设置caching/caching。

我试图通过只使用innodb作为存储引擎来保持简单。 而且我有一个专用的服务器的MySQL。 它有8GB的RAM,我应该如何分配,以最大限度地提高性能? 我希望能够将我的整个数据库放到内存中以获得最佳性能。 数据库大概是5GB。 这可能吗?

我应该分配多less内存给查询caching? innodb缓冲池多less钱? 电脑的其余部分(即非MySQL相关的进程)多less钱? 等等。

由于我没有使用MyISAM,我真的不需要把正确的密钥caching中的大量内存?

这很难不知道数据库本身。 有几个工具你应该知道;

关于将整个数据库存储在内存中; 任何正在对数据库进行更改的查询都将保持打开状态,直到在磁盘上执行写操作为止。 唯一可以避免磁盘成为瓶颈的是具有写入caching的磁盘控制器。

我将从默认值开始进行以下更改:

key_buffer_size = 128M thread_stack = 128K thread_cache_size = 8 table_cache = 8192 max_heap_table_size = 256M query_cache_limit = 4M query_cache_size = 512M innodb_buffer_pool_size = 4G # This is crucial to avoid checkpointing all the time: innodb_log_file_size = 512M # If you have control on who consumes the DB, and you don't use hostnames when you've set up permissions - this can help as well. skip_name_resolve 

然后,我会看到情况如何,并根据(除其他外)上述工具的输出来尝试不同的事情。 我还要确保用一个监测工具(如Munin或Cacti )来描绘趋势,看看我实际处理的是什么样的工作量。 就我个人而言,我对使用Munin提供的MySQL插件有很好的经验。

恕我直言,你应该可以去

 innodb_buffer_pool_size=5G 

这将是RAM的62.5%,并且服务器操作系统的内存数量足够大,并且还需要DB连接的内存

@kvisle推荐使用mysqltuner.pl。 该脚本非常适合判断用于join_buffer_size,sort_buffer_size,read_buffer_size和read_rnd_buffer_size的RAM数量。 这4个缓冲器加在一起乘以max_connections。 该答案被添加到静态缓冲区(innodb_buffer_pool_size + key_buffer_size)。 报告总和。 如果总和超过RAM的80%,那么必须降低这些缓冲区大小。 mysqltuner.pl在这方面将非常有帮助。

由于你所有的数据都是InnoDB,你可以使key_buffer_size(MyISAM索引的关键cachingcaching)非常低(我推荐64M)。

这是我在DBA StackExchange中发布的一篇文章,用于计算innodb_buffer_pool_size的build议大小 。

更新2011-10-15 19:55 EDT

如果你知道你将有5GB的数据,那么我的第一个build议是好的。 但是,我忘了补充一件事情:

 [mysqld] innodb_buffer_pool_size=5G innodb_log_file_size=1280M 

日志文件大小必须是InnoDB缓冲池的25%

更新2011-10-16 13:36 EDT

25%的规则严格基于使用两个日志文件。 尽pipe可以使用多个innodb日志文件,但通常两个效果最好。

其他人则表示使用25%

然而,平心而论,来自原InnoBase Oy公司的人表示,由于具有更大的InnoDB缓冲池,因此不使用25%的规则 。

自然,当拥有大量的RAM时,25%的规则就不能工作。 实际上,只允许使用2个日志文件的最大innodb_log_file_size是2047M,因为日志文件的大小必须小于4G(4096M)

案例点:我的雇主的客户之一有一个DB服务器192GB RAM。 没有办法有48G日志文件。 我simlpy使用最大文件大小为一个innodb日志文件,2047M。 @ Kvisle对我的回答的评论只是给出了一个链接,说明你不必限制自己到两个日志文件。 如果你有N个日志文件,他们不能总计4G。 我的25%的规则只是在一个完美的世界(8GB或更less的DB服务器)。