我正在考虑把我的MySQL数据库的tempdir放在 Linux下的虚拟磁盘上。 这样做的原因是要解决MySQL中最大4GB的内存中临时表 。 我唯一担心的是如果在虚拟盘上基于MyISAM的临时表比虚拟盘大的话,如何避免磁盘空间不足的错误? 有人可能会创build一个溢出机制,其中虚拟盘大小是虚拟盘的大小加上硬盘上的可用空间。 如果虚拟硬盘满了,其余的将被写入硬盘。
从逻辑上思考这个问题,并忽略它是一个RAM支持的虚拟磁盘的事实:你要求一个磁盘设备变得更大,因为你试图存储更多的东西。
你正在要求一个幸运的+30 袋持有 。
你正在要求一个三维孔 。
你要求一个TARDIS (“它在里面更大”)。
你在问一些不存在的东西。 至less不是我见过的
使用tmpfs / RAM备份存储临时表是一个非常优雅的方式来解决4GB的限制。 请注意,虽然你locking的内存将不能用于MySQL做SORT ing, JOIN ing等东西,所以你将需要内存的GOBS使这个实用 – 你需要的tmpfs是大足以容纳任何时候都需要的临时表(大概相当大),而且还需要足够的内存,以便在运行大型查询时不会停止交换(否则您的性能不pipe怎么样,因为SOMETHING都会被换掉!)。
更实际的解决scheme可能是巧妙地制定明确的(和有效的) JOIN ,消除临时表(如果可能)的需要,并将它们保存为视图。 不知道更多关于你的环境,我不能给你具体的指导,但你可以随时询问DBA网站上有关你在做什么的一些基本细节,看看他们是否有build议…
(我很抱歉成为坏消息的持有者,但是如果有什么值得我input这个答案的确有乐趣。)
理论上我猜你可以使用ramdisk和硬盘上的物理卷创build一个JBOD文件系统,但是我不确定它是否会自动填充内存盘。 这个文件可能会让这个话题更加清晰
你最好的select是购买一个64GB的固态硬盘,把你的tempdir ,没有别的。 他们是便宜的约$ 1 / GB(出售),所以约64美元和2美元一GB没有出售,你可以有一个超级快速tempdir ,你不必担心小。