暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 大表DROP ... 等DDL操作的hang、性能、导致延迟等问题以及阿里云alisql的改进原理

digoal 2020-11-03
824

作者

digoal

日期

2020-11-03

标签

PostgreSQL , MySQL , 阿里云


背景

现象:

用 ghost工具 大表加字段,最后要drop 掉原表

但是经常发现 drop 一个 大表的时候 (ibd 文件 超过50G),数据库中所有的 活跃会话 都卡在了opening tables 状态上,短的卡5秒,长的卡10秒以上 ,对业务 产生 极大的影响

代码: 删除 ibd文件的代码 unlink(XXX) , 并没有包含在 opening table 的锁内

可能的原因: https://developer.aliyun.com/article/17116

innodb_file_per_table=1 参数的打开,每个表有一个数据文件,而不是共享一个表空间,在drop table的时候,innodb必须检查LRU链表,把该链表上属于该表的page清除,如果该数据库的buffer pool设置的很大,花费在LRU搜索的时间开销将会很大,同时上千张不同的表打开,如果table_cache设置不当,则会将table_cache充满, mysql使用LRU算法将cache中的表清除,这个时候使得其他查询很有可能看上去被阻塞了,从而导致了性能上的下降。

阿里云alisql的DDL性能改进

造成以上现象可能存在两种原因,

1、50gb的文件删除,引起了文件系统的压力,可能会引起短暂的IO停顿,这个AliSQL有异步大文件删除,https://help.aliyun.com/document_detail/134095.html

2、要删除表时,需要处于缓存在buffer pool中的数据页,这一步如果机器的buffer pool较大,会持续较久,有可能阻止其他会话的任何buffer pool操作。AliSQL在这个地方有Faster DDL的优化. https://help.aliyun.com/document_detail/173324.html

这两个点是比较常见的,后面这个点影响更大。

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论