前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GreatSQL删除分区慢的跟踪

GreatSQL删除分区慢的跟踪

作者头像
GreatSQL社区
发布2023-08-11 14:33:52
2420
发布2023-08-11 14:33:52
举报

GreatSQL删除分区慢的跟踪

背景

某业务系统,每天凌晨会删除分区表的一个分区(按天分区),耗时较久,从最开始的30秒,慢慢变为1分钟+,影响到交易业务的正常进行。 在测试环境进行了模拟,复现了删除分区慢的情况,本次基于GreatSQL8.0.25-17进行测试,官方mysql版本也存在相同问题。

测试环境

建表

插入数据

向分区插入数据

更新数据

删除分区

两个分区数据量是一样,但删除第一个分区耗时较长。

从系统调用上看有大量的自适应hash相关的调用

重启关闭自适应hash

修改配置文件,关闭自适应hash,按照上面的流程从新执行

关闭自适应hash后,相同的操作过程,删除第一个分区的时间明显变短,删除每个分区的时间基本上一致。

备注:innodb_adaptive_hash_index是全局变量,可以动态修改,不重启数据库。

测试结果汇总

自适应hash对比

第一次删分区

第二次删分区

innodb_buffer_pool_instances=8& innodb_adaptive_hash_index=on

13.68

0.07

innodb_buffer_pool_instances=8& innodb_adaptive_hash_index=off

0.08

0.08

源码分析

函数逻辑说明:

drop 分区和add分区都会循环每个分区调用函数btr_drop_ahi_for_table 、btr_search_drop_page_hash_index清空所有分区及索引的的AHI信息, 删除第1个分区的时ahi信息被清空, 删第2个分区的时候buffer中已经没有ahi信息了,所有删除第2个分区就很快了。

避免方式

针对以上原因,线上执行 drop必须遵守以下原则:

1、关闭AHI功能,不使用AHI带来的查询加速功能,需要先在测试环境进行业务测试,确保业务性能不受影响。

2、删除表的第一个分区时,内部会清理该表在每个buffer pool实例中对应的数据块页面,耗时较久,接着删其他分区耗时很小,建议将每天一次的删除分区的操作改为每周或者每月批量执行删除分区的操作,并且需要在业务低峰期操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GreatSQL社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 测试环境
  • 建表
  • 插入数据
  • 向分区插入数据
  • 更新数据
  • 删除分区
  • 重启关闭自适应hash
  • 测试结果汇总
  • 源码分析
  • 避免方式
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档