暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库KingbaseES并发控制介绍

数据猿 2023-09-05
244

关键字:

KingbaseES、并发控制、可串行化调度

1.为什么需要并发控制?

由于数据库是一种共享资源, 通常都会有许多个事务同时运行。当多个事务并发地操作数据库时可能会产生数据不一致的情况,若对于并发操作不加以控制就可能会存储或存取不正确的数据,破坏数据库的一致性。因此,数据库管理系统必须提供并发控制机制。
所谓并发控制机制就是要用正确的方式调度并发操作,避免造成数据的不一致性,使一个用户事务的执行不受其他事务的干扰。并发控制是必须的,也是衡量一个DBMS性能的重要标志之一。

2.什么才是正确的执行方式?

在回答这个问题之前,首先介绍如下几个概念:

  • 调度:一个或多个事务的重要动作的一个序列;
  • 串行调度:如果一个调度的动作组成首先是一个事务的所有动作,然后是另一个事务的所有动作,则称这个调度是串行的。
  • 可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,则称之为可串行化调度。

综上,正确的执行方式是指:当且仅当事务的并发执行结果与按某一次序串行地执行它们的结果相同时,即为正确的执行方式。因此,可串行性是并发事务正确调度的准则。

3.如何判断调度的可串行化?

首先需要了解如下概念:

  • 冲突操作:不同事务对同一个数据项的读写操作和写写操作,即ri(X)与 wj(X),wi(X)与 wj(X)是冲突的,其他操作是不冲突的。而且,不同事务的冲突操作和同一事务的两个操作是不能交换的。
  • 冲突等价的调度:如果通过一系列相邻动作的非冲突交换能将一个调度转换成另一个,则称这两个调度是冲突等价的。
  • 冲突可串行化:如果一个调度冲突等价于一个串行调度,则称该调度是冲突可串行化的。如果一个调度是冲突可串行化的,则一定是可串行化调度。

注意:冲突可串行化调度是可串行化调度的充分不必要条件!

4.如何实现可串行化的调度?(如何实现并发控制?)

首先,并发控制策略大致分为两类:

1.悲观并发控制(Pessimistic Concurrency Control): 事前预防:在事务使用任何数据之前,都要检查每项操作是否违反规则,如果违反,则阻塞。例如,两阶段封锁、基于时间戳的并发控制。

2.乐观并发控制(Optimistic Concurrency Control): 事后检查:每一项操作都允许进行,但是在事务提交的时候需要进行检查,如果违反规则,则事务终止。例如,基于
有效性确认的并发控制方法,适合于并发冲突少的场景。

以上两种策略的好坏取决于实际的场景环境。如果冲突十分频繁,建议使用悲观并发控制;反之,如何冲突较少发生,乐观并发控制可以更快,因为其可以避免加锁带来的性能损耗。

在一般情况下,我们会基于同步原语将并发控制分为如下两类:

  • 基于对共享数据进行互斥访问的(锁)
  • 基于将事务的执行根据一系列规则进行排序的(协议)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论