如何限制临时表的大小?

时间:2017-04-25 12:56:10

标签: mysql mariadb temp-tables

我在数据库中有大量的(InnoDB)表;显然,用户能够使用JOIN创建SELECT,从而导致临时的,大型(因此在磁盘上)的表。有时候,它们太大了,以至于耗尽磁盘空间,导致各种奇怪的问题。

是否有办法限制磁盘表的临时表最大大小,以便表不会过度增长磁盘? tmp_table_size仅适用于内存表,尽管名称。我在documentation中找不到任何相关内容。

3 个答案:

答案 0 :(得分:4)

关于选项disk-tmp-table-sizewas a discussion,但看起来the commit没有通过审核或因其他原因(at least the option does not exist in the current code base anymore)丢失。

我猜你的下一个最好的尝试(除了增加存储空间)是调整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仅对联接的估计行数起作用,而不对实际行数起作用。从好的方面来看,错误几乎是立即发出的。