2

我在三个节点中配置了 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
4

1 回答 1

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

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

于 2013-03-04T04:45:52.233 回答