文档章节

高性能Mysql——Mysql架构与历史

问题达人
 问题达人
发布于 2017/06/21 23:20
字数 788
阅读 16
收藏 0

###MySQL逻辑架构

输入图片说明

###并发控制

  • 服务器层 :表级锁

  • 存储引擎层:行级锁只有存储引擎层(InnoDB、XtraDB)实现

共享锁(Shared lock) 排他锁(exclusive lock) 或 读锁(read lock) 写锁(write lock)

####锁粒度

  • 表级锁( lock tables) Read Local
  • 行即锁 (select lock in share mode、 select for update)

###事物 ####ACID

  • 原子性(atomicity)
  • 一致性(consistency)
  • 隔离型(isolation)
  • 持久性(durability)

####隔离级别

  • READ UNCOMMIT(未提交读):造成脏读
  • READ COMMIT(提交读):造成不可重复读
  • REPEATABLE READ(可重复读):还有幻读(Innodb和Xtradb通过MVCC解决)
  • SERIALIZABLE(可串行读):强制事物串行执行

输入图片说明

####死锁 定义:两个或者多个事物在统一资源上相互占用,并请求锁定对方占用的自娱啊,从而导致恶性循环的现象

解决方案:

  • 死锁检测
  • 死锁超时机制 Innodb处理方式:将持有最少行级排他锁的事物进行回滚

####事物日志:提高事物效率 预写式日志(Write-Ahead Logging):修改数据时指修改内存拷贝,修改行为记录到持久在硬盘上的事物日志中,持久化以后再慢慢刷回到磁盘

  ps:顺序I/O、随机I/O

####Mysql的事物 事务型的存储引擎:

  • InnoDB
  • NDB Cluster

自动提交AUTOCOMMIT

启用:每一个查询都被当作一个事物执行提交操作
不启用:所有查询都放到一个事物中,直到COMMIT/ROLLBACK
DDL语句会强制执行COMMIT,比如 ALTER TABLE等语句
设置事物隔离级别:SET TRANSACTION IOSOLATION来设置事物隔离级别
ps:同一个事物中,使用多种存储引擎时不可靠的,可能会造成非事务型表上的变更无法回滚造成数据处于不一致的状态

####多版本并发控制(MVCC,Multiversion Concurrency Control) 可以认为MVCC是行级锁的变种,但是它在很多情况下避免了加锁操作,因此开销更低,实现来非阻塞的读,写操作也只锁定必要的行

实现方式:保存数据在某个时间点的快照

  • 乐观并发控制
  • 悲观并发控制

InnoDB实现

每行增加两个隐藏的列实现:创建时间/过去时间<<<系统版本号
事务开始时刻的系统版本号会作为事务的版本号
REPEATABLE READ(可重复读)隔离级别下,MVCC实现
SELECT:
    -   行的版本号<=事物版本号:数据要么在事务开始前已经存在,要么是在事务自身插入或者修改过的
    -  行的删除版本要么未定义,要么>事务版本号,确保事务读取到的行,在事务开始之前未被删除

INSERT:
    保存当前系统版本号为行版本号
DELETE:
    保存当前系统版本号为行删除标识
UPDATE:
    InnoDB为插入一行新纪录,保存当前系统版本号为行版本号,同时保存当前系统版本号到原来的行作为行删除标识

PS:MVCC只在REPEATABLE READ和READ COMMIT隔离级别下工作

© 著作权归作者所有

上一篇: hadoop初始-readme
下一篇: 编程资源
问题达人
粉丝 14
博文 94
码字总数 87078
作品 0
昌平
程序员
私信 提问
「ThinkPHP开发者周刊」第7期——性能分析和优化

[ 本周读数 ] ——ThinkPHP5的项目贡献者超过个 截至目前为止,核心框架在上的项目贡献者超过个,已经超过了ThinkPHP版本。有越来越多的开发者正在积极参与ThinkPHP5框架的PR,帮助官方发现了...

流年
2018/11/26
85
0
互联网技术栈 『Contents Catalog』

image.png 编程语言 Java书单——由入门到上天 UML-类间关系 Java解读-ThreadLocal详解与应用 并发编程-Concurrent用户指南 Java并发编程-原子性变量 Java 并发工具包-常用线程池 基于事件驱...

高广超
2017/11/03
0
0
NoSQL开篇——为什么要使用NoSQL

【编者按】NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分...

Mr&Cheng
2013/01/20
99
0
达达O2O后台架构演进实践:从0到4000高并发请求背后的努力

1、引言 达达创立于2014年5月,业务覆盖全国37个城市,拥有130万注册众包配送员,日均配送百万单,是全国领先的最后三公里物流配送平台。 达达的业务模式与滴滴以及Uber很相似,以众包的方式...

JackJiang2011
2018/12/10
0
0
达达O2O后台架构演进实践:从0到4000高并发请求背后的努力

1、引言 达达创立于2014年5月,业务覆盖全国37个城市,拥有130万注册众包配送员,日均配送百万单,是全国领先的最后三公里物流配送平台。 达达的业务模式与滴滴以及Uber很相似,以众包的方式...

首席大胸器
2018/12/10
368
2

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部