我有一个Java应用程序,可以在任何给定的时间被300-500个用户使用.在一个单独的Linux服务器上,我们有一个5.7.19 MySQL社区数据库服务器,它处理这个应用程序的所有事务。我们有一个非常活跃的InnoDB表,称为“请求”。这个表涉及许多查询。70%是select语句,20%是更新语句,10%是插入语句。
在对请求进行的任何CRUD操作中,都有一个触发器对另一个称为审计的表执行插入操作。该审计表是MyISAM。我们每天有一两次非常奇怪的性能问题,这些问题是由锁等待超时引起的(至少我在Apache的日志文件中看到了这种情况)。因此,我编写了一个shell脚本,每当我在Tomcat日志文件中看到这个条目时,它就会转储MySQL中的所有进程。我看到的是有一个完整的表锁请求。
具有触发器的InnoDB表是否会导致InnoDB表上的表级锁?
发布于 2017-09-28 15:46:00
插入到MyISAM表中可能需要该表上的表锁。由于该INSERT来自InnoDB表上的触发器,因此它位于事务中。因此,如果表锁需要很长时间,事务就需要很长时间,因此“锁等待超时”。
表锁上的例外情况是,如果没有更新或删除MyISAM表,而PK是AUTO_INCREMENT。(或者诸如此类的事情)挖掘文档中的细节。)
是否可以在audit事务之外添加InnoDB?
你说的是“全表锁请求”-哪张桌子?具体的文本是什么?
另一件事情可能会导致插入MyISAM表的混乱--一个大的SELECT。也许你一天做两次大报告?
重新考虑是否将MyISAM用于audit。
https://dba.stackexchange.com/questions/187164
复制相似问题