我有一个 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_size 设置为 2GB 或更大,整个数据库可以加载到内存中,从而需要更少的从磁盘读取请求?
31GB的可用空间是什么意思?
如果可以分配给 innodb_buffer_pool_size 的最大 RAM 是 1GB,是否可以指定哪些表加载到内存中,而其他表始终从磁盘读取?
提前致谢。
- 不完全是。 InnoDB缓冲池用于缓冲读取和写入。如果您的大部分访问都是读取,则大多数访问将被缓存,并且需要更少的磁盘访问。
- 可能是这个bug http://bugs.mysql.com/bug.php?id=36312,它没有很好地记录,但我认为 data_free 是 innodb 文件内的可用空间(如果你写入的内容超过这个 InnoDB 将不得不扩大数据文件)。
- 不会,但是 InnoDB 会缓存你最常访问的数据,所以无论如何它应该有一个最佳的效果。
考虑使用内存缓存 http://memcached.org/如果您需要更好的性能,可以作为缓存层来完全消除数据库访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)