跳过复制到磁盘mysql上的tmp表
我有一个大的MySQL查询的问题。 是否有可能跳过复制到磁盘上的tmp表的步骤,MySQL需要大量的查询,或者有可能使其更快? 因为这个步骤太长,以至于我的查询结果回来。 我读了MySQL的页面,这是为了节省内存,但我不在乎节省内存,我只是想让我的查询结果回到快速,我有足够的内存在我的机器上。 此外,我的表正确索引,所以这不是我的查询速度慢的原因。
任何帮助?
谢谢
有两件事你可以做,以减轻这种影响
选项1:增加variablestmp_table_size和/或max_heap_table_size
这些选项将控制内存中临时表的大小,然后将其视为过大,然后将其作为临时MyISAM表分页。 这些值越大,您就越不可能“复制到磁盘上的tmp表”。 请确保你的服务器有足够的RAM, max_connectionsconfiguration适度,如果一个数据库连接需要大量的RAM来存放它自己的临时表。
选项2:为tmp表使用RAM磁盘
您应该能够在Linux中configurationRAM磁盘,然后将mysql中的tmpdir设置为装有RAM磁盘的文件夹。
对于初学者来说,在操作系统中configuration一个RAM磁盘
在Linux中创build一个名为/ var / tmpfs的文件夹
mkdir /var/tmpfs
接下来,把这一行添加到/ etc / fstab(例如,如果你想要一个16GB的RAM磁盘)
none /var/tmpfs tmpfs defaults,size=16g 1 2
并重新启动服务器。
注意:可以在不重新启动的情况下制作RAM磁盘。 只要记得在服务器重新启动之后仍然将上述行添加到/ etc / fstab中以使RAM磁盘有效。
现在对于MySQL:
将此行添加到/etc/my.cnf中
[mysqld] tmpdir=/var/tmpfs
并重新启动mysql。
选项3:尽快将tmp表格写入RAM磁盘(假设您先应用选项2)
您可能需要尽可能快地将tmp表强制到RAM磁盘中,这样MySQL就不会将其内存大的tmp表迁移到RAM磁盘中。 只需将其添加到/etc/my.cnf:
[mysqld] tmpdir=/var/tmpfs tmp_table_size=2K
并重新启动mysql。 这将导致即使是最小的临时表在RAM磁盘中的存在。 您可以定期运行ls -l /var/tmpfs
来观看临时表来来去去。
试一试 !!!
警告
如果您在24/7全天候在/ var / tmpfs中看不到任何内容,则可能会影响操作系统的function/性能。 为了确保/ var / tmpfs不会过多,请调整您的查询。 一旦你这样做了,你应该会在/ var / tmpfs中看到更less的tmp表。