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

将MySQL innodb数据库加载到内存中,mysql,memory,caching,innodb,ram,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.TAB

我有一个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 | 
我的问题是:

  • 这是否意味着如果我将innodb_buffer_pool_大小设置为2GB或更大,那么整个数据库可以加载到内存中,因此需要从磁盘请求读取的数据就少得多

  • 31GB的可用空间意味着什么

  • 如果可以为innodb\u buffer\u pool\u分配的最大RAM大小为1GB,是否可以指定要加载到内存中的表,同时保持其他表始终从磁盘读取

  • 提前谢谢

  • 不完全是。InnoDB缓冲池用于缓冲读取和写入。如果大部分访问都是读取的,那么大部分访问都将被缓存,并且需要的磁盘访问将更少
  • 可能是这样的,它没有很好的文档记录,但我认为data_free是innodb文件中的可用空间(如果您写入的内容超过此数量,innodb将不得不放大数据文件)
  • 不会,但InnoDB将缓存您最自动访问的数据,因此它应该具有最佳效果
  • 如果需要更好的性能,可以考虑使用缓存层来完全消除数据库访问

  • 最好是担心有足够的内存将索引缓存在ram中,并将数据留在磁盘上。如果每次都必须从磁盘读取索引,则数据库性能会受到很大影响,这远远超过以后从磁盘检索所需数据的开销
  • InnoDB数据文件以固定大小创建,如果文件已满,可以选择自动扩展(创建额外文件)。您可以使用
    显示变量,如'innodb\u data\u file\u path'
    查看每个文件的大小。报告的可用空间是当前数据文件中有多少未使用。在您的情况下,您有2G的数据存储在(很可能)32Gig的InnodB数据文件中,剩下30gig可用
  • 是否有任何理由想绕过InnoDB自己的缓存逻辑,将特定的表固定在ram中?缓存自然会倾向于将访问频率最高的数据保存在ram中,如果强制它保存使用频率较低的数据而不是最常用的数据,那么性能无疑会受到影响