🗒️Day90【概念解析】Transaction Scheduling
00 分钟
2023-12-20
2023-12-20
type
status
date
slug
summary
tags
category
icon
password

整理定义

Transaction Scheduling

In the fields of databases and transaction processing (transaction management), a schedule (or history) of a system is an abstract model to describe execution of transactions running in the system. Often it is a list of operations (actions) ordered by time, performed by a set of transactions that are executed together in the system. If the order in time between certain operations is not determined by the system, then a partial order is used. Examples of such operations are requesting a read operation, reading, writing, aborting, committing, requesting a lock, locking, etc. Not all transaction operation types should be included in a schedule, and typically only selected operation types (e.g., data access operations) are included, as needed to reason about and describe certain phenomena. Schedules and schedule properties are fundamental concepts in database concurrency control theory.
事务调度:在数据库和事务处理(事务管理)领域中,系统的调度(或历史)是描述系统中运行的事务的执行的抽象模型。 通常,它是按时间排序的操作(动作)列表,由系统中一起执行的一组事务执行。 如果某些操作之间的时间顺序不是由系统确定的,则使用部分顺序。 此类操作的示例包括请求读操作、读取、写入、中止、提交、请求锁、加锁等。并非所有事务操作类型都应包含在调度中,并且通常仅包含选定的操作类型(例如,数据访问操作) )根据需要被包括在内,以推理和描述某些现象。 调度和调度属性是数据库并发控制理论中的基本概念。

复述展开

CATS

CATS:Contention-Aware Transaction Scheduling algorithm
InnoDB使用CATS算法来优先处理等待锁的事务。当多个事务在等待同一个对象上的锁时,CATS算法通过分配一个调度权重来确定哪个事务首先获得锁,这个权重是基于一个事务阻塞的其他事务数量来计算的。 例如,如果有两个事务在等待同一个对象上的锁,那么阻塞更多事务的那个事务会被分配更高的调度权重。如果权重相同,优先权将给予等待时间最长的事务。
 
注意MySQL 8.0.20之前,InnoDB还使用先进先出(FIFO)算法来调度事务,只有在锁争用非常激烈的情况下才使用CATS算法。MySQL 8.0.20中CATS算法的增强使得FIFO算法变得多余,允许其被移除。自MySQL 8.0.20起,之前由FIFO算法执行的事务调度工作由CATS算法来执行。在某些情况下,这一变化可能会影响事务获得锁的顺序。
 
你可以通过查询信息模式INNODB_TRX表中的TRX_SCHEDULE_WEIGHT列来查看事务调度权重。权重只为等待中的事务计算。等待中的事务是指那些处于LOCK WAIT事务执行状态的事务,如TRX_STATE列所报告的。一个不在等待锁的事务会报告一个NULL的TRX_SCHEDULE_WEIGHT值。
INNODB_METRICS计数器提供了用于监控代码级别事务调度事件的功能。
  • lock_rec_release_attempts:尝试释放记录锁的次数。单次尝试可能导致零个或多个记录锁被释放,因为在单个结构中可能有零个或多个记录锁。
  • lock_rec_grant_attempts:尝试授予记录锁的次数。单次尝试可能导致零个或多个记录锁被授予。
  • lock_schedule_refreshes:分析等待图以更新调度事务权重的次数。

理解体会

InnoDB中的Contention-Aware Transaction Scheduling(CATS)算法是一种用于管理数据库锁争用的高级调度机制。在数据库系统中,当多个事务试图同时访问同一资源(如行、页或表)时,就会发生锁争用。为了维护数据的一致性和完整性,数据库管理系统(DBMS)必须确保在任何给定时间,只有一个事务可以修改特定的数据项。
在传统的锁调度机制中,如先进先出(FIFO)策略,事务是按照它们到达的顺序获得锁的。然而,这种方法并不总是最优的,因为它没有考虑到事务之间的依赖关系。一个事务可能阻塞了多个其他事务,而另一个事务可能只阻塞了一个。在这种情况下,让阻塞更多事务的那个事务先行,可能会更快地解决锁争用,从而提高整体的并发性和性能。
CATS算法正是基于这样的思想。它通过分配一个调度权重来优先处理等待锁的事务。这个权重是基于一个事务阻塞的其他事务的数量来计算的。如果一个事务阻塞了许多其他事务,它将获得更高的权重,因此有更高的优先级来获得锁。这样做的目的是尽量减少整体的等待时间和提高事务吞吐量。
如果两个事务的调度权重相同,CATS算法会考虑它们的等待时间,优先给予等待时间最长的事务。这种方法既考虑了事务的影响范围,也考虑了公平性。
从MySQL 8.0.20版本开始,由于CATS算法的增强,原有的FIFO算法被移除,所有的事务调度都由CATS算法来执行。这意味着在高并发和锁争用的环境下,CATS算法可以更智能地调度事务,减少锁等待时间,提高数据库的性能。
总的来说,CATS算法是一种更加智能和动态的事务调度方法,它通过考虑事务之间的相互影响和等待时间,来优化锁的分配,从而提高数据库的并发处理能力和整体性能。
📌
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
 
上一篇
Day91【概念解析】 InnoDB Limits
下一篇
Day89 【概念解析】How to Minimize and Handle Deadlocks

评论
Loading...