![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL基础知识
文章平均质量分 94
MySQL基础知识!
数据库内核
这个作者很懒,什么都没留下…
展开
-
存储管理(三):分区表
表对应磁盘文件:我在表t中初始化插入了两行记录, 按照定义的分区规则, 这两行记录分别落在p_2018和p_2019这两个分区上。从图中可以看到,这个表包含了一个.frm文件和4个.ibd文件,每个分区对应一个.ibd文件。对于引擎层来说, 这是4个表。对于Server层来说, 这是1个表。注:分区表是由server层定义的,而非引擎层。原创 2024-06-28 18:35:51 · 744 阅读 · 0 评论 -
MySQL主从复制(六):数据库是否可用
所以, 我们说InnoDB在设计时, 遇到进程进入锁等待的情况时, 将并发线程的计数减1的设计, 是合理而且是必要的。因此上述select 1示例中,同时在执行的语句超过了设置的innodb_thread_concurrency的值, 这时候系统其实已经不行了, 但是通过select 1来检测系统, 会认为系统还是正常的。注:虽然说等锁的线程不算在并发线程计数里, 但如果它在真正地执行查询, 就比如我们上面例子中前三个事务中的select sleep(100) from t, 还是要算进并发线程的计数的。原创 2024-06-13 13:57:25 · 1098 阅读 · 0 评论 -
MySQL基础知识:MySQL索引
索引的意义:在大量数据中,加速访问少量特定数据;使用索引的前提条件:1)索引块数量小于数据块数量;2)索引键有序,故可以使用二分查找等高效的查找方式;(提升查找效率)3)索引文件足够小,能够长期存放在内存缓冲区中;(减少磁盘IO)注:当查询数据量超过一定比例时,全表扫描可能比走索引更高效。原创 2024-04-26 20:12:16 · 962 阅读 · 0 评论 -
MySQL日志(一):更新语句执行流程
一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块, 最后到达存储引擎。那么, 一条更新语句的执行流程又是怎样的呢?下面我们从一个表的一条更新语句进行具体介绍:首先, 可以确定的说, 查询语句的那一套流程, 更新语句也是同样会走一遍。更新语句的执行流程:1)连接器连接数据库;2)分析器通过词法分析和语法分析直到这是一条更新语句;3)优化器决定1使用ID这个索引;4)执行器负责具体执行,找到这一行,然后更新。原创 2024-04-13 17:05:41 · 1059 阅读 · 0 评论 -
MySQL主从复制(一):主备一致
这条命令不是我们主动执行的, 而是MySQL根据当前要操作的表所在的数据库,自行添加的。2)另一种场景是, 有三个节点的时候, 如图所示, trx1是在节点 B执行的, 因此binlog上的server_id就是B, binlog传给节点 A, 然后A和A’搭建了双M结构, 就会出现循环复制。你可以看到, 当binlog_format使用row格式的时候, binlog里面记录了真实删除行的主键id, 这样binlog传到备库去的时候, 就肯定会删除id=4的行, 不会有主备删除不同行的问题。原创 2024-05-24 19:57:02 · 758 阅读 · 0 评论 -
MySQL存储管理(一):删数据
表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。默认情况下,InnoDB存储引擎有一个共享表空间idbdata1,即所有数据都存放在这个表空间内。如果用户启用了参数 innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。原创 2024-06-21 18:44:34 · 1042 阅读 · 0 评论 -
MySQL基础知识:MySQL事务
在视图A、B、C里面,这一个记录的值分别是1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC);当数据库上有多个事务同时执行的时候, 就可能出现脏读(dirtyread) 、 不可重复读(non-repeatable read) 、 幻读( phantom read) 的问题, 为了解决这些问题, 就有了“隔离级别”的概念。1)每行数据有多个版本,按照事务ID倒序排列,每次事务更新数据时,会生成一个新的数据版本,并在版本中记录事务ID,即row trx_id;原创 2024-04-13 19:34:24 · 1444 阅读 · 1 评论 -
MySQL主从复制(三):主从延迟
主备流程图:谈到主备的复制能力,要关注的是上图中的两个黑色箭头。一个箭头代表了客户端写入主库,另一个箭头代表的是sql_thread执行中转日志(relay log)。如果用箭头的粗细来代表并行度的话,那么真实情况就如图所示,第一个箭头要明显粗于第二个箭头。1)在主库上,影响并发度的原因就是各种锁了。由于InnoDB引擎支持行锁, 除了所有并发事务都在更新同一行(热点行) 这种极端场景外, 它对业务并发度的支持还是很友好的。原创 2024-05-24 20:06:51 · 1059 阅读 · 0 评论 -
MySQL主从复制(二):高可用
正常情况下, 只要主库执行更新生成的所有binlog, 都可以传到备库并被正确地执行, 备库就能达到跟主库一致的状态, 这就是最终一致性。但是, MySQL要提供高可用能力, 只有最终一致性是不够的。原创 2024-05-24 20:01:37 · 753 阅读 · 0 评论 -
MySQL主从复制(四):主备切换
一主多从结果:图中, 虚线箭头表示的是主备关系, 也就是A和A’互为主备, 从库B、 C、 D指向的是主库A。一主多从的设置, 一般用于读写分离, 主库负责所有的写入和一部分读, 其他的读请求则由从库分担。主备切换后结果:相比于一主一备的切换流程, 一主多从结构在切换完成后, A’会成为新的主库, 从库B、 C、 D也要改接到A’。正是由于多了从库B、 C、 D重新指向的这个过程, 所以主备切换的复杂性也相应增加了。原创 2024-05-24 20:17:19 · 1100 阅读 · 0 评论 -
MySQL日志(三):数据安全
回答这个问题前,先看一下磁盘、SSD、内存随机读写与顺序读写的性能对比,如下图所示:从上图可以看出两点:1)内存的读写速度比磁盘随机读写高出几个数量级。2)磁盘顺序读写速度堪比内存读写速度。问1:什么是WAL呢?WAL即 Write Ahead Log,WAL的核心思想是,每次更新操作都先写入日志,只做了写日志这一个磁盘操作。这个日志叫做redo log(重做日志),也就是《孔乙己》记账的粉板,在更新完内存写完redo log后,就返回给客户端,本次更新成功。原创 2024-06-14 19:37:26 · 870 阅读 · 0 评论 -
MySQL主从复制(五):读写分离
一主多从架构主要应用场景:读写分离。读写分离的主要目标是分摊主库的压力。原创 2024-05-24 20:24:28 · 1310 阅读 · 0 评论 -
MySQL日志(二):MySQL抖动
一条SQL语句, 正常执行的时候特别快, 但是有时也不知道怎么回事, 它就会变得特别慢, 并且这样的场景很难复现, 它不只随机, 而且持续时间还很短。看上去, 这就像是数据库“抖”了一下。今天, 我们就一起来看一看这是什么原因。原创 2024-06-14 19:30:55 · 859 阅读 · 0 评论 -
MySQL基础知识:MySQL架构
看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样, 对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。我们看到的只是输入一条语句, 返回一个结果, 却不知道这条语句在MySQL内部的执行过程。原创 2024-04-13 16:54:42 · 742 阅读 · 0 评论