MySQL
文章平均质量分 92
MySQL的一些实现机制
aidanzheng
毕业于西北大学数学系,13年软件开发经验的老程序员。10000小时定律是我的座右铭,不断的学习,不断突破自我
展开
-
MySQL一条SQL语句是如何执行的
查询语句的执行流程1、连接阶段:客户端发起数据库的连接请求,首先与MySQL的连接器完成TCP的3次握手,然后客户端发送用户名与密码给到连接器,连接器进行用户名、密码与权限校验,如果校验不通过,返回错误,否则继续。可以看出连接的建立是一个非常耗时的操作,为此我们一般使用长连接,使用长连接一般会使用连接池。但是长连接也会导致MySQL的内存占用高,因为MySQL的很多数据都保存在连接的线程空间里面的,为此我们一般需要定期的断开连接或者经过一个大事务后断开连接,然后在重新连接。但是连接器不可能一直保留一个没有原创 2021-01-20 00:07:27 · 186 阅读 · 0 评论 -
MySQL的锁与锁机制----锁分类
根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁全局锁指的是对整个数据库实例加锁,MySQL提供了FLUSH TABLE WITH READ LOCK,用于给全整个数据库实例加读锁。这个命令执行后,整个实例就变成只读了,增删改的DML语句与建表增加索引等DDL语句都会被堵塞。可以使用UNLOCK TABLES解锁。整个数据库实例都变成自读了,想想就多么可怕,但是在MyISAM时代,由于MyISAM不支持事务当我们需要做全库备份的时候,只能使用这个语句,使得备份期间整个库原创 2021-01-19 19:32:12 · 156 阅读 · 0 评论 -
MySQL读写分离的过期读解决方法
很多业务场景一般是读多写少,但是MySQL的单机处理能力一般有限,为此一般通过水平扩展出多个从机用于提供读服务,以分担写库的压力。但是读写分离后,写库执行完事务后,同步到备机,备机执行完同样的事务,往往有一个时间差,这个时间差叫主备延迟。从而导致客户端去从机读取,读取不到最新的数据,这就是过期读问题。主备延迟监控主备延迟可以通过在备机执行命令SHOW SLAVE STATUS;这个命令的输出中有一个seconds_behind_master字段,这个字段的值就是主备延迟的时间,以秒为单位。它是这原创 2020-11-04 22:50:27 · 434 阅读 · 0 评论 -
关系数据库的范式与反范式设计
范式种类范式主要包括:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)及第五范式(5NF,又叫做完美范式)。数据库的设计范式越高,冗余度就越低,高级别的范式总是包含低级别的范式。数据库设计我们一般至少做到3NF,但是也不是绝对的,有时我们也需要反范式化,引入冗余。基本概念1、超键:一组能够唯一标识元组的属性集。2、候选键:如果超键不包括多余的属性,也能唯一标识元组,那这个超键就是候选键。3、主键:用户可以选择候选键集合中的一个候选键,作为主原创 2020-10-27 22:37:36 · 211 阅读 · 0 评论 -
MySQL的日志与缓存
要搞清楚MySQL的日志与缓存那么首先必须知道语句的执行流程。查询语句的执行流程1、连接阶段:客户端发起数据库的连接请求,首先与MySQL的连接器完成TCP的3次握手,然后客户端发送用户名与密码给到连接器,连接器进行用户名、密码与权限校验,如果校验不通过,返回错误,否则继续。可以看出连接的建立是一个非常耗时的操作,为此我们一般使用长连接,使用长连接一般会使用连接池。但是长连接也会导致MySQL的内存占用高,因为MySQL的很多数据都保存在连接的线程空间里面的,为此我们一般需要定期的断开连接或者经过一个大原创 2020-10-20 23:16:47 · 888 阅读 · 0 评论 -
MySQL InnoDB buffer_pool缓存
InnoDB缓存机制InnoDB缓存的是以页为基本单位的,一页的大小是16KB。其有如下的作用:1、加速读就是当需要访问一个数据页的时候,如果这个页已经在缓存池中,那么就不再需要访问磁盘,直接从缓冲池中就能获取这个页面的内容。2、加速写就是当需要修改一个数据页的时候,先将这个页在缓冲池中进行修改,记下相关的 redo log,这个页的修改就算已经完成了。至于这个被修改的页什么时候真正刷新到磁盘,这个是 buffer pool 后台刷新线程来完成的。由于物理服务器的内存大小是有限的,buffer po原创 2020-10-13 23:22:41 · 347 阅读 · 0 评论 -
MySQL EXPLAIN详解与优化
explain的更多说明见官方文档原创 2020-10-12 23:03:59 · 577 阅读 · 0 评论 -
MySQL的锁与锁机制----InnoDB加锁规则
online-ddl-index-operations《限流–高并发系统中的流量控制》gh-ost方案原创 2020-09-28 23:27:11 · 383 阅读 · 0 评论 -
MySQL的B+树与索引设计优化
B+树结构对于表:create table T(id int primary key, k varchar(64) not null, name varchar(64) not null,index (k))engine=InnoDB default charset=utf8mb4;B+树结构如下图所示:从图中可以看出:1、非叶子节点保存的都是索引值,对于主键索引,叶子节点保存了所有数据;对于二级索引,叶子节点保存的是key与key对应的主键值;2、每个节点包含m个元素,m+1个孩原创 2020-09-25 22:54:32 · 314 阅读 · 0 评论 -
分布式事务及二阶段提交与TCC
什么是分布式事务分布式事务就是在分布式系统中运行的事务,它是由多个本地事务组成的。也需要满足事务的ACID特性。关于ACID见我的博文《事务的ACID特性与隔离性分析》二阶段提交二阶段提交协议(The two-phase commit protocol, 2PC),是用于保证分布式事务的原子性与一致性,其分为投票(vote)与提交(commit)2个阶段。为了实现二阶段提交,需要引入协调者(coordinator,即事务的管理器),来保证事务的原子性与一致性。1、投票(vote)为第一阶段,协调者(原创 2020-09-23 22:19:07 · 1341 阅读 · 0 评论 -
事务的ACID特性与隔离性分析
事务事务指的是逻辑上的一组操作,组成这组操作的各个单元要么全部成功,要么全部失败。而ACID 是数据库管理系统为了保证事务的正确性而提出来的一个理论,ACID 包含四个约束:原子性(atomicity)、一致性(consistency)、隔离性(isolation)与持久性(durability)。原子性(atomicity)一个事务中的所有操作,要么全部完成,要么全部不完成,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。也就是说事务中的原创 2020-09-18 00:09:48 · 692 阅读 · 0 评论 -
池化技术--如何减少不断创建数据库连接的性能损耗
如果每次查询数据库都重新创建一个数据库连接,而创建一个新的数据库连接需要走TCP的三次握手与数据库权限认证,这个耗时可能比查询数据库还要耗时,这样就会严重影响服务的性能。为此我们一般引入数据库连接池,事先创建好数据库的连接,每次需要查询数据库的时候从池子里面获取一个空闲的连接。数据库连接池注意事项1、连接池应该有是有上下界的,当如果有比较多的空闲连接且总的连接数大于连接池连接数的下界,那么可以关闭部分空闲连接,空闲连接数的阈值可以根据场景配置;2、当从连接池里面获取连接时,如果有空闲连接则返回空闲连接原创 2020-09-09 22:56:57 · 320 阅读 · 0 评论