【问题标题】:Percona tmp table issuePercona tmp 表问题
【发布时间】:2013-03-01 05:44:35
【问题描述】:

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

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

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

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

当前的 my.cnf 值,

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

## Networking
    max-connections = 1000

【问题讨论】:

    标签: linux percona


    【解决方案1】:

    如果您可以在内存中容纳更多的临时表,它会更快并且您将获得更好的吞吐量。

    您可能不想将 tmp_table_size 设置为大于 max_heap_table_size。它不会造成任何伤害,但内存临时表的有效限制是这两个值中的较小。也就是说,max_heap_table_size 是 any 类型的内存表的限制。 所以如果你想让这么大的临时表留在内存中,你应该增加 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

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

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多