PostgreSQL 事务处理和并发控制

事务处理和并发控制

一、事务管理简介

        事务是PostgreSQL中的基本工作单元,它是用户定义的一个数据库操作程序,这些操作要么全做、要么全部做,是一个不可分割的工作单位。

1、事务含义

PostgreSQL 事务处理和并发控制

PostgreSQL 事务处理和并发控制

PostgreSQL 事务处理和并发控制

2、事务的属性ACID

四大属性:原子性、一致性、隔离性、持久性。

PostgreSQL 事务处理和并发控制

3、事务块管理的常用语句

PostgreSQL 事务处理和并发控制

PostgreSQL 事务处理和并发控制

 ROLLBACK TO 是唯一的途径来重新控制一个由于错误被系统置为中断状态的事务块,而不是完全回滚它并重新启动。

BEGIN 和COMMIT同时用,是用来标识事务的开始和结束。

4、案例

①、创建表

PostgreSQL 事务处理和并发控制

②、插入数据并查询

PostgreSQL 事务处理和并发控制

PostgreSQL 事务处理和并发控制

二、事务并发控制

数据库中的数据并发操作经常发生,会出现:

1、脏读

2、幻读

3、不可重复性读取

    两种隔离级别 ①、读已提交

                         ②、可串行化

三、锁机制

需要使用锁机制来保证事务的并发。使用锁可以解决用户存取数据的这个问题,从而保证数据库的完整性和一致性。

(一)、锁的类型

1、SpinLock (自旋锁)

        SpinLock 使用互斥信号,与操作系统和硬件环境联系比较密切。SpinLock 锁*的时间很短,没有等待队列和死锁检测机制。事务结束时,不能自动释放SpinLock 锁。

2、LWLock (轻量级锁)

        LWLock主要提供对共享存储器的数据结构的互斥访问。特点是等待队列和死锁检验。在事务结束时,可以自动释放LWLock锁。

        分为排他模式和共享模式。

3、RegularLock

是一般数据库事务管理中所指的锁。只要特点是等待队列、死锁检测和能自动释放锁。

PostgreSQL 事务处理和并发控制

(二)、死锁

        在两个或多个任务中,如果每个任务锁定了其他任务视图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁,此时系统处于死锁状态。

1、死锁出现的原因

        在多用户环境下,死锁的发生是由于两个事务都锁定了不同的资源、而又同时都在申请对方锁定的资源,即一组进程中的各个进程均占有不会释放的资源,但因互相申请其他进程占用的不会释放的资源而处于一种永久等待的状态。

行程死锁的必要条件:

PostgreSQL 事务处理和并发控制

2、可能会造成死锁的原因

①、锁:等待获取资源(如对象、页、行、元数据和应用程序)的锁可能导致死锁。

②、工作线程:排队等待可用工作线程的任务可能导致死锁。如果排队等待的任务拥有阻塞所有工作线程的资源,则将导致死锁。

③、内存:当并发请求等待获得内存,而当前的可用内存无法满足其需求时、可能发生死锁。

④、并行查询的相关资源。通常与交换端口关联的处理协调器、发生器或使用者线程至少包含一个不属于并行查询进程时,可能会互相阻塞,从而导致死锁。

3、减少死锁的策略

复杂系统中不能百分之百的避免死锁。

PostgreSQL 事务处理和并发控制

四、应用

1、LOCK锁的语法

PostgreSQL 事务处理和并发控制

2、事务和锁的区别

        PostgreSQL中可以使用多种机制来确保数据的完整性,例如约束、触发器以及事务和锁。事务和锁的关系非常紧密。事务包含一些列的操作,这些操作要么全部成功。要么全部失败。通过事务机制管理多个事务,保证事务的一致性。事务中使用锁保护指定的资源,防止其他用户修改另外一个还没有完成的事务中的数据。

参考书籍资料!!