我已经开始测试一些MySQL 5.7数据库,以取代我们老化的5.5数据库,information_schema.tables表记录数据大小的方式似乎发生了重大变化。
我运行以下查询:
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上它需要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数据库的奴隶。它们都还没有活动(只是作为主动系统的奴隶)。
如果我查看服务器,5.5数据库上的表.ibd文件是302 on,5.7数据库上是292 on。
我期望一个小的差异(一个是使用羚羊,on是梭鱼文件格式-两者都是无害的)。数据不断地被添加到数据库中,很少(如果有的话)被删除。
在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上是310 on,在MySQL 5.7上是300 on。
两个表都是相同创建的。
两个数据库都还没有激活,所以唯一运行的查询(除了我的测试)是来自复制。
这两个数据库都使用innodb_file_per_table。
MySQL 5.5是使用mysqldump从活动从中复制的。
5.7数据库是使用mysqldump + mysql_upgrade从mysql_upgrade 5.5数据库中复制的。
优化表从未在这些表上运行过。
发布于 2018-10-15 21:27:48
简短的回答:数字很接近,别担心。
较长的答覆:
有很多解释。
ROW_FORMAT。SELECTs可能导致锁定,从而导致插入/更新/删除的额外碎片。innodb_file_per_table是一样的吗?OPTIMIZE TABLE吗?(几乎没有任何理由这样做。)另外,
https://dba.stackexchange.com/questions/219263
复制相似问题