【问题标题】:Large InnoDB data size even though entire database is MyISAM?即使整个数据库都是 MyISAM,InnoDB 数据量也很大?
【发布时间】:2013-08-19 09:16:56
【问题描述】:

我正在运行 mysqltuner 来调整我的数据库,但我遇到了一个非常奇怪的情况。

即使整个数据库是 MyISAM(所有表),它也会显示以下内容:

[!!] InnoDB data size / buffer pool: 403.1M/128.0M

数据库的默认存储引擎是 InnoDB(即使所有表都是 MyISAM)所以我认为这可能会导致问题,但是当我将 default-storage-engine 值更改为 MyISAM 时,我仍然看到完全相同的 InnoDB - mysqltuner 中的相关警告。

那么为什么会发生这种情况,我该如何解决呢?当我不使用 InnoDB 时,我宁愿不要在 InnoDB 的缓冲池上浪费 400M。

注意:我不想在这里讨论 MyISAM VS InnoDB 的古老问题,我只需要弄清楚为什么 InnoDB 会占用我的资源,即使我没有使用它。

【问题讨论】:

  • default-storage-engine 仅适用于新表。如果新建表时不指定引擎,则使用默认引擎。
  • 所有表都是 MyISAM,因为它们是从不同的服务器导入的,而不是在这个服务器上创建的。

标签: mysql innodb mysqltuner


【解决方案1】:

消歧:“数据大小”不是“缓冲池”。

Data Size 是磁盘上数据库文件的大小。它可以通过innodb_data_file_path 服务器选项进行配置。

缓冲池是用作 InnoDB 表数据和索引的缓冲区的内存 (RAM) 空间。它的配置选项是innodb_buffer_pool_size


首先,确保您的实例中根本没有 InnoDB 表:

SELECT * FROM information_schema.tables WHERE engine='InnoDB';

那么如果确实没有 InnoDB 表,你可以从头开始rebuild the InnoDB tablespace(只有减少表空间的方法,这是 MySQL 的一个恼人的缺失特性)。即使有 InnoDB 表,您仍然可以重建表空间以回收一些未使用的空间(另请参阅 this answer 了解更多信息)。

请注意,您不能将innodb_buffer_pool_size 设置为小于 5 MB。但是您可以使用 skip-innodb 选项完全禁用 InnoDB(及其缓冲区)。

【讨论】:

  • 嗯,实际上,我很愚蠢,information_schema 表是 InnoDB。我只是检查我自己的桌子。现在,您认为我应该按照 mysqltuner 所说的来增加 InnoDB 缓冲池吗?它对性能重要吗?
  • 很难确定。使用SHOW ENGINE INNODB STATUS 检查您的池使用情况(查找“缓冲池和内存”部分)。如果游泳池快满了,是的,您可能会受益于更大的游泳池。这本身就是一个问题,这些设置总是根据具体情况处理。
猜你喜欢
  • 2011-01-08
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2012-04-15
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多