网站建设的条件分析,cn域名著名网站,济南网站建站模板,企业为什么要网站建设文章目录 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作174.1 事务隔离说明174.2 写入和读写操作174.3 并发写入事务的潜在死锁情况 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作
174.1 事务隔离说… 文章目录 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作174.1 事务隔离说明174.2 写入和读写操作174.3 并发写入事务的潜在死锁情况 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作
174.1 事务隔离说明
openGauss基于MVCC多版本并发控制并结合两阶段锁的方式进行事务管理其特点是读写之间不阻塞。SELECT是纯读操作UPDATE和DELETE是读写操作。
读写操作和纯读操作之间并不会发生冲突读写操作之间也不会发生冲突。每个并发事务在事务开始时创建事务快照并发事务之间不能检测到对方的更改。 读已提交隔离级别中如果事务T1提交后事务T2就可以看到事务T1更改的结果。可重复读级别中如果事务T1提交事务前事务T2开始执行则事务T1提交后事务T2依旧看不到事务T1更改的结果保证了一个事务开始后查询的结果前后一致不受其他事务的影响。 读写操作支持的是行级锁不同的事务可以并发更新同一个表只有更新同一行时才需等待后发生的事务会等待先发生的事务提交后再执行更新操作。 READ COMMITTED读已提交隔离级别事务只能读到已提交的数据而不会读到未提交的数据这是缺省值。REPEATABLE READ事务只能读到事务开始之前已提交的数据不能读到未提交的数据以及事务执行期间其它并发事务提交的修改。
174.2 写入和读写操作
关于写入和读写操作的命令
INSERT可向表中插入一行或多行数据。UPDATE可修改表中现有数据。DELETE可删除表中现有数据。COPY导入数据。
INSERT和COPY是纯写入的操作。并发写入操作需要等待对同一个表的操作当事务T1的INSERT或COPY未解除锁定时事务T2的INSERT或COPY需等待事务T1解除锁定时事务T2正常继续。
UPDATE和DELETE是读写操作先查询出要操作的行。UPDATE和DELETE执行前需要先查询数据由于并发事务彼此不可见所以UPDATE和DELETE操作是读取事务发生前提交的数据的快照。写入操作是行级锁当事务T1和事务T2并发更新同一行时后发生的事务T2会等待根据设置的等待时长若超时事务T1未提交则事务T2执行失败当事务T1和事务T2并发更新的行不同时事务T1和事务2都会执行成功。
174.3 并发写入事务的潜在死锁情况
只要事务涉及多个表的或者同一个表相同行的更新时同时运行的事务就可能在同时尝试写入时变为死锁状态。事务会在提交或回滚时一次性解除其所有锁定而不会逐一放弃锁定。例如假设事务T1和T2在大致相同的时间开始
如果T1开始对表A进行写入且T2开始对表B进行写入则两个事务均可继续而不会发生冲突但是如果T1完成了对表A的写入操作并需要开始对表B进行写入此时操作的行数正好与T2一致它将无法继续因为T2仍保持对表B对应行的锁定此时T2开始更新表A中与T1相同的行数此时也将无法继续产生死锁在锁等待超时内前面事务提交释放锁后面的事务可以继续执行更新等待时间超时后事务抛错有一个事务退出。如果T1T2都对表A进行写入此时T1更新1-5行的数据T2更新6-10行的数据两个事务不会发生冲突但是如果T1完成后开始对表A的6-10行数据进行更新T2完成后开始更新1-5行的数据此时两个事务无法继续在锁等待超时内前面事务提交释放锁后面的事务可以继续执行更新等待时间超时后事务抛错有一个事务退出。 点赞你的认可是我创作的动力 ⭐️ 收藏你的青睐是我努力的方向 ✏️ 评论你的意见是我进步的财富