我在数据库中有大量的(InnoDB)表;显然,用户能够使用JOIN创建SELECT,从而导致临时的,大型(因此在磁盘上)的表。有时候,它们太大了,以至于耗尽磁盘空间,导致各种奇怪的问题。
是否有办法限制磁盘表的临时表最大大小,以便表不会过度增长磁盘? tmp_table_size仅适用于内存表,尽管名称。我在documentation中找不到任何相关内容。
答案 0 :(得分:4)
关于选项disk-tmp-table-size
有was a discussion,但看起来the commit没有通过审核或因其他原因(at least the option does not exist in the current code base anymore)丢失。{} p>
我猜你的下一个最好的尝试(除了增加存储空间)是调整MySQL以不制作磁盘临时表。 There are some tips for this on DBA。另一种尝试可能是创建一个用于存储“磁盘上”临时表的ramdisk,如果你有足够的RAM并且只缺少磁盘存储。
答案 1 :(得分:2)
在MariaDB和MySQL中没有这个选项。 我几个月前遇到同样的问题,因为你,我搜索了很多,我最后部分上被themporary数据集建立在NAS上的一个特殊的存储区域解决它。
在NAS或内部硬盘上的分区上创建一个文件夹,根据定义,它的大小有限,然后安装它,并在mysql ini中,为这个驱动器分配临时存储:(选择windows / linux )
tmpdir="mnt/DBtmp/"
tmpdir="T:\"
此更改后应重新启动mysql服务。
通过这种方法,一旦驱动器已满,您仍然会遇到奇怪的问题"使用磁盘查询,但其他问题已经消失。
答案 2 :(得分:1)
MariaDB虽然不能回答MySQL的问题,但它具有tmp_disk_table_size且可能也有用的max_join_size设置。但是,tmp_disk_table_size
仅适用于MyISAM或Aria表,不适用于InnoDB。另外,max_join_size
仅对联接的估计行数起作用,而不对实际行数起作用。从好的方面来看,错误几乎是立即发出的。