MySQL内存分配与管理(1)
MySQL的内存分配、使用、管理的模块较多,本篇文章主要针对InnoDB的内存管理、SQL层内存分配管理器MEM_ROOT和8028内存限制的新特性进行分析,同时对现阶段存在的部分问题和优化方案进行简单的描述。代码版本主要基于8025,第四部分内存限制新特性基于8028。 一、InnoDB基础内存申请 1.1 ut_allocator...
View ArticlePolarDB MySQL 新特性 - Partial Result Cache
背景 查询缓存(Query Cache)是数据库执行层的一个加速查询的特性,用来缓存一条查询语句的结果集,如果后续再有相同的查询,直接从结果集缓存中读取结果,而不用再重新执行而极大提升查询性能。 官方MySQL在4.0版本就引入了Query Cache,但由于设计缺陷,在最新8.0版本移除了该功能。针对MySQL原生Query Cache的不足,PolarDB进行重新设计和全新实现,推出了Fast...
View ArticleMySQL Temporal Data Types
前言 日常工作中,我们会经常遇到日期和时间这类数据,MySQL有对应的数据类型来存储,分别是DATE,TIME,DATETIME,TIMESTAMP和YEAR,这些数据类型统称为temporal数据类型。 MySQL在文档 https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html...
View ArticleInnodb 中的 Btree 实现 (一) · 引言 & insert 篇
本文内容基于 MySQL Community 8.0.13 Version 1 背景 Btree 自 1970 年 Bayer 教授提出后,一直是关系型数据库中核心数据结构,基于多路的分叉树,将数据范围自上而下不断缩小,直到需要的记录,通常在数据库中一个 Btree 结点能展开几百上千个分叉,数据的搜索范围呈指数级下降,极大地减少了数据访存次数,提升搜索效率。对于 B-tree...
View ArticleMySQL · 业务场景 · 业务并发扣款,金额未扣
业务背景 账务系统的业务中从用户账号扣款,如果发现用户账户余额充足情况下,100次扣款数据库都返回成功,但其中有20次没有真实扣款,那业务方一定会震惊。但如果业务设计不合理,数据库中是会存在这种现象的。 数据库场景 在MySQL中看下面一个场景。 业务中存在一张用户账户表,存有用户的账户金额。业务表做了如下设计。业务中使用RC隔离级别。 CREATE TABLE `user_account` (...
View ArticlePolarDB MySQL · 功能特性 · Fast Query Cache技术详解与最佳实践
PolarDB MySQL在2020年推出了Fast Query Cache(查询结果缓存),且在PolarDB MySQL各个大版本(5.6 5.7 8.0)中均已支持。Fast Query...
View ArticlePolarDB MySQL · 功能特性 · 大表分页查询优化
在社区MySQL中,业务如果对大表做深度分页查询往往性能很差,查询的响应时间很难满足业务的需求。PolarDB MySQL对深度分页场景优化,可以极大提升分页查询性能。 社区MySQL深度分页 我们基于TPCH(Scale 10)的表举例,比如业务对订单明细表(lineitem表)按照特定发货日期(l_shipDATE列)范围查询订单明细信息。 如果100行每页,我们查询1万页以后的查询如下:...
View ArticlePolarDB MySQL · 功能特性 · SQL Trace
PolarDB MySQL最新引入了查询的执行计划和性能的监控工具SQL Trace。 在数据库使用过程中,面对负载的持续高位,我们可能会需要查看消耗负载比较大的TopSQL。当一条查询语句的性能突然下降,我们可能需要排查语句的执行计划是否变化,语句执行时扫描行数、物理IO读是否明显变化。现在基于PolarDB MySQL SQL...
View ArticlePolarDB for MySQL 优化器查询变换系列 - IN-List 变换
引言 PolarDB mysql作为一款HTAP数据库,在复杂sql查询能力上有许多深入的优化工作,可以大大加速了查询的时延。具体优化工作比如并行能力,查询变换能力,优化器join order额外支持hash join&bush...
View ArticlePolarDB IMCI 的 TopK 查询执行优化
背景 业务系统中普遍存在这样一种场景:根据给定条件筛选一批记录,这些记录按用户指定的条件排序,以分页的方式展示。例如,筛选出某个商家在售的商品,按商品销量排序,以分页的方式展示。 上述场景,反映在数据库上,往往以ORDER BY column LIMIT n, m这样的TopK查询实现。例如,假设业务系统中每页展示100条记录,可以通过ORDER BY column LIMIT 0,...
View Article库表变更、加锁没审计?PolarDB MySQL 新功能 SQL Detail
PolarDB MySQL最新引入了库表变更、加锁操作的详细审计功能SQL Detail。 背景...
View ArticleMySQL Binlog 源码入门
MySQL主从节点之间同步数据,备份点还原,会用到binary log,其负责记录数据更改的操作。因为Binlog在运用到数据页之前需要经过复杂的过程,没有redolog直接,所以性能比不上直接使用redo复制的方式(物理复制的优势),但是它也有不可或缺的作用。本文重点介绍MySQL Binlog的作用、记录的内容、组织结构、写入方式、主备复制等内容,基于MySQL...
View ArticlePolarDB MySQL · 功能特性 · 大表扫描优化
背景 社区MySQL从5.1开始引入了插件式引擎体系结构,该结构MySQL的引擎非常便于扩展,使用户可以选择合适的存储引擎。但同时MySQL SQL层和引擎层的紧密融合的优化相对现代数据库则少很多,对于用户需要处理越来越多数据的场景需求,相关的优化缺失导致很多场景下性能成为瓶颈。为了能够加速用户查询,充分融合SQL层和引擎层的特性,PolarDB...
View ArticlePolarDB MySQL的INTERVAL分区如何让DBA解放双手
作为大表的优化方案之一,分区表功能现在越来越受欢迎。PolarDB MySQL的分区表完全兼容MySQL官方的语法和功能,同时,PolarDB在功能和性能上做了很多的优化和增强(详情请参见PolarDB MySQL分区表概述)。 INTERVAL分区是什么...
View ArticleLong-lived Transactions 产生的影响
背景 MVCC已经成为现代数据库解决高并发访问的关键技术;MVCC为用户提供了快读读取数据,同时也允许对冲突数据并发写入;其基原理是每次更新记录时创建一个新版本,而不是直接去覆盖旧版本。这样可以确保每个事务都只能访问到自己可以访问到的数据,这样就保持了其读取的数据始终是一致的。如果记录的版本数据不再被所有活跃的事务所需要,就可以将其清理掉,这样就可以保证数据库的容量在一个合理的范围之内。...
View ArticlePolarDB auto_inc 场景性能优化之路
在数据库的使用场景中, 最常见的场景是并发插入或者导入数据场景, 在该场景中并不指定自增id, 由数据库自动生成自增id, 然后插入到数据库中, 因此我们也叫auto_inc 场景的数据插入. 典型的业务场景如: 游戏行业开服过程中的大批的登录注册场景, 电商活动中给商家后台推单场景等等. 我们看看PolarDB 是如何优化针对这种并发插入场景进行优化的. 背景知识: 在这种并发插入场景中,...
View ArticlePolarDB MySQL · 持续补强的全局二级索引
继我们去年年底发布内核原生的全局二级索引(用户文档)以来,陆续有客户过来咨询和使用。目前已经有客户在生产实例上大规模使用全局二级索引(Global Secondary Index,下文用GSI代替),大大优化了分区表场景下不含分区键的Query/DML性能以及支持不含分区键的Unique...
View ArticlePolarDB for MySQL 优化器查询变换系列 - 条件下推
背景 条件下推是数据库优化器查询变换中的一个重要规则,目的在于将上层查询的条件尽可能多的下推到下层,使得查询任务在尽可能早的阶段对数据进行过滤,从而减少后续查询计算的代价,大幅提升查询性能。 条件下推到derived table 基于以上目的,MySQL 8.0.22及之后的版本支持将条件下推到派生表(derived...
View Article