将RAM专用于MySQL数据库中的特定表

时间:2012-01-05 20:54:12

标签: mysql optimization

有什么方法可以强制MySQL在RAM中存储特定的表(除了使用内存存储引擎)?

我的数据库在InnoDB表中包含+200 GB(我不想存储在RAM中)和使用MyISAM引擎的10个表(~100 MB)。

我的目标是尽可能快地访问MyISAM表(如果需要,我可以更改MyISAM表的存储引擎或将它们移动到同一服务器上的另一个数据库)。

我的db-server正在运行Linux并且有10 GB RAM。

1 个答案:

答案 0 :(得分:2)

假设如下:

  • datadir是/ var / lib / mysql
  • 您的数据库名为mydb
  • mydb
  • 中有MyISAM表t1,t2和t3
  • 您要创建名为memorydb
  • 的内存数据库

您可以执行以下操作:

  • 步骤01)service mysql stop
  • 步骤02)创建RAM磁盘
  • 步骤03)mkdir /var/lib/mysql/memorydb
  • 步骤04)chown mysql:mysql /var/lib/mysql/memorydb
  • 步骤05)将RAM磁盘挂载到/var/lib/mysql/memorydb
  • 步骤06)service mysql start
  • 步骤07)mysql> ALTER TABLE mydb.t1 RENAME memorydb.t1;
  • 步骤08)mysql> ALTER TABLE mydb.t2 RENAME memorydb.t2;
  • 步骤09)mysql> ALTER TABLE mydb.t3 RENAME memorydb.t3;

在步骤6之后,memorydb应该在information_schema.schemata

中注册

如果要将表的副本保留在mydb中,请在步骤6之后执行以下操作

  • 步骤07)mysql> CREATE TABLE memorydb.t1 LIKE mydb.t1;
  • 步骤08)mysql> INSERT INTO memorydb.t1 SELECT * FROM mydb.t1;
  • 步骤09)mysql> CREATE TABLE memorydb.t2 LIKE mydb.t2;
  • 步骤10)mysql> INSERT INTO memorydb.t2 SELECT * FROM mydb.t2;
  • 步骤11)mysql> CREATE TABLE memorydb.t3 LIKE mydb.t3;
  • 步骤12)mysql> INSERT INTO memorydb.t3 SELECT * FROM mydb.t3;

确保您有足够的RAM来存放MyISAM表。

试一试!!!