MySQL – 有没有一种很好的方式存储在内存中

我试图想办法让MySQL更快。 有没有一种经过validation的方式将其存储在内存中以使其运行速度更快?

MEMORY存储引擎如何?

另一个select是创build一个虚拟硬盘,并在其中使用MyISAM或INNODB表。 不过,我会想象,使用MEMORY存储引擎的性能会更好,因为它是从头devise存储在内存中的,而其他表types则是在存储在磁盘上。

首先,请自己帮忙,并用大量的盐来记忆引擎的build议。

当然,除非你不需要以下任何一项:

  • MVCC
  • 交易
  • multithreading访问
  • 聚集指数
  • 外键支持
  • 不只是偶尔的INSERT / UPDATE
  • 你的数据

如果你不需要这些,那么你不应该使用MySQL。 使用像memcached这样简单的键值存储。

如果你需要这些(提示:你这样做),那么使用InnoDB,尽可能多的RAM,以及正确configuration的innodb_buffer_pool_size 。 MySQL性能博客有一篇关于configurationinnodb_buffer_pool_size的优秀文章。 简短而又甜蜜 – 您需要足够的RAM来将整个数据库表空间和索引放入RAM中,并将innodb_buffer_pool_size设置为专用MySQL服务器总系统RAM的70-80%。

RAM SAN非常昂贵,但令人兴奋的IO。 RAMdisk是一个非常糟糕的主意,因为在发生系统断电或致命系统错误的情况下,RAMdisk将不再像RAM一样。

  • 尝试使用memcached来caching重度查询。
  • 尝试原生mysql查询cachingfunction,它本来就是禁用的,并对静态/半静态表查询产生巨大的影响。
  • 尝试不在MySQL中sorting巨大的查询,将原始数据扔到代码中,然后sorting,然后caching。
  • 尝试提高mysql的内存限制。

你可能想把一些监视器(比如munin )放在你的服务器上,以确保mysql是真正的问题,当你处理非caching查询时,通常它是非常昂贵的。 如果一切都失败了,你将需要花费一些钱来获得SSD存储解决scheme。

按照ErikA的build议玩MEMORY存储引擎。 但是要确保你也在优化所有的查询caching,线程caching和缓冲区设置。 mysqltuner.pl是一个很好的起点。