InnoDB
使用竞争感知事务调度(CATS)算法对等待锁的事务进行优先级排序。当多个事务在同一对象上等待锁时,CATS算法确定哪个事务先收到锁。
CATS算法通过分配调度权重来对等待的事务进行优先级排序,调度权重是根据事务阻塞的事务数量计算的。例如,如果两个事务正在等待同一对象上的锁,则阻塞最多事务的事务将被分配更大的调度权重。如果权重相等,则优先级给予等待时间最长的事务。
在MySQL 8.0.20之前,InnoDB
也使用先进先出(FIFO)算法来调度事务,CATS算法仅在锁争用严重的情况下使用。MySQL 8.0.20中的CATS算法增强使FIFO算法变得多余,允许移除它。从MySQL 8.0.20开始,以前由FIFO算法执行的事务调度将由CATS算法执行。在某些情况下,此更改可能会影响事务被授予锁的顺序。
控件可以查看事务调度权重TRX_SCHEDULE_WEIGHT
中的列。INFORMATION_SCHEMA。INNODB_TRX
表格仅为等待事务计算权重。中的等待事务锁等待
类所报告的事务执行状态TRX_STATE
列。不等待锁的事务报告NULLTRX_SCHEDULE_WEIGHT
价值。
INNODB_METRICS
提供了用于监视代码级事务调度事件的计数器。有关使用INNODB_METRICS
计数器,看章节15.15.6“InnoDB INFORMATION_SCHEMA度量表”.
lock_rec_release_attempts
试图释放记录锁的次数。一次尝试可能导致0个或多个记录锁被释放,因为在单个结构中可能有0个或多个记录锁。
lock_rec_grant_attempts
授予记录锁的尝试次数。一次尝试可能导致授予零个或多个记录锁。
lock_schedule_refreshes
分析等待图以更新预定事务权重的次数。