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

jac*_*ack 9 mysql memory ram caching innodb

我有一个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 | 
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

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

  3. 如果最大RAM可分配给innodb_buffer_pool_size为1GB,是它可以指定哪些表加载到内存,同时防止其他人总是从磁盘读取?

提前致谢.

Omr*_*dan 7

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

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