当前位置:网站首页>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 锁冲突错误。
边栏推荐
- numpy np tips:使用opencv对数组插值放缩到固定形状 cv2.resize(res, dsize=(64, 64), interpolation=cv2.INTER_CUBIC)
- Leetcode points to the leetcode road of offering II 091 house painting [dynamic planning] heroding
- Flutter FittedBox组件
- 单元测试覆盖率
- What is persistence? What are RDB and AOF in redis persistence?
- LabVIEW开发气体调节器
- How much do you know about the use value of WMS warehouse management system
- SQL, CTE, FLG CASE问题
- Mathematical analysis_ Notes_ Chapter 3: limits
- Unit test coverage
猜你喜欢

单元测试覆盖率

A detailed summary of TCP connection triple handshake

文本关键词提取:ansj

La gamme NFT Color, qui représente la diversité, est en ligne sur la plate - forme du marché Sandbox
![Leetcode points to the leetcode road of offering II 091 house painting [dynamic planning] heroding](/img/ad/69fce7cf064479a0ddd477fb935de2.png)
Leetcode points to the leetcode road of offering II 091 house painting [dynamic planning] heroding
![[proteus simulation] Arduino uno key controls the flashing increase / decrease display of nixie tube](/img/28/33f3e9736a68439b5bcdc4e75c939c.png)
[proteus simulation] Arduino uno key controls the flashing increase / decrease display of nixie tube
![LeetCode 劍指Offer II 091 粉刷房子[動態規劃] HERODING的LeetCode之路](/img/ad/69fce7cf064479a0ddd477fb935de2.png)
LeetCode 劍指Offer II 091 粉刷房子[動態規劃] HERODING的LeetCode之路

讲座记录《惯性导航的新应用——惯性测量》

Shutter fittedbox component

Anaconda installation +tensorflow installation +keras installation +numpy installation (including image and version information compatibility issues)
随机推荐
"Grammar sugar" -- my new programming knowledge
A detailed summary of four handshakes (or four waves) over TCP connections
English Grammar - pronunciation rules
LeetCode 剑指Offer II 091 粉刷房子[动态规划] HERODING的LeetCode之路
【LeetCode】22. bracket-generating
Laravel document sorting 6. Response
Summary of various problems encountered by cocos2d-x
NFT insider 63: the sandbox reached a cooperation with Time magazine, and YGG established Spain's subdao
Communication problems in parent and child components of uniapp
如何绘制产业招商地图
"Comment positionner l'industrie" dans la planification industrielle locale / parc
论文阅读《LSD-SLAM: Large-Scale Direct Monocular SLAM》
Finereport displays and hides column data according to conditions
Retrofit 源码分析
微信小程序父子组件之间传值
数字时代的“文艺复兴”?起底数字藏品,让人欢喜让人愁
【LeetCode】143. Rearrange linked list
什么是存储引擎以及MySQL常见的三种数据库存储引擎
SQL injection details
2021.4.15 note the difference between let, const and VaR in ES6