文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

性能分析:hash索引导致delete慢

2024-04-02 19:55

关注

前端时间,应用人员上报一个性能问题:在生产环境中,每天凌晨时段数据库运行很慢,一些EVENT运行失败,导致一部分应用功能异常。


根据应用人员提供的时间段,对数据库进行排查。


先对主机CPU、IO、数据库连接等监控历史数据进行分析,确认故障时间线,缩小时间范围。

性能分析:hash索引导致delete慢


从上图看到0:30左右,数据库活动连接由0增到200,1:09活动连接数增到400+,数据库连接异常增高,需要进一步分析数据库此时间在执行什么操作。


性能分析:hash索引导致delete慢

对抓取到的历史数据(主机部署了shell监控脚本)进行分析:在0:30,数据库正在对表_1030做delete操作,其他线程在等待表锁。

综合以上,梳理出故障时间线:

监控数据显示,0:30表_1030进行delete操作,该操作在1:15分左右才执行完成,该操作运行了40+分钟左右,此期间表_1030的select操作被阻塞,导致数据库连接从0升高到200,最大达到400,应用异常:


造成阻塞的SQL为:

DELETE FROM _1030 WHERE _1030.F05 <=  NAME_CONST('_current_date',_latin1'2016-01-17 00:30:00' COLLATE 'latin1_swedish_ci')


结合以上,有2个疑问:

该delete语句为什么会产生表锁?

该delete语句为什么这么慢?能否优化?


(root@172.30.3.113) [(none)]> show create table S11._1030 \G

*************************** 1. row ***************************

       Table: _1030

Create Table: CREATE TABLE `_1030` (

  `F01` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `F02` char(45) NOT NULL,

  `F03` datetime NOT NULL,

  `F04` int(10) unsigned DEFAULT NULL,

  `F05` datetime NOT NULL,

  `F06` varchar(40) NOT NULL,

  `F07` varchar(40) DEFAULT NULL,

  PRIMARY KEY (`F01`),

  UNIQUE KEY `F02` (`F02`) USING HASH,

  KEY `F06` (`F06`) USING HASH,

  KEY `F07` (`F07`) USING HASH

) ENGINE=MEMORY DEFAULT CHARSET=utf8

1 row in set (0.00 sec)


通过查看发现该表是heap表,heap表数据都在内存里,heap性能应该是很快的,该delete语句为什么这么慢?


在测试环境进行测试,DELETE _1030 50w的数据量需要58s,慢的不合常理。删除该表的索引后,delete 1s内完成。这里基本确认索引维护代价太大导致。

添加btree索引,再次测试,delete 1s内完成。确认是hash索引造成。


优化方案:

  1. 把delete改为没有where条件的全表delete或truncate(该表数据是缓存数据)。

  2. 把HASH索引改为BTREE索引。


注:由于btree索引占用的内存空间很大(经测试,btree索引占用空间是hash索引的6倍以上),数据库主机当时内存紧张,所以优先使用方案1。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