事务

一致性读

醉酒当歌 提交于 2020-03-14 11:16:08
视图 view,它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。 另一个是 InnoDB 在实现 MVCC 时用到的一致性读视图,即 consistent read view,用于支持 RC(Read Committed,读提交)和 RR(Repeatable Read,可重复读)隔离级别的实现。 事务的可重复读的能力是怎么实现的? 可重复读的核心就是一致性读(consistent read);而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的话,就需要进入锁等待。 读提交的逻辑和可重复读的逻辑类似,它们最主要的区别是: 在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图; 在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。 一致性读具体实现 InnoDB 里面每个事务有一个唯一的事务 ID,叫作 transaction id。它是在事务开始的时候向 InnoDB 的事务系统申请的,是按申请顺序严格递增的。 而每行数据也都是有多个版本的。每次事务更新数据的时候,都会生成一个新的数据版本,并且把 transaction id 赋值给这个数据版本的事务 ID,记为 row trx_id。同时,旧的数据版本要保留,并且在新的数据版本中,能够有信息可以直接拿到它。也就是说

mysql-笔记 架构

点点圈 提交于 2020-03-14 09:42:17
1 第一层:连接处理、授权认证、安全 2 第二层:内置函数、解析、优化、跨存储引擎的功能:存储过程、触发器、视图 3 第三层:数据在存储和提取,底层函数(如开始事务)不解析sql、存储引擎之间不相互通信,只响应上层 客户端连接到服务器-需要认证:用户、原始主机、密码-然后验证特定操作权限 优化器:会请求存储引擎提供容量或某个具体操作的开销信息以及表数据的统计信息,在解析查询之前服务器会先检查查询缓存query cache,如果能找到,服务器就不必再执行查询解析、优化和执行 的整个过程,直接返回查询缓存中的结果集 并发控制:多个查询需要同一时间修改数据 使用锁防止数据损坏,但不支持并发处理 锁有:共享锁、排他销 也叫 读锁 、写锁 读锁是共享的,相互不阻塞 写锁是排他的,会阻塞其他的写锁和读锁 锁策略:在锁的开销和数据的安全性之间寻求平衡。每种mysql存储引擎都可以实现自己的锁策略和锁粒度。 表锁:table lock ,mysql中最基本的锁策略,且开销最小的锁策略      写操作前需要先获得写锁,这会阻塞其他用户对该表的所有读写操作      读锁之间是不相互阻塞的      写锁比读锁有更高的优先级     尽管存储引擎可以管理自己的锁,mysql本身还是会使用各种有效的表锁来实现 不同的目的。例如:服务器会为alter table之类的操作语句使用表锁   行级锁

sql server 中间件支持读写分离

南楼画角 提交于 2020-03-13 21:09:30
经过一段时间艰苦的奋斗,终于把sql server的读写分离搞定了。大家可以下载oneproxy-for-sqlserver来使用此功能。更多消息,可以访问 平民软件官网 获取。或者加入群 数据库监控 521095285 ,或者关注 oneproxy-monitor框架项目 (oneproxy-for-sqlserver是在此项目下开发的,会同步更新此框架) 下面说说oneproxy-for-sqlserver读写分离的使用方法和开发中遇到的有趣问题。 一. 使用方法 为了支持读写分离,需要修改[oneproxy]标签的数据和增加[database_xxx]标签的数据以及数据库组的信息。详细如下所示: 1) 在[oneproxy]标签下面增加:passwordseparate = true和readslave=true。增加后的配置如下所示: [oneproxy] logfile = oneproxy_log.log pidfile = oneproxy_pid.pid listen_addr = 0.0.0.0 listen_port = 9999,7777,6666 httpserver_addr = 0.0.0.0 httpserver_port = 8080 log_level = error data_dump = false log_sql = false

9月12日培训日记

