爱奔跑的程序猿

keep running, just do it!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 阅读排行

  • 最新回复

  • 搜索

DDL-fast-fail

发表于 2021-09-03 | 分类于 数据库内核 , MySQL , 限制改进 | 评论: | 阅读次数:
AI摘要
GPT

背景

项目的快速迭代开发和在线业务需要保持持续可用的要求,导致MySQL的ddl变成了DBA很头疼的事情,而且经常导致故障发生。本篇介绍RDS分支上做的一个功能改进,DDL fast fail。主要解决:DDL操作因为无法获取MDL排它锁,进入等待队列的时候,阻塞了应用所有的读写请求问题。

阅读全文 »

Binary Log Group Commit with TokuDB

发表于 2021-09-02 | 分类于 数据库内核 , TokuDB , 分支特性 | 评论: | 阅读次数:
AI摘要
GPT

MySQL在开启Binary Log的情况下,使用2PC(图1)来保证事务(XA)完整性的,每次提交事务需要做:

阅读全文 »

GTID启动优化

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 限制改进 | 评论: | 阅读次数:
AI摘要
GPT

背景

GTID 可以说是 MySQL 5.6 版本的一个杀手级特性,它给主备复制带来了极大的便利,RDS只读实例就是强依赖于这个特性。然而GTID在给我们带来便利的同时,也埋下了许多坑,最近几期内核月报中GTID的频繁出现也说明了这一点,对其我们可以说是既爱又恨。

阅读全文 »

Bulk Load for CREATE INDEX

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 限制改进 | 评论: | 阅读次数:
AI摘要
GPT

背景

MySQL5.6以后的版本提供了多种优化手段用于create index,比如online方式,Bulk Load方式。

Online提供了非阻塞写入的方式创建索引,为运维提供了很大的便利。 Bulk Load提升了索引创建的效率,减少了阻塞的时间。 这篇介绍下MySQL 5.7.5 Bulk Load的细节,并从查找,排序,redo,undo,page split等维度比较一下传统方式和Bulk Load方式。

阅读全文 »

binlog event有序性

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 答疑释惑 | 评论: | 阅读次数:
AI摘要
GPT

背景

对于解析MySQL的binlog用来更新其他数据存储的应用来说,binlog的顺序标识是很重要的。比如根据时间戳得到binlog位点作为解析起点。

但是binlog里面的事件,是否有稳定的有序性?

binlog中有三个看上去可能有序的信息:xid、timestamp、gno。本文分析这三个信息在binlog中的有序性。

阅读全文 »

5.7 Innodb事务系统

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 限制改进 | 评论: | 阅读次数:
AI摘要
GPT

背景知识

为了便于理解下文,我们先简单梳理下Innodb中的事务、视图、多版本的相关背景知识。

在Innodb中,每次开启一个事务时,都会为该session分配一个事务对象。而为了对全局所有的事务进行控制和协调,有一个全局对象trx_sys,对trx_sys相关成员的操作需要trx_sys->mutex锁。

Innodb使用一种称做ReadView(视图)的对象来判断事务的可见性(也就是ACID中的隔离性)。根据可见性原则,某个新开启的事务不应该看到其他未提交的事务。 Innodb在执行一个SELECT或者显式开启START TRANSACTION WITH CONSISTENT SNAPSHOT (后者只应用于REPEATABLE-READ隔离级别) 会创建一个视图对象。对于RR隔离级别,视图的生命周期到事务提交结束,对于RC隔离级别,则每条查询开始时重分配事务。

阅读全文 »

thread pool原理分析

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 限制改进 | 评论: | 阅读次数:
AI摘要
GPT

大连接问题

现有mysql 处理客户端连接的方式会触发mysql 新建一个线程来处理新的连接,新建的线程会处理该连接所发送的所有 SQL 请求,即 one-thread-per-connection 的方式,其创建连接的堆栈为:

阅读全文 »

Opened tables block read only

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 捉虫动态 | 评论: | 阅读次数:
AI摘要
GPT

背景

MySQL通过read_only参数来设置DB只读,这样MySQL实例就可以作为slave角色,只应用binlog,不接受用户修改数据。这样就可以保护master-slave结构中的数据一致性,防止双写风险。

阅读全文 »

server_id为0的Rotate

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 答疑释惑 | 评论: | 阅读次数:
AI摘要
GPT

背景

  在MySQL的M-S结构里面,event是binlog日志的基本单位。每个event来源于主库,每个Event都包含了serverid,用于表示该event是哪个实例生成的。

  在5.6里面,细心的同学会发现,备库的relaylog中出现了server_id为0的event,其类型为Rotate Event。

  这里说说server_id=0的Rotate Event。

阅读全文 »

并行复制外建约束问题

发表于 2021-09-02 | 分类于 数据库内核 , MySQL , 限制改进 | 评论: | 阅读次数:
AI摘要
GPT

背景

mysql 主备同步是通过binlog来进行的,备库的 IO 线程从主库拉取binlog,SQL线程将拉取的binlog应用到备库,在5.6之前,备库只有一个线程应用binlog,主库的更新量大,且备库的执行效率低时,就会造成了大量从主库拉取的binlog来不及执行,因此造成了主备延迟问题。为了解决主备延迟,需要提高备库的执行效率,阿里MySQL 设计并开发了并行复制功能,所谓并行复制,指的是应用binlog的线程数量是多个的,而不是原生的单个线程,经过测试可以极大的提高复制性能(有3X的性能提升),在并行复制中,一个 IO 线程,一个分发线程,多个sql_thread,分发线程读取relay log,并将读取的relay log 分发给多个sql_thread, 从而实现并行化的效果。

阅读全文 »
1…101112…25
tianwei

tianwei

长路漫漫,上下求索

243 日志
57 分类
34 标签
GitHub E-Mail weibo
友情链接
  • 乘以零
  • 小逗嘛嘛
  • HY
  • 芷在安宁
  • kai
© 2024 tianwei 鄂ICP备2021009863号-1
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Pisces v6.6.0
位访客 人阅读