mysql - 将 MySQL innodb 数据库加载到内存中

标签 mysql memory caching innodb ram

我有一个 1.9GB 的 MySQL innodb 数据库,通过以下命令显示。

SELECT table_schema "Data Base Name"
     , sum( data_length + index_length ) / 1 048 576 
       as "Data Base Size in MB"
     , sum( data_free )/ 1 048 576  
       as "Free Space in MB"
FROM information_schema.TABLES
GROUP BY table_schema ; 

+--------------------+----------------------+------------------+
| Data Base Name     | Data Base Size in MB | Free Space in MB |
+--------------------+----------------------+------------------+
| database_name      |        1959.73437500 |   31080.00000000 | 

我的问题是:

  1. 这是否意味着如果我将 innodb_buffer_pool_size 设置为 2GB 或更大,整个数据库可以加载到内存中,从而需要从磁盘请求中读取更少?

  2. 31GB的可用空间是什么意思?

  3. 如果可以分配给 innodb_buffer_pool_size 的最大 RAM 为 1GB,是否可以指定将哪些表加载到内存中,同时让其他表始终从磁盘读取?

提前致谢。

最佳答案

  1. 不完全是。 InnoDB 缓冲池用于缓冲读取和写入。如果您的大部分访问都被读取,那么大部分访问将被缓存,并且需要更少的磁盘访问。
  2. 可能是 bug ,它没有很好地记录,但我认为 data_free 是 innodb 文件中的可用空间(如果你写的比这个 InnoDB 多,则必须扩大数据文件)。
  3. 不会,但 InnoDB 会自动缓存您最常访问的数据,因此无论如何它应该具有最佳效果。

考虑使用 memcached如果您需要更好的性能,可以作为缓存层完全消除数据库访问。

关于mysql - 将 MySQL innodb 数据库加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486092/

相关文章:

android - 如何在android中缓存和存储对象并设置过期策略?

C#缓存缓存依赖的使用

mysql查询后端排序结果

针对最大值的 MySQL 查询优化

php - 显示某些 MySQL 表

iOS 内存利用率读数

python - Django 内存缓存 : Compare and Set

php - 搜索MySQL数据库中的多个表

python - 逻辑回归内存错误

1 MB 或更多的 Java 字节数组占用两倍的 RAM