当前位置:网站首页>GBase 8s的封锁技术的基本介绍
GBase 8s的封锁技术的基本介绍
2022-06-25 03:59:00 【八珍豆腐】
一. 封锁的基本概念
封锁的对象是数据库中的数据对象,如关系型数据库中的表、记录、属性、索引等,
对数据对象加锁的时机是在事务对其进行操作之前,向系统发出加锁请求。加锁后事务 T就取得了对该数据对象的控制,在事务 T 释放它的锁之前,其他事务不能对此数据对象进行任何操作。封锁是一种排队机制,将并行任务按锁的先后顺序排队,把并行任务变成串行任务。
二. 锁的类型
按照锁的行为模式,可以将数据库中的锁分成:共享锁、排它锁和提升锁三种类型。
1.共享锁
共享锁简称 S 锁,可以防止其他用户对记录进行修改。若事务 T 对数据对象 R 加上 S锁,则事务 T 只能对数据对象 R 进行读操作或者确定修改记录意图的操作,而不能对 R进行写操作,其他任何事务只能再对 R 加 S 锁或 U 锁(提升锁),而不能加 X 锁(排它锁);当事务 T 释放 R 上的 S 锁后,其他事务才可以对 R 加 X 锁,这就保证了对于加 S 锁的数据 R 可以被其他事务读,但不能够对 R 进行写操作。
2.排它锁
排它锁简称 X 锁,用来管理并行更新,排它锁又称为独占锁,若事务 T 对一个对象 R加了排它锁,则只允许 T 对 R 进行读写操作,不允许其他任何事务再对 R 加任何类型的锁,当事务 T 释放 R 上的 X 锁后,其他事务才能够对 R 进行加锁。这样,在事务 T 释放加在 R 上的锁之前,任何事务都不能对 R 进行读写或者确定修改记录的意图操作。同时,若试图在一个已经加了 S 锁或者 U 锁的对象上加 X 锁,则也会冲突。
3.提升锁
提升锁简称 U 锁,U 锁是意向锁,表示事务有修改记录的意图。U 锁是一种过渡锁,当要对 U 锁所锁定的对象进行更新操作时,需要将 U 锁提升为 X 锁。若事务 T 对数据对象 R 加了 U 锁,则只允许 T 有对 R 进行修改意图的权限,其他事务只能再对 R 加 S 锁而不能加 U 锁或者 X 锁。
三. 封锁的粒度
封锁粒度也称锁对象或者锁范围,表示封锁的作用范围,例如,一条记录上的锁只作
用于该记录,一个关系上的锁作用于该关系中的所有记录。可见,不同封锁粒度涉及封锁
的数据量是不同的,封锁对象的级别越高,涉及的数据量越大。封锁粒度越大,如对整个
数据库进行封锁,则将会对数据库中的全部关系、记录进行封锁,系统处理单个事务的能
力要强一些,系统开销相对小一些,但是,系统的并发度就会减小,处理并发事务的能力
就会减弱;反之,封锁粒度越小,如对单个表或记录进行封锁,系统的并发度就会高一些,
系统开销也就越大。
1.数据库级锁(Database-Ievel Locks)
在我们通过 CONNECT DATABASE 或者 CREATE DATABASE 语句访问数据库时,
系统都将自动在该数据库上加上一个共享(S)锁,这样可以防止其他用户删除数据库或
者在该数据库上加排它(X)锁。
2.表级锁(Table-Ievel Locks)
表级锁就是指锁定的对象是一个表,可以通过如下语句显式地对表加锁和释放锁:
BEGIN WORK;
LOCK TABLE tab1 IN EXCLUSIVE MODE;
LOCK TABLE tab2 IN SHARE MODE;
UNLOCK TABLE tab1;
在执行如下一些 DDL 语句时,会自动对表进行加锁,如 ALTER FRAGMENT、
ALTER INDEX、ALTER TABLE、CREATE INDEX (如果没有使用 ONLINE 模式)、DROP
INDEX(如果没有使用 ONLINE 模式)、RENAME COLUMN、RENAME TABLE。
在整个表或者表中的大部分数据需要更新时,使用表级锁的效率高。
3.页级锁(Page Locks)
数据库物理上把多行记录存放在数据页(Page)上,页级锁指锁的对象是一个数据
页,当采用页级锁访问记录时,会自动对访问的数据页进行加锁。当按物理顺序
访问和更新多条记录时,使用页级锁的效率较高。
可以通过如下方式指定页级锁模式:
ALTER TABLE tab1 LOCK MODE (PAGE);
CREATE TABLE tab1(...) LOCK MODE PAGE ;
CREATE TABLE 时若不指定锁模式,则将采用 ONCONFIG 参数 DEF_TABLE_LOCKMODE 来指定表的锁模式。
4.行级锁(Row Locks)
关系型数据库的数据是按行来管理的,所以行级锁很容易理解。在 OLTP 系统中行级锁的使用很广泛,只需要锁定所访问的少数记录情况,使用行级锁的效率较高。
可以通过如下方式指定行级锁模式:
ALTER TABLE tab1 LOCK MODE (ROW);
CREATE TABLE tab1(...) LOCK MODE ROW ;
CREATE TABLE 时若不指定锁模式,则将采用 ONCONFIG 参数 DEF_TABLE_LOCKMODE 来指定表的锁模式。
5.锁(Index key)
索引采用 B+树的存储结构,所以对索引的锁管理就是管理索引的 Key 值。数据库采用开、闭区域的方式进行索引的锁管理,示例如下:
Create table tab1 (c1 int,c2 int) lock mode row;
Create unique index idx_tab1 on tab1(c1);
Insert into tab1 values(1,2);
Insert into tab1 values(2,2);
Insert into tab1 values(3,2);
假设表中只有如上 3 行记录,当执行 update tab1 set c1=0 where c1>=3;语句时,将对索引 key 值为 3 的记录进行闭区间加锁,意味着此时不能新增 key 值大于 3 的记录。若此时执行 insert into tab1 values(4,2),则会提示 Index 锁冲突错误。
边栏推荐
- SEO的5大关键指标:排名+流量+会话+停留时长+跳出率
- Can Navicat directly operate the Android database SQLite
- Cesium graphic annotation circle, square, polygon, ellipse, etc
- 2020.3.3 notes async/await and promise and Then processes and threads
- UCLA | generative pre training for black box optimization
- 5 key indicators of SEO: ranking + traffic + session + length of stay + bounce rate
- mysql的tinyint字段类型判断的疑惑
- sql_ mode=only_ full_ group_ By's pit
- 什么是存储引擎以及MySQL常见的三种数据库存储引擎
- EasyRecovery15非常好用的电脑数据恢复软件
猜你喜欢

