同时创建许多mysql临时表是否不好?


8

我需要进行大量的统计分析,才能为用户提供一些数据。目前,我从mysql捕获数据并通过PHP数组处理它们。但是,mysql临时表要好得多(显然比PHP数组更高效和更快;显然是由于它们的机制)。

我的解决方案是在每次导入和处理数据的请求(即连接)上形成一个临时表。但是,我不确定同时创建多个临时表是否有缺点?

这会给mysql服务器造成问题吗?或者我可以在大量同时请求中将其用作PHP数组的替代方法?

Answers:


6

您要尽可能避免创建临时表:防止复制到临时表(sql)

它们在MySQL复制中无法正常工作:如何为MySQL临时表更新二进制日志?

由于临时表是数据库世界中不可或缺的事实,因此您可能必须进行一些非常规的更改以适应其存在。

通常,mysqld习惯于将tmp表放置在配置了tmpdir的/tmp任何地方。通常是在一些可疑的磁盘上。

一个有趣的替代方法是设置RAM磁盘并重新配置tmpdir以使用它

步骤01:为RAM磁盘创建挂载点

mkdir /var/tmpfs

步骤02:将RAM磁盘添加到/ etc / fstab(16GB)

echo "none   /var/tmpfs              tmpfs   defaults,size=16g        1 2" >> /etc/fstab

步骤03:将此行添加到/etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs

步骤04:启用RAM磁盘

您可以执行以下操作之一:

  1. 只需重新启动数据库服务器
  2. mount -t tmpfs -o size=16g none /var/tmpfs

在执行此操作之前,请确保您有足够的RAM

试试看 !!!


2
隐式临时表对SBR或RBR复制都没有影响。 显式临时表通过网络发送所有DDL。
瑞克·詹姆斯

4

“许多mysql临时表”-潜在的问题:

  • table_open_cache(和其他可调参数)-您可以(但不太可能)达到某些限制
  • 公羊膨胀-您可以(但不太可能)使用更多公羊。如果这导致交换,那确实很糟糕。

除非您一次真正拥有数百个临时表,否则我不会担心“很多”。

一次正在运行多少个线程(SHOW PROCESSLIST;忽略“ Sleep”)?即使是繁忙的系统,也很少会一次拥有10个以上的系统。

对于隐式临时表,让我们看一下导致它们的SELECT。可以重新设计查询以避免使用临时表。

我不喜欢使用ram磁盘-它使RAM脱离了其他缓存的可能性,并冒着达到硬限制(磁盘大小)的风险。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.