随笔分类 - Mysql
摘要:很简单,和有不是主键的列的格式一样。 实验:在 Mysql 8 中 创建一张主键包含全部列的表 插入 10000 条数据。 因为是字符串做为主键(为了好辨别),所以大小是按照字典序来的 使用工具查看叶子节点结构,下面是部分截图,剩下的部分都是 一样的 level 为0的数据页。 着重看索引叶。也就是
阅读全文
摘要:MMR 解决的不是 join 优化,而是回表优化: mutil-range read , 正如他的名字一样,优化的是离散范围的读,具体是优化在 主键上离散范围的读 如果是从辅助索引读取符合条件的 (索引列的值 + 主键列的值),是需要根据主键列的值去读主键索引的行记录的,但是如果从辅助索引得到的主键
阅读全文
摘要:A left join B , B right join A on A.x = B.y 假设 A 100 行, B 1000 行 A 是驱动表,B是被驱动表 1.被驱动表上有索引的情况:(B.y 上有索引的情况) 不用额外内存 对 A 和 B 都从 硬盘中读,每读 A 一行(从主键索引上拿出 x,然
阅读全文
摘要:Mysql 的主从延迟 指的是 主库受写入 后 到这个写入能体现在 从库上 的这段时间 Mysql 的主从延迟 有两个原因: 1. 写操作 已经在 主库中执行了,但是 binlog 还没有发送出去, 后者还在路上,没有被 从库收到 2. 虽然 binlog 已经被 从库接收到了,但是仍然是以 rel
阅读全文
摘要:要知道,Mysql 的主从使用的是 binlog 那样简单的 日志传输方式,来完成从库对主库的复制,虽然提高了效率,但是主库和从库之间并没有 raft 那样的协议来保证 主从一致。 有时候主库宕机,但是 binlog 还没有发出去,如果直接将从库切换为主库,那么将会主备不一致。 并且从库是单纯告诉主
阅读全文
摘要:在支持 并行复制的 Mysql 版本中,从库中负责执行 relay log 的 线程 sql_thread 被分成 一个 coordination 线程 和 多个 work 线程,具体可以设置 work 线程数量,具体实现应该是使用类似线程池的方式。 每个版本有自己不同的 relay log 分配策
阅读全文
摘要:之前的文章提到过,Mysql 是支持互为主从的,这种结构可以在 某台库宕机后,将客户端的请求转发到 另外一个库 来实现故障迁移的效果。 但是如果直接转移,不等B消费掉 relay log 的话,会发生 数据不一致的现象。 同样举 A,B 两个库。A 充当写库,B充当 从库。 当 A 挂掉的时候,假设
阅读全文
摘要:Mysql 支持互为主从,主库通过binlog 将执行的语句传给从库,具体的执行机构: 主库上的 dump thread,主库上的 binlog 只有在写入到硬盘之后才能通过 dump thread 传出 从库上的 IO thread,接收主库的 dump thread 发过来的 binlog 并且
阅读全文
摘要:总所周知 , innodb 的日志是二阶段提交的,redolog 先在 prepare 阶段写入, binlog 再写入,最后 redolog commit 这其中 redolog 的刷入时机是由 innodb_flush_log_at_trx_commit 参数控制,有提交时不刷如,刷入操作系统缓
阅读全文
摘要:凭着记忆自己画了一下: 总体上看,主要由 内存 + 硬盘 中的内容构成 内存还可分为 innodb 自己的内存 和 操作系统文件系统的缓存 Adaptive hash index:自适应 散列 索引 自适应指的是 :对于辅助索引,如果查询某二级索引的频率到达阈值,会将该二级索引上经常查询的前几列条件
阅读全文
摘要:1.全局锁:(限制 DML , DDL[修改表结构]) 全局读锁: Flush tables with read lock Flush tables 做的是将缓存刷回硬盘,with read lock 给所有表加读锁,对于大部分 lock,当客户端连接断开的时候,锁一般会释放。 如果在主库上使用此命
阅读全文
摘要:在配置文件设置无果后(已改访问权限,non World-wide writable) 直接强制 mysqld 使用其他端口
阅读全文
摘要:先后遇到的问题: 1.插入速度太慢 2.Excel的数据太脏,同一列中混合有许多不同类型的值(日期,整数,浮点数) 3.字符集导致的字段太长问题(Data too long for column Data too long for column) [整了我一天,那一天就算我睡了个饱心情美汁汁,一看到
阅读全文
摘要:先上结论:Innodb在idb文件中存储数据,无论是页还是记录,都是物理无关的,但是记录的物理无关只能在同一页中有效 (文末有解释) 实验1. 每条记录占用32B,包括回滚指针,版本号,记录头等. 页大小 16 KB 插入500条记录,再删除 id 在 1 ~ 49 的50条记录,最后再插入100条
阅读全文
摘要:首先要从Innodb怎么看待磁盘物理空间说起 一块原生的(Raw)物理磁盘,可以把他看成一个字节一个字节单元组成的物理存储介质 如果要在这块原生物理空间中插入一条记录,不能单单只插入数据,还需要插入一些管理记录的信息,这些管理信息被称为记录头,这里假设是5字节(compact类型记录确实记录头占用5
阅读全文