数据库
文章平均质量分 95
肆月拾忆.Allen
这个作者很懒,什么都没留下…
展开
-
Mysql实战45讲(十五)日志相关问题
Mysql实战45讲(十五):日志相关问题我在第2篇文章《日志系统:一条SQL更新语句是如何执行的?》中,和你讲到binlog(归档日志)和redo log(重做日志)配合崩溃恢复的时候,用的是反证法,说明了如果没有两阶段提交,会导致MySQL出现主备数据不一致等问题。在这篇文章下面,很多同学在问,在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的?现在,我们就从这个问题开始吧。我再放一次两阶段提交的图,方便你学习下面的内容。图1 两阶段提交示意图这里,我要先和你解释一原创 2021-12-06 14:59:41 · 151 阅读 · 0 评论 -
Mysql实战45讲(十四):count()执行的速度
Mysql实战45讲(十四):count(*)执行的速度在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t 语句不就解决了吗?但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。那么今天,我们就来聊聊count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现。然后,我会再和你说说,如果应原创 2021-12-05 13:09:29 · 647 阅读 · 0 评论 -
Mysql实战45讲(十三):为什么表数据删除一半,表空间大小不变?
Mysql实战45讲(十三):为什么表数据删除一半,表空间大小不变?聊聊数据库表的空间回收,看看如何解决这个问题。这里,我们还是针对MySQL中应用最广泛的InnoDB引擎展开讨论。一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们今天主要讨论的是表数据。接下来,我会先和你说明为什么简单地删除表数据达不到表空间回收的效果,然后再原创 2021-12-05 12:12:58 · 228 阅读 · 0 评论 -
MySql实战45讲(十二):MySQL的抖动问题
MySql实战45讲(十二):MySQL的抖动问题平时的工作中,不知道你有没有遇到过这样的场景,一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。你的SQL语句为什么变“慢”了在前面第2篇文章《日志系统:一条SQL更新语句是如何执行的?》中,我为你介绍了WAL机制。现在你知道了,InnoDB在处理更新语句的时候,只做了写日志这一个磁盘操作。原创 2021-12-05 11:01:21 · 280 阅读 · 0 评论