linux - Percona tmp 表问题

标签 linux percona

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

相关文章:

用于查找包含特定格式的字符串并操作数据的 Linux 脚本

mysql慢复杂查询与排序依据

MySQL inet_aton() 偶尔返回 null

MySQL 复制 - Percona 工具包表同步 - 外键约束失败

c - fmemopen 和 open_memstream 有什么区别?

linux - 执行sed命令时出错

linux - 从 bash 中的一行读取表格数据

mysql - 我可以直接在 Galera 集群中的成员之一上运行 Xtrabackup 吗?

mysql - RDS 和 pt-table-sync。表无法同步。如何解决这个问题?

linux - Grep 文件中的多个模式并为每个模式输出前 5 个匹配项