
MySQL
文章平均质量分 92
平常写SQL语句都是很行云流水的,但是触及到底层做性能优化往往并不是很顺利,本专栏将主要围绕MySQL底层知识做一个简单易懂的讲解,方便大家更加清晰的对MySQL的底层有深入的印象和理解。
嗯哼唉、
后端、云计算、大数据
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL实现高可用——MHA
文章目录一、简介二、MHA服务1.服务角色2.提供的工具3.工作原理一、简介MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/s原创 2020-06-25 20:57:51 · 293 阅读 · 0 评论 -
乐观锁和悲观锁
隔离级别就是在数据库事务中,为保证并发数据读写的正确性而提出的定义,并不是MySQL的专有概念,每种关系型数据库都提供了各自特色的隔离级别实现,通常定义中是以锁为实现单元,MySQL InnoDB为例是基于MVCC和锁的复合实现,按照隔离程序从低到高MySQL事务隔离级别分为四个不同层次:读未提交:就是一个事务能够看到其他事务尚未提交的修改,最低的隔离水平允许脏读出现读已提交:事务能够看到数...原创 2019-11-22 10:18:04 · 227 阅读 · 0 评论 -
为什么表数据删掉一半, 表文件大小不变?
当数据库存储了一些已经不需要的数据,需要清除节省空间,之后发现表文件的占用大小还是不变的,这是为什么呢???今天围绕数据库表的回收,讨论下如何处理这个问题。首先还是针对应用最广泛的InnoDB引擎展开分析,一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL8.0之前,表结构数据存在.frm文件里,MySQL8.0版本开始,这些数据存在系统数据库里,因为表结构定义占用的空间很小。...原创 2019-08-06 11:52:26 · 787 阅读 · 0 评论 -
事务到底是隔离的还是不隔离的?
专栏前面的文章提到过如果是可重复读隔离级别,事务T启动的时候会创建一个read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到的一样。就是说一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。但是专栏上一篇文章描述行锁的时候说到一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,不能这么超然会被锁住,进入等待状态。那么问题是既然进入了...原创 2019-08-03 00:51:19 · 170 阅读 · 0 评论 -
行锁功过:怎么减少行锁对性能的影响?
上一篇文章介绍了全局锁的特性,并且与其他功能相同的方法做了对比;讲解了表锁的两种类型,今天主要来说一下MySQL的行锁。行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,MyISAM引擎就不支持行锁。不支持意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重...原创 2019-08-01 17:15:24 · 458 阅读 · 0 评论 -
全局锁和表锁 : 给表加个字段怎么有这么多阻碍?
不论是我们接触过的synchronized还是ReentrantLock等锁,都是为了解决业务中并发的问题,而数据库中也是如此,MySQL里面的锁大致分为三种,全局锁,表级锁和行锁三类。今天这篇文章,将会和你分享全局锁和表级锁。锁的设计是非常复杂的,专栏主要介绍的是碰到锁时的现象和其背后的原理。全局锁全局锁就是整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flush tab...原创 2019-08-01 11:50:45 · 271 阅读 · 0 评论 -
深入浅出索引(下)
上一篇专栏我们主要讲了索引不同的种类和对应的原理方法,优缺点这样的特性,并且还知道了主键索引和非主键索引的区别,应用场景等一系列的话题让我们了解了索引,接下来,将会更加深入的了解索引。在上面这个表中,如果执行select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?现在来看一下这条SQL查询语句执行流程:在k索引树上找到k=...原创 2019-07-30 17:05:41 · 260 阅读 · 0 评论 -
深入浅出索引( 上)
大家都知道数据库的索引是用来提升检索速度的,但是索引内部是如何工作的,今天就来说说这个话题。索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。帮助我们更快的查到我们需要的数据。索引的常见模型索引的种类有很多种,这里介绍三种常见,比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。主要从使用角度分析一下三种模型的区别:哈希表哈希表是一种以键值(k-v)存储数据的结构,只...原创 2019-07-29 17:23:40 · 232 阅读 · 0 评论 -
事务隔离: 为什么你改了我还看不见?
提到事务,大家肯定不会陌生,在和数据库打交道的时候我们总是会用到事务。最经典的例子就是给人转账,要经历几个步骤:查询余额,账户金额扣除与增加,余额更新并保存等等几个步骤。对于一个人来说,理解实现起来都很简单,无非就是有钱扣钱没钱抛出一个RuntimeException,扣完钱之后做个加减法保存一下。但是如果银行这么整的话,那么就乱了。所以就会涉及到事务的概念,简单来说,事务是保证一组数据库操作,...原创 2019-07-28 21:42:46 · 291 阅读 · 0 评论 -
日志系统: 一条SQL更新语句是如何执行的?
前面的文章中,我们系统了解了一个查询语句的执行流程,当连接器连接完成之前先会查询缓存,如果有就会快很多,但是频繁的update操作又会让查询缓存很难受,如果查询不到就会进入分析环节和优化环节,最后是执行环节,这样一个SQL语句就执行完了,这次我们来说一下更新语句的执行过程。MySQL可以恢复到半个月内任何一秒的状态,这是如何做到的呢?首先还是从一个普通的update语句开始:创建一张表,插入...原创 2019-07-27 19:41:03 · 561 阅读 · 0 评论 -
一条SQL查询语句是如何执行的?
我们在写SQL语句的时候,CRUD这些基本操作大家应该已经是得心应手了,本专栏更加倾向于SQL优化与运行过程模型的角度重新学习SQL,以便大家在做性能优化的时候更加熟练。这是专栏的第一篇文章,首先从最简单的SQL语句入手。mysql> select * from T where ID=1;将SQL语句拆解一下,从中可以看出SQL语句在MySQL中各个模块的执行过程。大体来说,My...原创 2019-07-26 21:30:12 · 313 阅读 · 0 评论