MySQL表空间碎片整理

191 篇文章 87 订阅 ¥9.90 ¥99.00
123 篇文章 65 订阅 ¥19.90 ¥99.00
本文探讨了MySQL中如何通过alter table语句进行表空间碎片整理。内容涉及到删除记录后的空洞问题,以及alter table命令如何重建表,将老表数据逐条迁移到新表中。文章特别提到了关键函数`ha_innobase::inplace_alter_table`和后续的处理流程,暗示了碎片整理的内部工作机制。
摘要由CSDN通过智能技术生成

MySQL可以使用alter table tn engine=innodb语句进行表空间碎片整理。而页内记录并不是物理有序的,并且删除记录后,被删除的记录放到页内free链表,可能会产生很多空洞。alter table命令会重建表,这样的话,猜测可能扫描老表页内说有数据,一个一个的插入到新表中。是不是这个过程呢?跟踪了下堆栈:

(gdb) bt
#0  btr_cur_optimistic_insert (flags=23, cursor=0xa34a4074, offsets=0xa34a40b4, heap=0xa34a40dc, entry=0xa6b72c8, 
    rec=0xa34a40b8, big_rec=0xa34a40bc, n_ext=0, thr=0x0, mtr=0xa34a3c04)
    at /home/mysql26/mysql-5.6.26/storage/innobase/btr/btr0cur.cc:1241
#1  0x087c006c in row_merge_insert_index_tuples (trx_id=9503, index=0xa6b7ca8, old_table=0xa4df530, fd=35, 
    block=0x9d232000 "\002") at /home/mysql26/mysql-5.6.26/storage/innobase/row/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzs87

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值