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

时间:2010-03-21 05:46:36

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

  4. 提前致谢。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

  1. 最好担心有足够的内存来缓存ram中的索引,并将数据保留在磁盘上。如果每次都必须从磁盘读取索引,数据库性能会大大降低 - 远远超过以后从磁盘检索所需数据的开销。
  2. InnoDB数据文件以固定大小创建,如果它们已满,可以选择自动扩展它们(创建额外文件)。您可以使用show variables like 'innodb_data_file_path'查看每个文件的大小。报告的可用空间是当前数据文件未使用的数量。在您的情况下,您有2gig数据存储在(最可能)32gig的InnodB数据文件中,剩下30gig可用。
  3. 你有什么理由想要绕过InnoDB自己的缓存逻辑来固定ram中的特定表吗?缓存自然会将最常访问的数据保留在ram中,如果你强制它保留较少使用的数据而不是最流行的数据,性能无疑会受到影响。