人大金仓数据库KingbaseES 数据库中锁相关整理(死锁)

118 阅读2分钟

数据库的锁

关键字:

KingbaseES、锁、人大金仓、KingbaseES

锁的介绍

锁是计算机协调多个进程或线程并发访问某一个资源的机制。

在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。

如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。

从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

锁的分类

锁根据不同的分类方法,可以有多种分类形式。

在锁的分类中,不同分类方式锁所表示的含义是不一样的,不能混淆,比如,不能将行锁与共享锁做比较,不然会陷入死胡同,这是两种不同的概念。

  • 死锁

死锁是指两个或两个以上的事务在执行过程中**相互持有对方期望的资源**,若没有其他机制,他们将无法进行下去。

形成死锁的4个必要条件

1. 请求与保持条件:获取资源的进程可以同时申请新的资源。

2. 非剥夺条件:已经分配的资源不能从该进程中剥夺。

3. 循环等待条件:多个进程构成环路,并且每个进程都在等待相邻进程正占用的资源。

4. 互斥条件:资源只能被一个进程使用。

减少死锁的方法

1.在所有事务中都以相同的次序使用资源。

2. 使事务尽可能简单并在一个批处理中。

3. 为死锁超时参数设置一个合理范围,如10s;超时则自动放弃本操作,避免进程挂起。可以在文件中设置:log_lock_waits = on deadlock_timeout = 10s

4. 避免在事务内核用户进行交互,减少资源的锁定时间。

5.使用较低的隔离级别,相比较高的隔离级别能够有效减少持有共享锁的时间,减少锁之间的竞争。