专业科技网站建设,东莞松山湖邮编,什么叫个人网站软件,电商平台搭建八个步骤为什么产生#xff1f;
经过大量增删改的表#xff0c;都可能存在碎片
MySQL数据结构是B树#xff0c; 删除某一记录#xff0c;只会标记为删除#xff0c;后续插入一条该区间的记录#xff0c;就会复用这个位置。 删除整个数据页的记录#xff0c;则整个页标记为“可…为什么产生
经过大量增删改的表都可能存在碎片
MySQL数据结构是B树 删除某一记录只会标记为删除后续插入一条该区间的记录就会复用这个位置。 删除整个数据页的记录则整个页标记为“可复用”但磁盘文件的大小是不会变的。
产生碎片就要定期清理
官方建议不要频繁(每小时或每天)进行碎片整理一般根据实际情况只需要每周或者每月整理一次即可。 建议碎片空间大或者占比50% 再做整理。
# 查询现状碎片情况
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS, AUTO_INCREMENT, TABLE_COMMENT, DATA_FREE, ROUND(data_free / 1024 / 1024 / 1024, 2) AS free_G
FROM information_schema.tables
WHERE 1 1AND TABLE_SCHEMA NOT IN (information_schema, mysql)
HAVING free_G 1
ORDER BY DATA_FREE DESC
LIMIT 10;如何清理
官方做法
ALTER TABLE tbl_name ENGINEINNODBYou can also use ALTER TABLE tbl_name FORCE to perform a “null” alter operation that rebuilds the table.
会重建表这个过程会不会锁表影响数据读写
搜集相关知识有人提供方案
ALTER TABLE tbl_name ENGINEINNODB, ALGORITHMINPLACE锁表时间很短几乎不影响业务读写属于Online DDL 详情参考资料3 至于 inplace 和 copy 的差异简单来讲 copy 基于临时表锁表时间长容易丢数据 inplace 基于临时文件,锁表时间短不易丢数据。 那么需要指定 ALGORITHM 吗 搜索MySQL官方文档发现 The ALGORITHM clause is optional. If the ALGORITHM clause is omitted, MySQL uses ALGORITHMINPLACE for storage engines and ALTER TABLE clauses that support it. Otherwise, ALGORITHMCOPY is used. 不指定ALGORITHM的情况下如果alter语句支持 inplace,就使用inplace,否则就用copy 哪些表操作支持呢
官方给了回答 所以整理碎片 直接执行即可
ALTER TABLE tbl_name ENGINEINNODB开源工具
除了mysql官方的实现方式业界也有一些知名开源工具解决大表的变更gh-ost就是一例。
关键步骤如下详细点击 创建影子表 存量数据同步 增量数据同步-by binLog 锁表更换表名 删除原表 参考资料
MySQL整理碎片MySQL Online DDLmysql重建表mysql在线修改表结构的影响 -MySQL Online DDL工具gh-ostgh-ost漏洞