ALTER TABLE t_user add UNIQUE KEY(`name`,age),ALGORITHM=INPLACE, LOCK=NONE;
需要注意的是,执行该语句只是不会影响后面事务的DML操作,但是如果前面的DML操作事务锁没有释放该语句也会锁等待
所以这种办法在事务并发量小的情况下可以直接执行
写到这里可能有读者问了,你的update语句不能根据id进行更新吗,它就是一个唯一索引。是的!你想的完全没有问题,出现上面的原因是因为特殊业务场景没有返回前端id,所以直接用的其他字段标识了一行记录。
如果上面的online ddl还解决不了问题的话,只能去增加一个节点,修改nginx配置,使用nginx热更新机制新的节点,根据id更改的代码的节点动态添加到集群中。
可以参考这篇博客:https://blog.csdn.net/weixin_39805802/article/details/105982482https://blog.csdn.net/weixin_39805802/article/details/105982482 主要是用的nginx reload命令
如果使用k8s加docker的话,可能更容易实现一些。
这个MySQL服务器压测的需求是:Tsung用于压测MySQL服务器的脚本环境:LinuxRHEL5U4X86-64,24G内存,16核.MySQL服务器在10.232.36.100上。 这个MySQL服务器压测的需求是: 环境:LinuxRHEL5U4X86-64,24G内存,16核. MySQL服务器在10.232.36.100上。 压力由最多32个客户端发起,每个客户端分别做update,insert,delete操作,概率分别是50%,30%,20%,每种操作循环999999×100次,每100次操作后休息1-3秒。 这样的压力最多持续2个小时。 我们用的是著名
工作中遇到大概20万的数据插入操作,程序编完后发现运行超时,修改PHP最大执行时间到600,还是超时,检查超时前插入的数据条数推算一下,大概要处理40~60分钟才能插入完成,看来程序写的效率太低,得优化了。测试电脑配置:CPU:AMD Sempron(tm) Processor内存:1.5G语句如下: 代码如下:$sql = “insert into `test` (`test`) values (‘$content’)”;for ($i=1;$i<1000;$i++) {mysql_query($sql);}mysql_unbuffered_query 运行三次执行时间分别为:9.85321
Mysql的表无法修改、删除等
操作,卡死、
锁死情况的处理办法产生"假
锁"原因解决办法
参考资料:https://www.cnblogs.com/xiaoleiel/p/8316527.html
产生"假
锁"原因
MySQL如果频繁的修改一个表的数据,那么这么表会被
锁死。造成假死现象。在网上试过很多种解决方法,重启
mysql服务,重连
数据库都没有用。
温馨提示:如果网上搜索的这些方法试过都没有效果,静置1天它就好了。。。。
当然!这是最最差的解决方案了哈,下面我分享个人项目中的解决方案,供大家参考。
线上mysql的update语句获取锁超时情况分析以及复盘
多租户项目生产环境下,需要进行数据修复,执行一条update语句。在执行过程中一直报获取锁超时,无法执行
有其他事务,将需要修改的数据上锁,导致update获取锁超时。那么开始分析该租户是否有需要执行时间很长的事务。
发现另一个租户,正在异步的执行大方法,该方法有一个很大的事务。
初步分析结果:一个大的事务,将需要改的数据上了锁,一直没有释放,导致无法执行。
为什么我update一个租户的数据时,会去获取另一个租户的事务