AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 387838
Accepted
ananthan
ananthan
Asked: 2012-05-11 01:36:56 +0800 CST2012-05-11 01:36:56 +0800 CST 2012-05-11 01:36:56 +0800 CST

为什么 MySQL 使用这么多临时表?

  • 772

任何配置错误都会导致 mysql..mysql 调谐器显示创建太多临时表吗

Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk


table_open_cache = 125 tables
table_definition_cache = 256 tables

You have a total of 97 tables

You have 125 open tables.

Current table_cache hit rate is 3%

较早的临时表是,of the 23725 temp tables 38% were created on disk但我从 16m 更改max_heap为tmp_table200m,它降低到 30%。

engine myisam 
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M

max_connections = 800

显示另一个具有默认配置的系统 of 23725 temp tables, 1% were created on disk

但是我尝试在有这个问题的机器上更改为默认值,它仍然显示Of 580 temp tables, 16% were created on disk

我正在使用 Ubuntu 11.4 64 位和 48 GB 内存...任何人都可以提出解决方案吗?

使用“group by”将数据库引擎从 myisam 更改为表上的内存是否可以修复此问题?

mysql memory innodb myisam
  • 2 2 个回答
  • 7720 Views

2 个回答

  • Voted
  1. Best Answer
    John Gardeniers
    2012-05-11T01:55:07+08:002012-05-11T01:55:07+08:00

    根据正在执行的查询,根据需要创建和删除临时表。您看到的数字是自上次 MySQL 启动以来创建的临时表的总数,而不是同时存在的数量。

    • 6
  2. Ladadadada
    2012-05-11T01:54:54+08:002012-05-11T01:54:54+08:00

    当查询不能一次性计算时,MySQL 使用临时表。切换存储引擎不会改变这一点。问题出在查询上,而不是配置上。

    增加该tmp_table_size值只会阻止其中一些写入磁盘,它们仍会在内存中创建并填充数据。这些数据可能首先来自磁盘,尽管使用 48GB 的​​ RAM 您可能已经缓存了相当多的数据。即使缓存,由于这些临时表中有 30% 大于 200MB,因此在 RAM 中复制该数量的数据仍然需要时间。

    EXPLAIN您甚至可以在运行查询之前通过使用语法来确定它是否将使用临时表。只要放在EXPLAIN你的查询之前,它就会输出一堆关于执行计划和查询效率的信息,而不需要实际执行它。

    您可能会找到导致这些临时表的查询,因为它们很可能是慢速查询,因此最终会出现在您的慢速查询日志中。

    如果您需要帮助调整特定查询,DBA.SE是一个不错的去处。

    长话短说

    调整您的查询。

    • 5

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve