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
    • 最新
    • 标签
主页 / dba / 问题 / 219263
Accepted
IGGt
IGGt
Asked: 2018-10-05 02:12:08 +0800 CST2018-10-05 02:12:08 +0800 CST 2018-10-05 02:12:08 +0800 CST

Information_Schema.Tables 在 MySQL 5.5 和 MySQL 5.7 中报告不同的结果

  • 772

information_schema.tables我已经开始测试一些 MySQL 5.7 数据库来替换我们老化的 5.5 数据库,并且Table 记录数据大小的方式似乎发生了重大变化。

我运行以下查询:

SELECT  
    table_schema AS table_schema,   
    table_name AS table_name,   
    (data_length + index_length + data_free) AS table_size, 
    ROUND((data_length + index_length + data_free)/POWER(1024,3),2) AS table_sizeGB,    
    t.data_length,  
    t.index_length, 
    t.data_free
FROM information_schema.TABLES t
WHERE table_schema = 'myDb' 
ORDER BY table_size DESC, table_name
LIMIT 10;

这给了我 10 个最大的表。我每天运行这个来记录随时间的增长。在 MySQL 5.5 上它需要 apx 5 秒,在 MySQL 5.7 上它是即时的。

在 MySQL 5.5 上,我得到最大表的以下结果:

myDb | myTable | 319383535616 | 297.45 | 319116279808 | 262012928 | 5242880

在 MySQL 5.7 上,我得到:

myDB | myTable | 270051115008 | 251.50 | 269824819200 | 226295808 | 0

这两个数据库都是相隔几天创建的。5.7 数据库是 5.5 数据库的从属数据库。两者都不活跃(只是作为活跃系统的奴隶)。

如果我查看服务器,表 .ibd 文件在 5.5 数据库上为 302GB,在 5.7 数据库上为 292GB。

我预计会有一个小差异(一个是使用 Antelope,另一个是 Barracuda 文件格式——两者都是 innodb)。数据不断添加到数据库中,并且很少(如果有的话)被删除。

在 MySQL 5.5 数据库上,我可以看到每次运行查询时数字都在增加,即使相隔仅几秒钟。但是在 MySQL 5.7 上,自从我一周前开始查看以来,这些数字并没有改变。

这是正确的行为吗?在我错过的 MySQL 5.7 中,有没有更好的方法来监视它?

--更新于 2018-10-16

三周后,查询结果在 MySQL 5.7 上仍然几乎相同:

5.5 -- myDb | myTable | 327890632704 | 305.37 | 327616036864 | 268304384 |6291456
5.7 -- myDb | myTable | 270055309312 | 251.51 | 269824819200 | 226295808 | 4194304

服务器上的物理大小在 MySQL 5.5 上为 310GB,在 MySQL 5.7 上为 300GB。

两个表的创建方式相同。

这两个数据库都还没有激活,所以唯一运行的查询(除了我的测试)来自复制。

两个数据库都使用innodb_file_per_table.

MySQL 5.5 是使用 mysqldump 从活动的从服务器复制的。

5.7 数据库是使用 mysqldump + mysql_upgrade 从 MySQL 5.5 数据库复制而来的。

Optimize table 从未在这些表上运行过。

mysql mysql-5.5
  • 1 1 个回答
  • 284 Views

1 个回答

  • Voted
  1. Best Answer
    Rick James
    2018-10-16T13:27:48+08:002018-10-16T13:27:48+08:00

    简短回答:数字很接近;不用担心。

    长答案:

    有很多解释。

    • 好吧,我猜梭子鱼比羚羊小 15%。(这可能是造成差异的主要原因。不过,许多其他因素也会导致差异。)
    • 他们是不同的吗ROW_FORMAT?
    • SELECTs可能导致锁定,从而导致插入/更新/删除的额外碎片。
    • innodb_file_per_table一样吗?
    • Slave 数据是如何从 Master 克隆出来的?
    • 你OPTIMIZE TABLE在任何一台机器上都做过吗?(几乎没有理由每个人都这样做。)
    • 5.7 比 5.5 有很多代码更改,但我想不出任何其他问题可能会直接显示在这些数字中。
    • 不太可能存在任何数据差异。Percona 有一个工具可以检查。
    • 有没有“更好的监控方式”?-- 监视什么?

    还,

    • 当 InnoDB 块由于更新/删除而缩小时,会尝试将该块与相邻块合并。可能5.7 比 5.5 做得更好,因此随着时间的推移导致表的增长变慢。(这在索引 BTree 中似乎更像是一个问题。)
    • “Data_free”仅包含一小部分可重用空间。它不应该被信任太多。
    • 2

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve