pgsql事务与并发控制
事务与并发控制
事务的基本的概念和性质
ACID:
原子性:一个事务要么全部执行,要么全部不执行
一致性:执行事务的时候,数据库从一个一致的状态变更到另一个状态
隔离性: 确保在并发执行的时候,每个事务感觉不到其他事务在并发的执行
持久性:一个事务完成之后,即使数据库发生故障,他对数据库的改变应该永久的保存在数据库中。
并发引起的现象
脏读:一个事务读取了第二个事务的已经修改但是未提交的数据
不可重复读:一个事务第一次读取数据之后,被读取的数据被另一个已提交的事务进行了修改,事务再次读取这些数据时候发现数据已经被另外一个事务所修改,两次查询不一致
幻读:一个事务的两次结果集记录数不一致(特殊的不可重复读)
事务隔离级别
Pgsql 中默认的为读已提交
读未提交:所有事务可以看到其他未提交的事务的结果
读已提交:一个事务只能看到已经提交事务对关联数据的影响
可重复读:确保同一个事务的多个实例在并发读取数据时候,会看到同样的数据行
可序列化:强制进行事务排序,使得其互不冲突
查看数据库的隔离级别操作
查看全局事务级别
select name,setting from pg_settings where name = 'default_transaction_isolation'
修改全局事务隔离级别
alter system set default_transaction_islation to 'REPEATABLE READ';
select pg_reload_conf();
select current_setting('transaction_isolation');查看当前会话的事务隔离级别
show transaction_isolcation;
设置当前事务的事务隔离级别
start transaction isolation level READ UNCOMMITED;
start TRANSACTION
select xxxx
END
并发控制
基于锁的并发控制
排他锁: 被加锁的对象只能被持有锁的事务的读取和修改,其他事务无法在改对象上加其他锁,也不能读取和修改对象
共享锁:被加锁对象可以被锁事务读取,但是不能修改,其他事务可以在改对象上再加共享锁
咨询锁(pg特有):
基于多版本的并发控制
pgsql默认会加入以下几个字段
select xmin,xmax,cmin,cmax from test
以上四个字段保存了创建改行数据的事务xid,xmax保存的是删除改行数据的xid
xmin、xmax:与事务对其他事务可见性相关,用于同一个事务可见性判断
cmin、cmax:分别为用于插入和删除该原组的时候在十五中的命令序列标识
判断事务可见性
1 如果xmax没有值,改行对其他事务是可见的
如果他被设置为回滚事务xid,则改行对其他事务也是可见的
如果被设置为一个正在运行时,没有commit和rollback的事务的xid,则改行对其他事务是可见的
如果他被设置为一个已提交的事务的xid,该行在这个已提交的事务之后发起的所有事务都是不可见的
使用pg_repack解决表膨胀问题
由于pg采用MVCC读不阻塞写,写不阻塞读,实现高性能和搞吞吐量。。但是也有不足的地方。如果对表进行大量的数据更新,则会导致其有两个版本存在,一个为更新前,一个为更新后,导致其性能有影响。
pg_repack是一个在线重建表和索引扩展。会在数据库中建立一个和需要清理的目标表一样的临时表,将目标表中的数据复制到临时表。
安装:
yum install -y pg_repack10
创建扩展
create extension pg_repack
重建表
pg_repack -t table_name -j 2 -D -k -h host -u postgres -d dbname
pgsql事务与并发控制的更多相关文章
- EntityFramework与TransactionScope事务和并发控制
最近在园子里看到一篇关于TransactionScope的文章,发现事务和并发控制是新接触Entity Framework和Transaction Scope的园友们不易理解的问题,遂组织此文跟大家共 ...
- 深入理解 MySQL ——锁、事务与并发控制
本文首发于vivo互联网技术微信公众号 mp.weixin.qq.com/s/JFSDqI5ya… 作者:张硕 本文对 MySQL 数据库中有关锁.事务及并发控制的知识及其原理做了系统化的介绍和总结, ...
- Hibernate 事务和并发控制
首先关于Hibernate事务控制,下面是非常权威的资料, https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch02.html ...
- [转帖]2019-03-26 发布 深入理解 MySQL ——锁、事务与并发控制
深入理解 MySQL ——锁.事务与并发控制 https://segmentfault.com/a/1190000018658828 太长了 没看完.. 数据库 并发 mysql 639 次阅读 ...
- [转帖]深入理解 MySQL—锁、事务与并发控制
深入理解 MySQL—锁.事务与并发控制 http://www.itpub.net/2019/04/28/1723/ 跟oracle也类似 其实所有的数据库都有相同的机制.. 学习了机制才能够更好的工 ...
- 深入理解Mysql——锁、事务与并发控制
本文对锁.事务.并发控制做一个总结,看了网上很多文章,描述非常不准确.如有与您观点不一致,欢迎有理有据的拍砖! mysql服务器逻辑架构 每个连接都会在mysql服务端产生一个线程(内部通过线程池管理 ...
- mysql事务和并发控制
谈到事务,首先想到的问题是并发控制.比如两个用户同时操作数据库里面的一张表,一个正在读数据,一个正在删除数据,那么读数据的读出的结果究竟是多少?并发可以提高系统的性能,让多个用户同时操作一份数据,但为 ...
- HBase 事务和并发控制机制原理
作为一款优秀的非内存数据库,HBase和传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性.一致性.隔离性以及持久性,即通常所说的ACID特性.为了实现事务特性, ...
- Anatomy of a Database System学习笔记 - 事务:并发控制与恢复
这一章看起来是讲存储引擎的.作者抱怨数据库被黑为“monolithic”.不可拆分为可复用的组件:但是实际上除了事务存储引擎管理模块,其他模块入解析器.重写引擎.优化器.执行器.访问方式都是代码相对独 ...
随机推荐
- 南京邮电大学java第三次实验报告
实 验 报 告 ( 2017 / 2018学年 第2学期) 课程名称 JAVA语言程序设计 实验名称 Java集成开发环境的安装与使用. Java变量.表达式与控制结构 实验时间 2018 年 4 月 ...
- Python使用Plotly绘图工具,绘制水平条形图
水平条形图与绘制柱状图类似,大家可以先看看我之前写的博客,如何绘制柱状图 水平条形图需要在Bar函数中设置orientation= 'h' 其他的参数与柱状图相同.也可以通过设置barmode = ' ...
- chart 模板 - 每天5分钟玩转 Docker 容器技术(165)
Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板. 以 templates/secrets.yaml 为例: 从结构看,文件的内 ...
- 【原】Java学习笔记005 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...
- GoldenDict词典的超级实用高级玩法----全文搜索功能
快捷键: Ctrl+Shift+F 菜单进入:搜索--全文搜索 模式:正则表达式 比如:我想知道地道的英文表达 请xx天/周/年假 给搜索框写入正则表达式 请(.)(天|周|年)假 就可以了 ...
- 一致性哈希算法----nginx负载均衡器配置之一
一直性Hash算法在很多场景下都有应用,尤其是在分布式缓存系统中,经常用其来进行缓存的访问的负载均衡,比如:redis等<k,v>非关系数据库作为缓存系统.我们首先来看一下采用取模方式进行 ...
- 【Python 03】程序设计与Python语言概述
人生苦短,我用Python. Python在1990年诞生于荷兰,2010年Python2发布最后一版2.7,Python核心团队计划在2020年停止支持 Python2,目前Python3是未来. ...
- Django 【orm】或
方式一: q=Q() q.connection="or" q.children.append(("pk",1)) q.children.append((&quo ...
- 转://11g之后,通过v$wait_chains视图诊断数据库hang和Contention
1g之前,通常我们数据库hang住了之后,我们会对数据库做hang analyze来进行分析,在11g之后,我们可以通过一个新的视图v$wait_chains来诊断数据库hang和contention ...
- Cursor: Pin S Wait On X In The Top 5 Wait Events
Wait Events , Posted in: Technical Track Tags: Group Blog Posts, Oracle, Technical Blog Lately, wait ...