Skip to the content.

..

Transaction Scheduling

参考:15.7.6 Transaction Scheduling

InnoDB使用竞争感知事务调度(CATS)算法对等待锁的事务进行优先级排序。 当多个事务正在等待同一对象上的锁时,CATS算法将确定哪个事务首先接收到该锁。

CATS算法通过分配调度权重来确定等待的事务的优先级,调度权重是根据事务阻止的事务数来计算的。 例如,如果两个事务正在等待对同一对象的锁定,则会为阻塞最多事务的事务分配更大的调度权重。 如果权重相等,则优先考虑等待时间最长的事务。

Note

在MySQL 8.0.20之前,InnoDB还使用先进先出(FIFO)算法来调度事务,并且CATS算法仅在重锁争用下使用。 MySQL 8.0.20中的CATS算法增强功能使FIFO算法变得多余,从而可以删除它。 从MySQL 8.0.20开始,以前由FIFO算法执行的事务调度由CATS算法执行。 在某些情况下,此更改可能会影响授予事务的锁的顺序。

您可以通过查询INFORMATION_SCHEMA.INNODB_TRX表中的TRX_SCHEDULE_WEIGHT列来查看事务调度权重。权重仅针对等待的事务进行计算。 如TRX_STATE列所报告,等待的事务是处于LOCK WAIT事务执行状态的事务。 不等待锁的事务将报告NULL TRX_SCHEDULE_WEIGHT值。

提供了INNODB_METRICS计数器,用于监视代码级事务调度事件。 有关使用INNODB_METRICS计数器的信息: