关于MySQL的那点事 InnoDB引擎

在高并发压力测试中,MySQL数据库出现表锁死问题。通过优化计时器策略及调整数据运算方式,最终解决了这一难题,实现了系统的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近有个问题困扰了我一个多月,在最近对项目进行压力测试时,MySQL数据库总是莫名其妙的出现表锁死的现象,经过不懈的努力和不错的运气,这个问题终于解决了。

这个项目我是半路接手的,到手时几乎是个完备的成品了,这是个实时监控的项目,在低压力下(5个终端)运行一切正常。但是在高压力(300-900终端)总是会出现不稳定的状况。 一开始还算正常,但是运行一段时间后就会发生表锁死。

我特意买了一本关于MySQL的默认存储引擎InnoDB的书,仔细研究了一下,进行了各种优化调整但是问题依旧没有解决。 此时数据库缓存的命中率达到了99.2%,但是依旧没有解决长久运行锁死的问题。

终于在一个明媚的早晨,我来到公司,打开 WorkBench,查看了正在运行的测试服务器,这个工具软件是MySql自带的,我刚刚发现其功能十分强大,在进程监控一项,我突然发现了问题所在:3个计时器阻塞了所有进程!

 这三个计时器是用来计算30秒、5分钟、1小时的数据平均值,然后存在另外的表里,设备少了,他们还行,但是如果有900台设备,那么但就30秒表来说,每30秒就会产生900个额外线程对实时数据表进行读取和运算。其中还有个运算的过程,要知道InnoDB引擎最不擅长的就是对数据的运算,所以即使你有100个并发线程,但是都在访问实时表,再加上运算,表的锁死现象就不足为怪了。

之后我修改了计时器的策略,把运算交由java后台进行,然后数据库一切都清爽了,900台的压力不足一提,稳定高效。

总结这次困扰了我1月多的问题,有以下几点经验教训:
1、半路接手的项目没有吃透,尤其是对于以前没有接触过的计时器,不是很了解,所以没有意识到问题的根源。
2、一开始没有使用合理的工具,直到利用了 WorkBench 才发现问题所在。
3、千万不要用InnoDB进行大量数据运算(那3计时器不是我写的,不是我的锅 ) 。

总之,通过这次我也是涨了经验了,还对InnoDB研究了一帆, 看来没有解决不了的问题,只有不够执着的程序猿。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值