不同于Oracle:MySQL的insert会阻塞update

说白了,在MySQL的READ-COMMITTED隔离级别下,一次插入会直接锁定主键索引,导致后面的更新执行,但Oracle不会这样做。
首先,最重要的报告。
MySQL插入操作将立即关闭要插入的行的主索引。
去年,我们运行了无数的交易系统,我们测试的第一个关键表是自动增强的。
当会话1 插入数据a=8 时,会直接阻塞索引树中的这个节点,其他人无法进入。
还有一点,即使session2 想要插入a=8 ,因为主键冲突,MySQL会直接挂起等待session1 释放锁。
很多人不注意这一点。
另一个细节是。
去年我们实际测算过这个项目的影响,大概是3 000TPS左右。
插入阻塞更新系统会突然使响应速度减慢至5 0%。
用行话来说,它被称为“SNOW CASE”。
因为前面的一点延迟就会让整个事情变得糟糕。

一开始我以为是MySQL版本的问题,后来发现错了。
查了资料,发现额外的关卡功能被隔离了。
等等,还有别的事。
Oracle实际上有一个锁定机制,但它更智能地处理主键冲突,并且不会对其进行更新。
说实话,这很令人困惑。
当您迁移时,您不仅仅需要查看表面操作的一致性。
您将获得相同级别的数据来用作待验证的压力测试。

建议迁移前在测试环境中模拟类似场景,看看是否存在策略差异或配置问题。

MySQL数据表插入操作失败不允许新增数据限制mysql不允许新增

上周我公司的数据库出现了问题。
向表中插入数据时突然发生错误。
显示“不允许新数据限制”。
这让我很担心,因为这是关键数据。

2 02 3 年的这个时候,我尝试使用GRANT命令给用户添加权限,但还是不行。
ERROR1 1 4 2 :对于表“tablename”,用户“username”@“localhost”的 INSERT 命令被拒绝。

我想了想,重新检查了数据库引擎,改成了MyISAM引擎。
我忘了。
这个方法没有奏效。

然后我又看到时钟快满了。
我检查了表名CHECKTABLE,发现它确实已经满了。
这让我有点困惑,但我知道我需要先删除数据或增加存储空间。

最后,我仔细查看了表结构,发现字段类型不匹配。
我赶紧换了数据类型,再次尝试插入,成功了。

这件事让我更加小心了。
以后操作数据库的时候一定要更加小心。
你会发现。
如果下次遇到类似的问题,可以尝试这些方法。