我正在考虑将将我的MySQL数据库的数据库的放到一个ramdisk上放在Linux下。这样做的原因是为了绕过4gb内存中临时表的最大值 in MySQL。我唯一担心的是,如果基于MyISAM的ramdisk临时表会变得比ramdisk更大,那么如何避免磁盘空间外的错误?你能不能--如何创建一个溢出机制?在这种机制中,内存的大小就是内存的大小加上硬盘上的空闲空间。如果ramdisk将满,其余的将被写入硬盘。
发布于 2011-09-27 17:14:56
从逻辑上想一想,忽略这是一个由RAM支持的虚拟磁盘的事实:您要求一个磁盘设备变得更大,因为您试图在它上存储更多的东西。
你要求的是一个幸福的+30 装袋。
你要的是尺寸孔。
你在要求一个塔迪斯 (“里面更大”)。
你想要的是不存在的东西。至少我从未见过..。
为临时表使用tmpfs/RAM支持存储是绕过4GB限制的一种非常优雅的方法。不过,请注意,您锁定的内存将无法用于MySQL进行诸如SORTing、JOINing等操作,因此您需要大量内存才能实现这一点--您需要tmpfs足够大以容纳任何时候所需的多少临时表(可能相当大),而且您还需要足够多的内存,以便在运行大查询时不会交换内存(否则,您的性能无论如何都会下降,因为需要交换一些东西!)
一个更实际的解决方案可能是巧妙地设计显式(且高效)的JOINs,它消除了临时表的需求(如果可能的话),并将它们保存为视图。在不了解你的环境的情况下,我不能给你提供具体的指导,但是你可以在DBA站点上询问你正在做什么的一些基本细节,看看他们是否有建议……
(作为坏消息的传达者,我很抱歉,但如果有什么值得的话,我很乐意输入这个答案。)
发布于 2011-09-27 16:50:06
理论上,我想您可以使用来自ramdisk和硬盘的物理卷来创建JBOD文件系统--但我不确定它是否会首先自动填充内存磁盘。这位医生可能会在这个话题上发出更多的光芒。
https://serverfault.com/questions/315853
复制相似问题