我正在跑步:
MySQL v5.0.67
InnoDB engine
innodb_buffer_pool_size = 70MB
问题:我可以运行什么命令来确保我的整个50 MB数据库完全存储在RAM中?
答案 0 :(得分:1)
我很想知道为什么要将整个表存储在内存中。我的猜测是你不是。 对我来说最重要的是,如果您的查询运行良好,并且您是否依赖磁盘访问。如果有可用内存,操作系统也可能会缓存您需要的磁盘块。在这种情况下,即使MySQL可能没有内存,操作系统也会。如果您的查询运行不正常,并且您可以执行此操作,我强烈建议您在RAM中添加更多内存。如果你的速度减慢,你很可能会遇到争用。
show table status
将向您显示一些信息。
如果从
获取服务器IO /缓冲区/缓存统计信息show server status
然后运行一个需要访问每一行的查询(比如使用未编制索引的列对每行中的非空值求和)并检查是否发生了任何IO。
我怀疑你在内存中缓存了整个东西,虽然只有70MB。你必须从这个总数中取出很多缓存,临时和索引缓冲区。
答案 1 :(得分:0)
如果您运行SELECT COUNT(*) FROM yourtable USE INDEX (PRIMARY)
,那么InnoDB会将PRIMARY索引的每一页放入缓冲池中(假设其中有足够的空间)。如果该表具有二级索引,并且您也希望将其加载到缓冲池中,则可以设计一个类似的查询,该查询将从二级索引中读取并完成工作。