如何优化information_Schema数据库中的表
Posted
技术标签:
【中文标题】如何优化information_Schema数据库中的表【英文标题】:How to optimize the tables in information_Schema database 【发布时间】:2016-11-11 15:57:16 【问题描述】:我的 information_Schema 数据库中有可用空间(碎片问题)。
警报显示某些表(如 COLUMNS、ROUTINES)中有 1500% 的可用空间。
我担心这是怎么可能的,因为我的数据库中没有任何例程,以及我如何优化 information_schema,因为它是基于内存的数据库并在 mysql 服务启动时创建。
此外,当我在任何 information_schema 表上查询 "SHOW CREATE TABLE" 时,它会将 innodb 作为这些表的引擎,但我认为它应该是内存。
有什么想法可以在不重新启动的情况下优化这些表吗?
谢谢
【问题讨论】:
首先向我们展示一些细节。这可能不是问题,也可能是无法修复的问题。从那里,我们可以讨论可能的行动。例如,如果它是 1KB 的 1500%,我会认为它太小而不会成为问题。但如果是 1GB,我们应该深入研究细节。 我正在寻找原因。因为我从来没有在这个实例上创建过例程,所以为什么会有任何可用空间。 InnoDB 预分配空间以预期更多的插入/更新/等。这是性能优化。您从information_schema
获得的数字只是存在的“可用”空间的一部分。没有办法摆脱这种“浪费”的空间。
你运行的是什么版本的 MySQL?这些表是什么 ENGINE?
【参考方案1】:
当您拥有innodb_file_per_table = OFF
时,InnoDB 表将在系统“表空间”ibdata1
中创建。可能是您在那里创建和操作了很多表。
Data_free
在SHOW CREATE TABLE
和information_schema
中的某些表格中是一个令人困惑的术语...
.MYD
文件(但不是 .MYI
文件)中恢复的准确空间量。
对于 InnoDB,它意味着两件事之一...
如果您正在查看的表是用innodb_file_per_table = ON
创建的,那么Data_free
是一些 未使用的空间。通常,并非所有这些都可以通过任何方式恢复。
如果您正在查看的表是用innodb_file_per_table = OFF
创建的,那么Data_free
就是ibdata1
中的可用空间。该空闲空间将用于新插入和新表,从而减少Data_free
。但是,ibdata1
的大小不能缩小,至少在不费力气的情况下不能缩小(转储所有内容、删除、重新加载)。
【讨论】:
在我的 5.6.12 副本中,我看到 10 个 I_S 表是 MyISAM;零是 InnoDB。你运行的是什么版本?你每个看到几个? 我的版本是mysql 5.7 Douse information_schema; show table status;
-- MyISAM 有多少; InnoDB 有多少个?以上是关于如何优化information_Schema数据库中的表的主要内容,如果未能解决你的问题,请参考以下文章
information_schema.optimizer_trace学习
(转)十分钟了结MySQL information_schema