MySQL · 内核分析 · InnoDB 的统计信息

前言 MySQL 的InnoDB引擎会维护着用户表每个索引的统计信息, 来帮助查询优化器选择最优的执行计划,详细的来说, key的分布情况能决定多表join的顺序, 也能够决定查询使用哪一个索引。这些统计信息可以由专门的后台线程刷新,也可以由用户也可以显示的调用Analyze table的命令来刷新统计信息, 本文基于最新的MySQL 8.0来具体分析一下刷新统计信息的具体实现。 统计信息收集触发以及查看 MySQL有多种方法会触发统计信息的收集,显示的最典型就是Ana

MySQL · 引擎特性 · Latch 持有分析

Introduction mysql中latch没有死锁检测机制,通常指的是server层、innodb层的互斥锁和读写锁。当出现问题后,需要从现场core文件排查,下面介绍如何排查锁被谁持有了 Mutex in Server 除了win之外都采用了glibc中的pthread_mutex_t,如server层中LOCK_status, LOCK_thd_remove等 方法一: (gdb) p LOCK_status $11 = {m_mutex = {__data =

Database · 理论基础 · B link Tree

这篇文章将会介绍一份B+树并发控制协议。 论文链接:Efficient Locking for Concurrent Operations on B-Trees 文章分为2部分,第一部分通过伪代码介绍这份协议,第二部分证明这份协议是正确的。 严格意义上来说这是B link树而不是B+树,具体区别在于B link树每个节点上都会附加一个key和指针。附加的key(如下图左边的红色圆点)值等于同一层下一节点的第一个key(右边红色圆点),附加的指针(红色箭头)指向同一层下一

【CDC TALK】第一期:向平行世界的他们say“Hi”

CDC是腾讯的公司级设计团队,一直致力于用户研究在互联网方面的探索和发展,如设计、体验、产品、运营、市场品牌、投资战略、互联网生态行业、社会产业和研究工具平台等方向。 CDC TALK的举办已持续了三年的时间,每年都会邀请来自CDC设计、用研、品牌、开发等岗位的6位达人,带来CDC在互联网跨界实践中的第一手专业分享,为同行提供满满的学习干货。 本期先带大家走入第一篇: 向平行世界的他们say “Hi” 段懿行|腾讯CDC用户研究中心研究员 在天体物理学中,有一个词叫做平行世

MySQL · 内核分析 · InnoDB mutex 实现分析

InnoDB 中的mutex 和 rw_lock 在早期的版本都是通过系统提供的cas, tas 语义自己进行实现, 并没有使用pthread_mutex_t, pthread_rwlock_t, 这样实现的好处在于便于统计, 以及为了性能考虑, 还有解决早期操作系统的一些限制. 大概是原理是: 在mutex_enter 之后, 在spin 的次数超过 innodb_sync_spin_loops=30 每次最多 innodb_spin_wait_delay=6如果还没

AliSQL · 最佳实践 · Performance Agent

背景 性能数据是云上数据库服务的一个重要组成部分,对于性能数据,当前云厂商的一般做法是:由单独的采集系统进行性能数据的收集和处理,然后通过用户控制台进行性能数据的展示。借助控制台的将性能数据以图表的形式进行展示,比较直观,但是用户很难与自己的监控平台进行集成。特别是对于企业级用户,这些用户在上云之前往往有比较成熟的自建性能监控平台,虽然部分云厂商开始提供OpenAPI等方式对外开放性能数据,但是与自建平台的整合依然有诸多限制。 AliSQL解决方案 基于上述背景,AliSQ

MySQL · 产品特性 · RDS三节点企业版的高可用体系

理解高可用问题 高可用(High Availability)是软件设计中的一个很古老的概念。高可用的问题由来已久,信息系统需要持续为用户提供服务,但是又要面对软硬件不可靠的事实。因此,一个优秀的高可用系统会通过组件的冗余来规避单点故障。当意外发生时,错误检测模块必须能够及时发现故障,并自动切换到备份系统,这个切换时间一般会要求在几秒或者几分钟之内完成。大家经常谈论的SLA、RPO、RTO,都是衡量高可用标准的计算方法,这里就不再赘述。 当前的时代背景,云计算逐渐成为水电煤

PgSQL · 引擎特性 · PostgreSQL 通信协议

我们在使用数据库服务时,通常需要使用客户端连接数据库服务端,以 PostgreSQL 为例,常用的客户端有自带的 psql,JAVA 应用的数据库驱动 JDBC,可视化工具 PgAdmin 等,这些客户端都需要遵守 PostgreSQL 的通信协议才能与之 “交流”。所谓协议,可以理解为一套信息交互规则或者规范,最为我们熟知的莫过于 TCP/IP 协议和 HTTP 协议。 PostgreSQL 在 TCP/IP 协议之上实现了一套基于消息的通信协议,同时,为避免客户端和

MySQL · 引擎特性 · 8.0 Instant Add Column功能解析

概述 DDL(Data Definition Language)是数据库内部的对象进行创建、删除、修改的操作语言,主要包括:加减列、更改列类型、加减索引等类型。数据库的模式(schema)会随着业务的发展不断变化,如果没有高效的DDL功能,每一次变更都有可能影响业务,甚至产生故障。MySQL在8.0以前就已经支持Online DDL,在执行时能够不阻塞其它DML(Insert/Update/Delete)操作,但许多重要的DDL操作,如加列、减列等,仍旧需要等待很长时间(根据