Eli*_*Eli 5 mysql temporary-tables
我有一个 Web 应用程序连接到运行 MySQL 的数据库。
问题在于:大量查询创建了临时表,并且涉及的许多表都具有 BLOB 字段。这意味着我在磁盘上创建了很多临时表(这里描述了这种行为https://dba.stackexchange.com/a/17679/16724),这会导致非常糟糕的性能。
有没有办法轻松解决这个问题?也许一些叉子或其他可插拔引擎?我实际上正在运行 MySQL (XtraDB) 的 Percona fork,但它与 vanilla InnoDB 存在相同的问题。坦率地说,我正在考虑改用 Postgres。
谢谢
您需要正确调整所有基于连接的设置,正如您从该链接中指出的那样。
如果你正在寻找一些快速而肮脏的东西,我有这样的东西:
早在 2012 年 11 月 30 日,我写了一篇关于将临时表映射到 RAM,甚至基于磁盘的临时表的好文章:同时创建许多 mysql 临时表是否不好?
试一试 !!!
就 BLOB 而言,我表示哀悼。尽管如此,我有个好消息。我有一个非常快速和肮脏的特技,一旦你设置了 RAM 磁盘,你就可以做。
准备好 ???
在中设置以下值
tmp_table_size = 1K
max_heap_table_size = 1K
Run Code Online (Sandbox Code Playgroud)
这不是印刷错误。这不是一个错字。我说将tmp_table_size和max_heap_table_size设置为 1K。您可能会说“为什么将这些值设置得这么低?”
这些值表示将临时表传输到磁盘之前允许的最大内存临时表。如果您有 RAM 磁盘,则临时表会尽快直接跳入 RAM 磁盘。正如 MySQL 文档中关于max_heap_table_size所说:
如果内存临时表超过限制,MySQL 会自动将其转换为磁盘上的 MyISAM 表。如果执行许多高级 GROUP BY 查询并且有大量内存,请增加 tmp_table_size 的值(如果需要,还可以增加 max_heap_table_size)。
| 归档时间: |
|
| 查看次数: |
6042 次 |
| 最近记录: |