岁酱吖の 提交于 2020-03-12 19:39:06
一个事务的一致性,举例:银行转帐的过程 两个事务之间的隔离性,举例:你取钱时,有人给汇款(产品购买)! 默认情况下,直接执行的一条语句自己就是一个独立的事务,一个事务不能回滚其他的事务。 并发事务中可能发生的各种问题:脏读、不可重复读、虚(幻)读。 事务隔离级别:Read Uncommitted、Read Committed、Repeatable Read、Serializable 做事务实验时要注意MyISAM与InnoDB的问题,MyISAM就是Access一样的桌面数据库,不支持事务和主外键关联,讲课时用MyISAM犯犯错误,再引出InnoDB有较好的教学效果。 要把一个表从一个类型转到另一个类型,可使用ALTER TABLE语句,这个语句指明新的类型: ALTER TABLE t ENGINE = MYISAM; ALTER TABLE t TYPE = BDB; 虽然TYPE仍然在MySQL 5.1中被支持,现在ENGINE是首选的术语。 select @@autocommit;set autocommit=0|1 begin,commit,rollback; 用begin,则不用设置autocommit;设置autocommit,则不用begin; 第一个实验(select @@tx_isolation,看show variables知道的

MySQL相关知识

一世执手 提交于 2020-03-12 11:58:06
目录 1. MySQL背景介绍 2. MySQL发展史 3. MySQL分支介绍 4. MySQL的优点 5. MySQL数据库组成 6. MySQL的原理 7. MySQL执行流程 8. MySQL日志 9. MySQL事务、锁、索引与SQL优化 ## MySQL背景介绍 随着互联网企业的兴起,例如阿里巴巴、网易、Yahoo、Facebook等大型互联网公司的推动,目前Mysql已经成为世界上最流行的数据库,并一步步开始占领了原有商业数据库的市场,目前Mysql已经成为互联网公司甚至部分传统公司的首选数据库。 ## MySQL发展史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,在2008年的时候AB公司被Sun公司收购,Mysql也就归属到了Sun公司下,但在Sun还没待多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本:Mysql5.5(5.1-5.5之间没有发布过版本),直至5.6Mysql就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引,至2019年,Mysql8.0.15已经GA(官方发布稳定版本),整体发展过程如下(AB版本不做加入): 5.1 → 5.5 → 5.6 → 5

浅谈mysql两种常用引擎MyIASM和InnoDB的区别

眉间皱痕 提交于 2020-03-12 08:14:05
Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。 MyIASM引擎 MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。不过和Innodb不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。 主要区别: 1、MyIASM是非事务安全的,而InnoDB是事务安全的

解惑 spring 嵌套事务

眉间皱痕 提交于 2020-03-12 02:39:19
/** * @author 王政 * @date 2006-11-24 * @note 转载请注明出处 */ 在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看, 绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 TransactionDefinition 接口中的定义 Java代码 /** * Support a current transaction, create a new one if none exists. * Analogous to EJB transaction attribute of the same name. * <p>This is typically the default setting of a transaction definition. */ int PROPAGATION_REQUIRED = 0; /** * Support a current transaction, execute non-transactionally if none exists. * Analogous to EJB transaction attribute of the same name. * <p>Note: For transaction managers

解惑 spring 嵌套事务

試著忘記壹切 提交于 2020-03-12 02:33:29
/** * @author 王政 * @date 2006-11-24 * @note 转载请注明出处 */ 在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看, 绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 TransactionDefinition 接口中的定义 Java代码 /** * Support a current transaction, create a new one if none exists. * Analogous to EJB transaction attribute of the same name. * <p>This is typically the default setting of a transaction definition. */ int PROPAGATION_REQUIRED = 0; /** * Support a current transaction, execute non-transactionally if none exists. * Analogous to EJB transaction attribute of the same name. * <p>Note: For transaction managers

面试被问分布式事务(2PC、3PC、TCC),这样解释没毛病!

若如初见. 提交于 2020-03-11 21:33:40
整理了一些Java方面的架构、面试资料(微服务、集群、分布式、中间件等),有需要的小伙伴可以关注公众号【程序员内点事】,无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问分库分表怎么办?你可以这样怼他 3万字总结,Mysql优化之精髓 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架 9种分布式ID生成之美团(Leaf)实战 絮絮叨叨 还记得刚入行开始写Java时,接触的第一个项目是国家电网的一个业务系统,这个系统据说投资了5亿人民币进行研发,鼎盛时期研发人员一度达到过500人。项目采用当时最流行的ssh(Struts+Spring+Hibernate)框架,典型的三层架构(controller - > service -> dao)简单又粗暴,所有人写的代码都放在一个大工程里,项目文件大小达到几百M,解决代码冲突是当时最大的工作量。 然而戏剧性的是,交测当天五人同时上线,项目崩 崩 崩溃了。。。 哎!你永远想象不到甲方愤怒的样子,项目组每个人的祖宗都被问候到了。 说了一些没用的,脑子里总想起这个事,不说不痛快,大家姑且就当笑话听吧,下边我们进入正题 引言 前两天有个学弟公众号留言,说让讲讲分布式事务,面试就挂在这个问题上。时下随着微服务架构体系的流行,面试的题目也都慢慢开始升级,不再是早些年单纯的问点SSH框架知识、数据结构了。