How to draw an industry investment map

5 key indicators of SEO: ranking + traffic + session + length of stay + bounce rate
![[openwrt] we recommend a domestically developed version of openwrt, an introduction to istoreos. It is very easy to use. It is mainly optimized. It solves the problem of Sinicization.](/img/62/6152d5a30c92a340cb286c7b1cbc54.png)
[openwrt] we recommend a domestically developed version of openwrt, an introduction to istoreos. It is very easy to use. It is mainly optimized. It solves the problem of Sinicization.

DAP data scheduling function improvement description

Nodejs connects to MySQL through heidisql, and ER appears_ BAD_ DB_ ERROR: Unknown database 'my_ db_ books'

Where is the red area of OpenCV?

2. play the chromatic harmonica

讲座记录《捷联惯导解算的历史及发展》

Numpy NP tips: use OpenCV to interpolate and zoom the array to a fixed shape cv2 resize(res, dsize=(64, 64), interpolation=cv2. INTER_ CUBIC)

Changsha's "talent seeking": "making efforts" and "making practical moves" go hand in hand, "rapid development" and "slow life" go hand in hand
随机推荐
Numpy NP tips: squeeze and other processing of numpy arrays
Laravel document sorting 6. Response
Laravel document sorting 7. View
UCLA | 用于黑盒优化的生成式预训练
CMD operation MySQL in Windows
Is opencv open source?
Intel 13th generation core showed its true colors for the first time: 68mb cache improved significantly
LabVIEW开发气体调节器
Upgrade cmake
地方/園區產業規劃之 “ 如何進行產業定比特 ”
Sourcetree pulls the code and prompts to fill in authentic, but the configuration cannot change the user
Lecture record: history and development of strapdown inertial navigation solution
Introduction to intstream API
Anaconda安装+TensorFlow安装+Keras安装+numpy安装(包含镜像和版本信息兼容问题)
论文笔记: 多标签学习 ESMC (没看懂, 还没写出来, 暂时放这里占个位置)
MySQL order by
List rendering in wechat applet
MySQL插入过程报错1062,但是我没有该字段。
Vigilance against over range collection of privacy - ten mobile app violations
mysql的tinyint字段类型判断的疑惑