Percona tmp table issue



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

在负载测试期间,我们得到了太多的连接错误。我发现MySQL进程列表被创建tmp表语句占用,导致线程连接阈值达到1000。

创建tmp表的问题随机发生在一个服务器上,其他两个服务器正常工作。

请让我知道增加tmp表的大小将解决这个问题或任何想法为什么会发生这个问题,

当前my.cnf值,

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

如果你能在内存中容纳更多的临时表,它会更快,你会得到更好的吞吐量。

您可能不想将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

将临时表保存在内存中可以在一定程度上提高性能,但如果您可以优化查询以避免首先创建临时表,那就更好了。是否可以这样做取决于编写查询的方式。因此,您可能需要创建新的索引,或者更改某些查询的编写方式。遗憾的是,这个问题没有一个快速的答案。

最新更新