这是学习笔记的第 2111 篇文章
在之前整理过一版MySQL的数据字典,整理了一圈,发现远比想象的复杂。
当然整理的过程不光是知识梳理的过程,也是转化为实践场景的一个过程,通过这样一个体系,对于整个MySQL对象生命周期管理有了较为深入的认识,这里我来抛砖引玉,来作为深入学习MySQL数据字典的一个入口,这个问题就是:如何较为准确的计算MySQL碎片情况?
我想碎片的情况在数据库中是很少有清晰的界定,不过它的的确确会带来副作用,通过修复碎片情况我们可以提高SQL的执行效率,同时能够释放大量的空间。
最近在思考中感悟到:我们所做的很多事情,难点主要都在于查找,比如我告诉你test库的表test_data存在大量碎片,需要修复一下,这个难度是完全可控的,我们可以很麻利的处理好,但是如果我告诉你需要收集下碎片情况,然后做一下改进,而不告诉你具体的情况,其实难度就会高几个层次。
我们这个场景主要会用到两个数据字典表:
information_schema.tables
information_schema.INNODB_SYS_TABLESPACES
我们依次来看一下两个数据字典的输出信息:
查询常规的数据字典tables得到的信息基本可以满足我们的大多数需求。
mysql> select *from information_schema.tables where table_name='tgp_redis_command'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: tgp_db
TABLE_NAME: tgp_redis_command
TABLE_TYPE: BASE TAB