Percona tmp表问题

时间:2013-03-01 05:44:35

标签: linux percona

我已经在三个节点中配置了XtraDB集群。所有三台服务器都具有相同的MySQL配置,32 GB RAM和CentOS 5。 服务器版本为5.5.29-23.7.1(64位)。

在负载测试期间,我们收到Too Many Connection错误。我发现MySQL进程列表占用了创建tmp表语句,导致达到线程连接阈值1000.

创建tmp表问题在一台服务器中随机发生,其他两台服务器按预期工作。

请让我知道增加tmp表格大小将解决此问题或任何想法为什么会出现此问题,

当前的my.cnf值,

## Temp Tables
    tmp-table-size = 256M
    max-heap-table-size = 128M

## Networking
    max-connections = 1000

1 个答案:

答案 0 :(得分:3)

如果你可以在内存中放入更多的临时表,它会更快,你会获得更好的吞吐量。

您可能不希望将tmp_table_size设置为大于max_heap_table_size。它不会造成任何伤害,但内存临时表的有效限制是这两个值的较小。也就是说,max_heap_table_size是任何种内存表的限制。 因此,如果要允许大的临时表保留在内存中,则应增加max_heap_table_size = 256M。

但这并没有回答256M是否足够大的问题。即您可能需要500M临时表,因此即使您允许256M临时表,它们也会进入磁盘。您需要了解临时表需要多少存储空间,目前获取此信息的唯一方法是使用Percona Server的详细慢查询日志。见http://www.percona.com/doc/percona-server/5.5/diagnostics/slow_extended_55.html

将临时表保存在内存中可以稍微提高性能,但如果您可以优化查询以避免首先创建临时表,那就更好了。是否可以执行此操作取决于查询的编写方式。因此,您可能需要创建新索引,或更改某些查询的编写方式。不幸的是,没有一个快速的答案。