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

9

我有一个MySQL innodb数据库,大小为1.9GB,可以通过以下命令查看。

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. 如果最大RAM可以分配给innodb_buffer_pool_size为1GB,那么是否可能指定要加载到内存中的表,同时保持其他表始终从磁盘读取?

提前致谢。

2个回答

7
  1. 不完全正确。InnoDB缓冲池用于缓存读写。如果您的大部分访问是读取,则大部分将被缓存,需要较少的磁盘访问。
  2. 可能是这个bug,它没有很好地记录在案,但我认为data_free是InnoDB文件中可用空间(如果您写入的内容超过此限制,则InnoDB将不得不扩大数据文件)。
  3. 不是的,但是InnoDB将自动缓存您最常访问的数据,因此它应该具有最佳效果。

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


2
  1. 最好担心是否有足够的内存来缓存索引,将数据留在磁盘上。如果每次都要从磁盘读取索引,数据库性能会受到极大影响,比从磁盘检索所需的数据的开销还要大得多。
  2. InnoDB数据文件是以固定大小创建的,如果它们已满,则可以选择自动扩展它们(创建额外的文件)。您可以使用show variables like 'innodb_data_file_path'查看每个文件的大小。报告的可用空间是当前数据文件中未使用的空间量。在您的情况下,您存储了2GB的数据,而InnodB数据文件的大小可能是32GB,剩余30GB可用。
  3. 您想绕过InnoDB自身的缓存逻辑来锁定特定表格吗?缓存通常会自然地倾向于将最常访问的数据保留在内存中,如果您强制它保留不常用的数据而不是最受欢迎的数据,则性能无疑会受到影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接