如何使用mysql 两阶段提交

如何使用mysql 两阶段提交,第1张

阶段:Java面向象编程

1.Java基本数据类型与表达式支循环

2.StringStringBuffer使用、则表达式

3.面向象抽象封装继承态类与象象初始化收构造函数、this关键字、参数传递程、static关键字、内部类Java垃极收机制Javadoc介绍

4.象实例化程、覆盖、final关键字、抽象类、接口、继承优点缺点剖析象态性:类父类间转换、抽象类接口态应用、态带处

5.Java异处理异机制原理

6.用设计模式:Singleton、Template、Strategy模式

7.JavaAPI介绍:种基本数据类型包装类SystemRuntime类DateDateFomat类等

8.Java集合介绍:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等用集合类API

9.Java

I/O输入输流:FileFileRandomAccess类字节流InputStreamOutputStream字符流Reader

Writer及相应实现类IO性能析字节字符转化流包装流概念及用包装类计算机编码

10.Java高级特性:反射、代理泛型

11.线程原理:何程序创建线程(Thread、Runnable)线程安全问题线程同步线程间通讯、死锁

12.Socket网络编程

第二阶段:Java

Web发

1.Java解析XML文件DOM4J

2.MySql数据库应用、表连接查询应用

3.JspServlet应用

4.Http协议解析

5.Tomcat服务器应用配置

6.WebService服务配置应用

第三阶段:android UI编程

1、Android发环境搭建:Android介绍Android发环境搭建第Android应用程序Android应用程序目录结构

2、Android初级控件使用:

TextView控件使用

Button控件使用

EditText控件使用

ImageView使用

RadioButton使用

Checkbox使用

Menu使用

3、Android高级控件使用:

Autocompletion使用

ListView使用

GridView使用

Adapter使用

Spinner使用

Gallary使用

ScrollView使用

4、框与菜单使用:

Dialog基本概念

AlertDialog使用

DatePickerDialog使用

Menu使用

自定义Menu实现

5、控件布局:

线性布局使用

相布局使用

表格布局使用

6、Acitivity管理:

AndroidManifest.xml文件作用

Intent使用

使用Intent传递数据

启Activity

IntentFilter使用

Activity Group使用

7、自定义控件实现:

自定义ListView实现

折叠ListView使用

自定义Adapter实现

自定义View实现

态控件布局实现

第四阶段:android网络编程与数据存储

1、基于Android平台HTTP通讯:

Http协议顾

Apache Commons 工具包介绍

使用Get向服务器提交数据

解析服务器响应数据

使用POST向服务器提交数据实现

向服务器提交非文本数据实现

使用Http协议实现线程载

使用Http协议实现断点续传

2、Android数据存储技术:

SQLite3数据库简介

SQL语句顾

SQLite3编程接口介绍

SQLite3事务管理

SQLite3游标使用

SQLite3性能析

访问SDCard

访问SharedPreferences

3、ContentProvider使用:ContentProvider实现共享数据、URI

解析与UriMatcher、ContentUris使用、使用ContentResolver *** 作ContentProvider、

ContentProvider监听Android异步 *** 作:Handler使用异步任务基本概念AsyncTask使用

第五阶段:android手机硬件管理

1、图及定位技术:GPS简介LocationManager使用Google Map添加标记查询某附近建筑使用Google Map实现点点导航

2、传器使用:向、加速度(重力)、光线、磁场、距离、温度等传器使用

3、近场通信技术:NFC技术简介NFC技术用场景介绍NFC技术实现

4、媒体管理技术:MediaPlayer使用

5、触摸屏技术:手势识别点触摸技术

第六阶段:Android图形编程技术

1、图形处理基础:2D图形编程基础

2、点、线、面等基本图形元素绘制

3、Android画框架简介

4、位移画实现

5、淡入淡画实现

6、旋转画实现

7、Matrix使用

第七阶段:Android游戏发

1、Android游戏发:Android游戏发概述

2、SurfaceView使用

3、物理球技术

4、碰撞检测技术

5、图片、文字背景音乐等资源使用

6、游戏引擎基础概念

7、Cocoa2d-Android引擎使用

8、OpenGL ES使用

MySQL通过内部两阶段提交协议来提交事务,如下图

具体实现如下图:

第一阶段 :InnoDB prepare,持有prepare_commit_mutex,并且write/sync redo log;将rollback设置为Prepared状态,binlog prepare不作任何 *** 作;

第二阶段 :包含两步,write/sync Binlog及 InnoDB commit (写入COMMIT标记后释放prepare_commit_mutex);

考虑mysql以binlog的写入与否作为事务提交成功与否的标志,如果 在写入innodb commit标志时崩溃(binglog已经写文件但是还没有提交) ,则恢复时,会重新对commit标志进行写入;此时的事务崩溃恢复过程如下:

1)扫描最后一个Binlog文件,提取其中的xid;

2)InnoDB维持了状态为Prepare的事务链表,将这些事务的xid和Binlog中记录的xid做比较,如果在Binlog中存在,则提交,否则回滚事务。

但其中也会存在2个问题:

并发危机:全局大锁prepare_commit_mutex

Mysql5.6.5前的做法,加锁,串行化

无锁方案:如果能保证binlog write 和  Innodb commit的顺序一致性就可以解决该问题。

性能问题:参数sync_binlog =1 ,innodb_flush_log_at_trx_commit =1时,fsync *** 作频繁

数据持久化到磁盘:调用fsync将缓存中的数据刷新到磁盘(普通硬盘150次/s和SSD 1200次/S),影响TPS;Group Commit *** 作,在多个事务并发时,将等待fsync的多个事务合并为仅调用一次fsync *** 作,以解决innodb fsync的问题,对binlog 的fsync也适用

对上述两个问题的解决:

针对并发问题

Group *** 作,三个阶段都在维护一个队列。第一个进队列的线程称为leader线程,负责对队列里所有线程进行 *** 作;之后进入队列的线程称作follower线程,follower 线程进入队列后睡眠,等待leader完成 *** 作后将他们唤醒。注意:前一个队列leader进入后一个队列时,会把自己原队列的follower全加入进去。

针对一致性问题 

Group commit 分为三个阶段,每个阶段有一个线程在执行。分阶段的目的在于各个阶段可以并发执行,提升效率。

涉及参数说明:

sync_binlog =1 :启用group commit之后,其实已经不是一个事务去刷一次磁盘了,而是一组事务刷一次磁盘。图中1、2分别代表sync_binlog 不同配置下,通知其他线程(如dump线程)binlog 已经更新了,当配置为1时,要严格等到sync完毕之后才会发送广播通知, 如果sync_binlog配的是别的值,MySQL会把通知提前到1的位置

binlog_group_commit_sync_no_delay_count(组提交sync无延迟时间最大event数)及binlog_group_commit_sync_delay(组提交sync延迟时间,单位:毫秒):一般来说我们认为group commit 中最耗时的 *** 作是sync阶段,于是我们可以在sync阶段在leader真正sync之前进行一个等待,以便让fsync一次性刷新更多的事务。这对需要等待sync 完之后才能进行的 *** 作(比如dump线程)可能有性能提升。

两阶段提交:

MYSQL_BIN_LOG作为协调者


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7490711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存