事务与并发控制

  1. 事务的基本的概念和性质

ACID:

  • 原子性:一个事务要么全部执行,要么全部不执行

  • 一致性:执行事务的时候,数据库从一个一致的状态变更到另一个状态

  • 隔离性: 确保在并发执行的时候,每个事务感觉不到其他事务在并发的执行

  • 持久性:一个事务完成之后,即使数据库发生故障,他对数据库的改变应该永久的保存在数据库中。

  1. 并发引起的现象

    • 脏读:一个事务读取了第二个事务的已经修改但是未提交的数据

    • 不可重复读:一个事务第一次读取数据之后,被读取的数据被另一个已提交的事务进行了修改,事务再次读取这些数据时候发现数据已经被另外一个事务所修改,两次查询不一致

    • 幻读:一个事务的两次结果集记录数不一致(特殊的不可重复读)

  2. 事务隔离级别

Pgsql 中默认的为读已提交

  • 读未提交:所有事务可以看到其他未提交的事务的结果

  • 读已提交:一个事务只能看到已经提交事务对关联数据的影响

  • 可重复读:确保同一个事务的多个实例在并发读取数据时候,会看到同样的数据行

  • 可序列化:强制进行事务排序,使得其互不冲突

  1. 查看数据库的隔离级别操作

  • 查看全局事务级别

    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

并发控制

  1. 基于锁的并发控制

    1. 排他锁: 被加锁的对象只能被持有锁的事务的读取和修改,其他事务无法在改对象上加其他锁,也不能读取和修改对象

    2. 共享锁:被加锁对象可以被锁事务读取,但是不能修改,其他事务可以在改对象上再加共享锁

    3. 咨询锁(pg特有):

  2. 基于多版本的并发控制

    pgsql默认会加入以下几个字段

    select xmin,xmax,cmin,cmax from test
    1. 以上四个字段保存了创建改行数据的事务xid,xmax保存的是删除改行数据的xid

    • xmin、xmax:与事务对其他事务可见性相关,用于同一个事务可见性判断

    • cmin、cmax:分别为用于插入和删除该原组的时候在十五中的命令序列标识

  3. 判断事务可见性

    • 1 如果xmax没有值,改行对其他事务是可见的

    • 如果他被设置为回滚事务xid,则改行对其他事务也是可见的

    • 如果被设置为一个正在运行时,没有commit和rollback的事务的xid,则改行对其他事务是可见的

    • 如果他被设置为一个已提交的事务的xid,该行在这个已提交的事务之后发起的所有事务都是不可见的

  4. 使用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事务与并发控制的更多相关文章

  1. EntityFramework与TransactionScope事务和并发控制

    最近在园子里看到一篇关于TransactionScope的文章,发现事务和并发控制是新接触Entity Framework和Transaction Scope的园友们不易理解的问题,遂组织此文跟大家共 ...

  2. 深入理解 MySQL ——锁、事务与并发控制

    本文首发于vivo互联网技术微信公众号 mp.weixin.qq.com/s/JFSDqI5ya… 作者:张硕 本文对 MySQL 数据库中有关锁.事务及并发控制的知识及其原理做了系统化的介绍和总结, ...

  3. Hibernate 事务和并发控制

    首先关于Hibernate事务控制,下面是非常权威的资料, https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch02.html ...

  4. [转帖]2019-03-26 发布 深入理解 MySQL ——锁、事务与并发控制

    深入理解 MySQL ——锁.事务与并发控制 https://segmentfault.com/a/1190000018658828 太长了 没看完.. 数据库 并发  mysql 639 次阅读   ...

  5. [转帖]深入理解 MySQL—锁、事务与并发控制

    深入理解 MySQL—锁.事务与并发控制 http://www.itpub.net/2019/04/28/1723/ 跟oracle也类似 其实所有的数据库都有相同的机制.. 学习了机制才能够更好的工 ...

  6. 深入理解Mysql——锁、事务与并发控制

    本文对锁.事务.并发控制做一个总结,看了网上很多文章,描述非常不准确.如有与您观点不一致,欢迎有理有据的拍砖! mysql服务器逻辑架构 每个连接都会在mysql服务端产生一个线程(内部通过线程池管理 ...

  7. mysql事务和并发控制

    谈到事务,首先想到的问题是并发控制.比如两个用户同时操作数据库里面的一张表,一个正在读数据,一个正在删除数据,那么读数据的读出的结果究竟是多少?并发可以提高系统的性能,让多个用户同时操作一份数据,但为 ...

  8. HBase 事务和并发控制机制原理

    作为一款优秀的非内存数据库,HBase和传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性.一致性.隔离性以及持久性,即通常所说的ACID特性.为了实现事务特性, ...

  9. Anatomy of a Database System学习笔记 - 事务:并发控制与恢复

    这一章看起来是讲存储引擎的.作者抱怨数据库被黑为“monolithic”.不可拆分为可复用的组件:但是实际上除了事务存储引擎管理模块,其他模块入解析器.重写引擎.优化器.执行器.访问方式都是代码相对独 ...

随机推荐

  1. Android Picasso最详细的使用指南

    Picasso 是Square 公司开源的Android 端的图片加载和缓存框架.Square 真是一家良心公司啊,为我们Android开发者贡献了很多优秀的开源项目有木有!像什么Rerefoit . ...

  2. postman测试方法,出现400错误码

    下午毛概课上帮同学debug了个错误: postman测试 ,得到返回 400的状态码错误: 查询博客: https://blog.csdn.net/zhangmengleiblog/article/ ...

  3. activeMQ类别和流程

    Point-to-Point (点对点)消息模式开发流程 :        1.生产者(producer)开发流程: 1.1 创建Connection: 根据url,user和password创建一个 ...

  4. [20190409]pre_page_sga=true与连接缓慢的问题.txt

    [20190409]pre_page_sga=true与连接缓慢的问题.txt --//曾经遇到11g下设置pre_page_sga=true启动缓慢的问题(没有使用hugepages).--//链接 ...

  5. Linux系统下virtuoso数据库安装与使用

    最近在调研关联数据的一些东西,需要用到rdf数据库,所以接触了virtuoso数据库.安装的坑其实并不多,之前在windows 10上安过一次.这次在ubuntu 18.04上安装一下,其他的linu ...

  6. centosFTP服务搭建及权限配置

    引用一个其他大佬对vsftpd的描述: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点. vsftpd 是一个 UNIX 类操作系统上运行的服务器的 ...

  7. Java开发学习心得(三):项目结构

    [TOC] 3 项目结构 经过前面一系列学习,差不多对Java的开发过程有了一定的了解,为了能保持一个良好的项目结构,考虑到接下来要进行开发,还需要学习一下Java的项目结构 下面以两个项目结构为参照 ...

  8. 【Python 14】分形树绘制2.0(重复五角星+Turtle库文档)

    1.案例描述 加入循环操作绘制重复不同大小的图形 2.案例分析 3.turtle库补充 # 画笔控制函数 turtle.penup() # 抬起画笔,之后移动画笔不绘制图形 turtle.pendow ...

  9. Hadoop Compatibility in Flink

    18 Nov 2014 by Fabian Hüske (@fhueske) Apache Hadoop is an industry standard for scalable analytical ...

  10. Mango 基础知识

    1 mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2 使用pymongo 1. 导入pymo ...