mysql - 将 RAM 分配给 MySQL 数据库中的特定表

标签 mysql optimization

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

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

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

我的数据库服务器运行的是 Linux 并且有 10 GB RAM。

最佳答案

假设如下:

  • 数据目录是/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) 服务 mysql 启动
  • 步骤 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步之后,应该在information_schema.schemata中注册了memorydb

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

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

只需确保您有足够的 RAM 来容纳您的 MyISAM 表。

试一试!!!

关于mysql - 将 RAM 分配给 MySQL 数据库中的特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749643/

相关文章:

mysqldump : Couldnt execute SET OPTION SQL_QUOTE_SHOW_CREATE=1 mysql 5. 6

c - 为什么在这种情况下 SSE 矢量化速度不快?

python - 为数百万行优化 python 循环

php - redis 能否提高我的mysql 性能以及如何将数据存储在类似于db 表的redis 中?

sql - mysql匹配查询问题

php - 转换 SQL 的日期格式

java arraylist排序和优化

optimization - 考虑到所有类型的优化,glUniform4f/glUniform4fv 更快是什么?

c - C 中的 SHA256 性能优化

mysql - 尽管存在索引,但复杂的 MySQL 查询仍在使用文件排序