PolarDB ·引擎特性· DDL中MDL锁的优化和演进
摘要 DDL是数据库所有SQL操作中最繁重的一种,本文总结介绍了PolarDB中DDL全链路MDL锁治理的经验和进展,持续优化用户的使用体验,为用户打造最佳的云原生关系型数据库。 1. 概述...
View ArticleMySQL · 源码分析 · 鉴权过程
前言 在整个mysql client connection生命周期中,mysql 鉴权过程位于第一步。当鉴权完成之后,连接进入command phase,可以向server发送command。本文主要介绍鉴权过程,具体指client在进行连接时所提供的user与password是否正确。 本文内容基于 MySQL Community 8.0.33 Version 鉴权过程 mysql...
View ArticlePolarDB·引擎特性·PolarDB IMCI中的行列融合执行
背景 事务处理(OLTP)和分析处理(OLAP)混合的工作负载在当前的业务系统中变得越来越常见。由于实时、易运维等需求,一些业务系统会采用HTAP数据库来代替原有的OLTP-ETL-OLAP架构,所谓的HTAP数据库,可以在一套数据库系统中,同时较为高效地处理TP请求和AP请求。...
View ArticlePolarDB MySQL · 功能特性 · Cube, grouping sets功能介绍与实现
背景 SELECT语句中有一个可选的GROUP BY子句,根据跟在后面的grouping_element,会将所有被选择的行中共享相同分组表达式值的那些行压缩成一个行。如果分组元素中存在GROUPING SETS、ROLLUP或者CUBE,则GROUP BY子句整体上定义了数个独立的分组集。其效果等效于在子查询间构建一个UNION ALL,子查询带有分组集作为他们的GROUP BY子句。...
View ArticleMySQL · 源码解析 · 并发Replace into导致死锁
在之前的文章 #issue 68021 MySQL unique check 问题中, 我们已经介绍了在 MySQL 里面, 由于唯一键的检查(unique check), 导致 MySQL 在 Read Commit 隔离级别也需要添加 GAP lock, 导致有些比较奇怪情况下有一些锁等待. 另外一类问题是由于唯一键检查导致的死锁问题, 这类问题也非常多,...
View ArticleMySQL · 源码解析 · mysql 子查询执行方式介绍
mysql共有如下几种子查询 Item_singlerow_subselect Item_exists_subselect Item_in_subselect Item_allany_subselect 本文在不讨论查询变换的情况下,我们我们将逐一介绍上述子查询原生的执行方式,本文注重归纳总结,理解思想的情况下,看源码简单多了。 标量子查询(Item_singlerow_subselect)...
View ArticleMySQL · 工具使用 · 通过GDB non-stop mode 调试MySQL
通过GDB non-stop mode 调试MySQL, 特别是用于复现死锁场景, 需要按照一定的并发顺序写入才可以构造出来, 通过GDB non-stop mode 可以非常方便进行构造 但是用法是先开启 GDB, 然后在 attach mysql_pid 才可以. 不能启动的时候就 attach 到 mysql pid 可以通过设置set non-stop on, non-stop mode...
View ArticleMySQL·源码分析·索引选择
优化器什么时候执行索引选择? PolarDB 在做完永久的基于规则的转换(包括外连接转换成内连接、嵌套连接消除、合并视图或者派生表、子查询转换等)以及一些逻辑转换(如NOT消除、等值传递、常量计算和条件移除)之后,会选择表的最优访问方式,这时候会判断是否能使用索引加快数据获取。表访问方式主要分为 Table Scan(全表扫描)、Index Look Up (ref访问)方式、Index...
View ArticleInnodb 中的 Btree 实现 (二) · select 篇
本文内容基于 MySQL Community 8.0.13 Version 在 上一篇文章,介绍了 MySQL Innodb 的 Btree 组织、搜索和并发控制的实现,以及 Insert 的路径解析。这篇文章继续来看 MySQL Innodb 如何基于 btree 来读取所需数据。 1. MySQL 的 select 流程 MySQL server 是由两部分组成,如图 1,server...
View ArticleMySQL · 源码分析 · 庖丁解 InnoDB 之 Buffer Pool
Buffer Pool是InnoDB中非常重要的组成部分,也是数据库用户最关心的组件之一。Buffer Pool的基本功能并不复杂,设计实现也比较清晰,但作为一个有几十年历史的工业级数据库产品,不可避免的在代码上融合了越来越多的功能,以及很多细节的优化,从而显得有些臃肿和晦涩。本文希望聚焦在Buffer...
View ArticlePolarDB MySQL - 库表恢复性能优化
背景 用户在使用数据库时,可能会因为误操作导致数据被误修改,或者想要修复某个用户表的数据,PolarDB 提供了多种备份恢复方式,包括实例级别的备份与恢复、库表备份与恢复、表回收站以及Flashback...
View ArticlePolarDB MySQL - InnoDB冷数据表OSS归档
背景 对于某些数据库用户会存在如下类似的案例场景:随着时间或业务的变迁,数据库中部分数据的访问频次下降,成为低频访问的冷数据,比如归档历史相关数据, 但是仍存在(潜在的)在线访问需求。若仍保持原有的存储模式,则无可避免的维持了较高的存储成本;若将数据迁移至另外一套冷系统存储中,则需要额外的迁移代价且需要兼容并维护多套存储系统。...
View ArticleMySQL · 源码分析 · store procedure记录了过多的slow_log的问题详解
背景 最近遇到一个问题,深入把mysql的slow_log又研究了一遍,给大家分享一下。 问题的现象如下: slow log中记录了store procedure中执行的全部SQL store procedure执行时间小于long_query_time,内部执行的SQL也全部被记录到了slow log中 store procedure中create temporary命令记录在slow...
View ArticleMySQL · 工具使用 · MySQL client pager/edit/tee 介绍
我们日常使用的MySQL client 有用的命令使用介绍 pager pager + 任何命令 常用的比如: pager grep ‘Pending normal aio reads’ 就可以执行show engine innodb status 以后只看grep 的内容 mysql> pager grep 'Pending normal aio reads' PAGER set to...
View Article云原生数据库PolarDB MySQL 8.0.2 DDL介绍
引言 众所周知,在MySQL生态下,DDL是一类非常复杂的操作,涵盖了Index变更、Primary Key变更、Column列结构变更、Table表结构变更、Foreign Key操作、Generated...
View ArticlePolarDB Serverless弹性能力探索指南
前言 PolarDB Serverless脱胎于PolarDB团队发表在 SIGMOD 2021的论文 ,是选取其中成熟的技术最终产品化的结果。我们借助两大核心技术,高性能全局一致性SCC和热备无感秒切,无论在跨机扩展还是跨机切换,都达到了业界领先的能力。PolarDB MySQL Serverless于去年底正式上线,获评 信通院事务型数据库Serverless认证最高“先进级”...
View ArticlePolarDB MySQL DBA工具库新增一员猛将Statement Outline
前言 生产环境中,SQL语句的执行计划经常发生改变,导致数据库性能和稳定性出现波动。所以在正文开始前,我们先看几个问题,来了解我们为什么要做这样的工具。 首先,为什么SQL的执行计划会变呢? 原因大致分为以下6种: 数据量的变化:当数据库中的数据量发生改变时,例如增加或删除大量数据,原有的索引可能不再适用,导致执行计划发生变化。...
View ArticleMySQL 中的元数据管理
最近总是会涉及到一些 MySQL 元数据的问题,正好整理一下学习到的 MySQL 中的元数据管理模块,这里主要从数据字典和表定义两块来看,总结一下学习的要点。 本文内容基于 MySQL Community 8.0.13 Version 1. 数据字典 1.1 MySQL 中的元数据 MySQL 的元数据存在很多种类,包括 Schema,Table,Index,View,Tablespace...
View Article聊聊日志即数据库
《数据库故障恢复机制的前世今生》[1]一文中介绍过,由于磁盘的的顺序访问性能远好于随机访问,数据库设计中通常都会采用WAL的方式,将随机访问的数据库请求转换为顺序的日志IO,并通过Buffer Pool尽量的合并并推迟真正的数据修改落盘。如果发生故障,可以通过日志的重放恢复故障发生前未刷盘的修改信息。也就是说Log中包含数据库恢复所需要的全部信息。...
View Article