我已经在三个节点中配置了XtraDB集群。所有三台服务器都具有相同的 MySQL 配置、32 GB RAM 和 CentOS 5。 服务器版本为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是否足够大的问题。 IE。您可能需要 500M 临时表,因此即使您允许 256M 临时表,它们也会写入磁盘。您需要找出临时表需要多少存储空间,目前获取此信息的唯一方法是使用 Percona Server 的详细慢查询日志。请参阅http://www.percona.com/doc/percona-server/5.5/diagnostics/slow_extended_55.html
将临时表保留在内存中可以在一定程度上提高性能,但如果您可以优化查询以避免首先创建临时表,那就更好了。是否可以执行此操作取决于查询的编写方式。因此,您可能需要创建新索引,或更改某些查询的编写方式。不幸的是,这个问题没有快速的答案。
关于linux - Percona tmp 表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15151325/