高度事务性系统中的触发器
我们正在创建一个高度事务性的系统,使用 MySQL 作为数据库(innodb 引擎)。我们在表 t1 上有一个插入和更新触发器,它正在更新表 t2 和 t3。我们观察到,每当并发用户量很高时,表 t1 就会出现死锁。我们假设触发器正在发出表锁,直到它完成执行为止。我们在 t1 上按下了触发器,令人惊讶的是不再出现僵局。
我的问题:
- 是否不建议在高度事务性的系统中使用触发器
- 如果不触发,我们还有其他选项来实现相同的逻辑。
表 t1 大约有 70,000 行,并且每天都在增加。
感谢任何投入。
提前致谢。
We are creating a highly transactional system with MySQL as DB (innodb engine). We have one insert and update trigger on table t1 which is updating table t2 and t3. We have observed that whenever concurrent user volume is high we are getting dead-lock on table t1. We are assuming that trigger is issuing a table-lock until it's completing it's execution. We dropped the trigger on t1 and surprisingly there is no deadlock anymore.
My question:
- Is it not recommended to have trigger in a highly transactional system
- If not trigger what are our other options to implement the same logic.
Table t1 is having about 70,000 rows and increasing on a daily basis.
Appreciate any inputs.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用事务来代替并在客户端进行所有处理。
如果您可以使用客户端提供的数据,请尝试不要使用“更新选择”和“插入选择”结构。
此外,InnoDB 使用行锁定,这比 MyISAM 使用的表锁定更好。
You can use transactions instead and do all processing client side.
Try and not use 'update select' and 'insert select' constructs if you can get away with using client provided data.
Also InnoDB uses row-locking which is better than the table locking that MyISAM uses.