Quantcast
Channel: 数据库内核月报
Browsing all 689 articles
Browse latest View live

Image may be NSFW.
Clik here to view.

数据库系统 · 事物并发控制 · Two-phase Lock Protocol

背景事务并发控制是关系型数据系统中的重要模块,首先通过几个问题对事务并发控制的背景进行简单介绍。什么是事务?事务是数据库中状态转移的最基本单位,包含一个或多个操作的执行序列。事务有什么特性?事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),...

View Article


MySQL · 源码分析 · BLOB字段UPDATE流程分析

准备MySQL 8.0.25相关背景在游戏等业务场景中,常常会使用到如BLOB格式的可变长大字段,此类可变长大字段的处理与其余字段格式有所不同。...

View Article


MySQL · 源码分析 · 着MySQL 8.0 学 C++:scope_guard

背景简介MySQL source code now permits and uses C++11 features. —- MySQL 8.0.0 (2016-09-12) MySQL now can be compiled using C++14. —- MySQL 8.0.16 (2019-04-25) MySQL now can be compiled using C++17. —-...

View Article

MySQL · 源码分析 · CSV 引擎详解

CSV EngineMySQL中有多种存储引擎,不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,可以获得特定的功能。...

View Article

Image may be NSFW.
Clik here to view.

PolarDB · 引擎特性· 闪回查询让历史随时可见

通过数据库我们我们可以方便的查询当前的数据。但当我们需要查询之前几秒,几个小时甚至几天的数据时,就变的非常复杂。比如需要从某个备份开始经过漫长的redo回放,得到一个对应历史时间的新实例,然后在这个新实例上进行查询。如果需要查询多个不同时间点的数据,那就更复杂了。有没有办法能够让数据库像当前查询一样实时的查询任意时间点的数据呢?PolarDB Flashback...

View Article


Image may be NSFW.
Clik here to view.

MySQL · 周边工具 · MySQL InnoDB inno_space 工具介绍

什么是inno_space?inno_space 是一个可以直接访问InnoDB 内部文件的命令行工具, 可以打印出文件的内部结构.Jeremy Cole 用ruby 写了一个类似的工具, 不过不支持MySQL 8.0, 并且ruby 编译以及改动起来特别麻烦, 所以用cpp 重写了一个. inno_space 做到不依赖任何外部文件, 只需要make, 就可以得到可执行文件,...

View Article

MySQL · 源码阅读· MySQL 如何响应 KILL

MySQL 如何响应 kill我们使用 MySQL 时经常会遇到需要中止一条查询的时候, 本文讨论 kill 命令的效果及其实现。三种不同的 kill 命令从 MySQL 官网上我们可以看到 kill 命令格式如下:KILL [CONNECTION | QUERY] processlist_id 首先说明要做 kill, 然后指定 kill 的级别:CONNECTION, kill 之后...

View Article

PostgreSQL · 引擎特性 · PostgreSQL 14 新特性浅析

性能增强大量连接高并发优化场景: SaaS场景,微服务架构下的中心库场景业务特点:客户端多,在线用户多,数据库并发连接非常多价值: 比连接池网络少1跳, 性能更好, 支持绑定变量等连接池会话模式不支持的全部功能索引增强缓解高频更新负载下的btree索引膨胀 场景: 数据频繁更新,如游戏、交易、共享出行、IoT等行业价值: 减少膨胀, 降低存储和内存使用率, 提高效率支持sort接口,...

View Article


Image may be NSFW.
Clik here to view.

MySQL · 引擎特性· InnoDB之UNDO LOG介绍

本文基于MySQL Community 8.0.23 Versionundo log是InnoDB事务特性的重要组成部分。当对记录做增删改操作就会产生undo记录,undo记录会记录到单独的表空间中。本文将从代码层面对undo log进行一个简单的介绍;主要从下面四个方面来介绍undo log:undo log组织形式与分配与记录,以及undo...

View Article


Image may be NSFW.
Clik here to view.

PolarDB · 引擎特性 · Nonblock add column

Oracle add column的特征1. 同一事务会看到不同的版本的DDSQL_1> select * from test; A ---------- 1 SQL_2> alter table test add b number; Table altered. SQL_1> select * from test; A B ---------- ---------- 1...

View Article

Image may be NSFW.
Clik here to view.

PolarDB · 引擎特性 · B-tree 并发控制优化

InnoDB 索引InnoDB 引擎使用索引组织表,每个表的数据都放在一个对应的索引中,该索引称为聚集索引(clustered index),使用索引组织表的目的是:动态地组织磁盘文件结构,维护数据记录有序;借助索引快速定位记录;除了 clustered index,一个表中的其它索引称为二级索引(secondary indexes)。二级索引的每个 record 除了包含本身的...

View Article

Image may be NSFW.
Clik here to view.

Database · 理论基础 · B+树数据库加锁历史

前言:作为数据库最重要的组成之一,并发控制一直是数据库领域研究的热点和工程实现中的重点和难点。之前已经在文章《浅析数据库并发控制》[4]中介绍了并发控制的概念和实现方式。简单的说,就是要实现:并行执行的事务可以满足某一隔离性级别[5]的正确性要求。要满足正确性要求就一定需要对事务的操作做冲突检测,对有冲突的事务进行延后或者丢弃。根据检测冲突的时机不同可以简单分成三类:在操作甚至是事务开始之前就检测冲...

View Article

Image may be NSFW.
Clik here to view.

MySQL · 引擎特性 · Redo Log record编码格式

引言为保证数据库在意外崩溃或是断电重启之后依然保证一致性和持久性,MySQL InnoDB需要对每个page修改操作在磁盘上记录redo log,以便在崩溃恢复时重新应用内存中丢失的修改,恢复到崩溃前的状态。redo log record的编码方式对数据库的性能是有一定影响的,表现在以下几点:编码方式影响redo...

View Article


Image may be NSFW.
Clik here to view.

SQL Server · 引擎特性 · 从SQL Server看列式存储

1. SQL SERVER Column Index存储进展自2012年以来,SQL Server的Column Index在存储层设计上有了几个大方向上的进展:secondary/primary column index开始支持更新压缩: 归档压缩延迟压缩: 当内存的row group写满后先静置一段时间再压缩,这样压缩时就可以过滤掉那些在静置期间被删除的行,row...

View Article

MySQL · 源码分析 · TABLE信息的生命周期

MySQL通过TABLE对象进行表的读写等操作,对于构建TABLE对象所需的表定义相关信息,MySQL会通过Dictionary_client与DD模块进行交互。DD模块通过多级缓存的结构提供了高效而安全的DD信息访问方式,具体介绍见http://mysql.taobao.org/monthly/2021/08/02/。本文旨在讨论TABLE对象及其用到的DD模块中TableImpl信息的生命周期,...

View Article


MySQL · 最佳实践 · 一次InnoDB死锁Bug排查

背景某天收到一封读者的邮件,询问我一个关于 InnoDB 死锁的问题, 他在 MySQL 5.7 可以复现这个问题, MySQL 8.0.22 却无法复现, 他询问其死锁的原因. 经过一系列的排查,我后来发现是 InnoDB 内部实现的一个 Bug,目前这个 Bug 已经在 8.0.18 版本进行了修复, 所以也可以通过 8.0.17 vs 8.0.18 来验证这个问题.整个 SQL 流程如下:/*...

View Article

Image may be NSFW.
Clik here to view.

DataBase · 存储引擎 · HTAP列存引擎探秘

背景TP查询和AP查询具有截然不同的特点,促使TP数据库和AP数据库采用不同的设计理念。然而,在一些业务中,事务处理的同时往往会伴随一些分析型的查询,传统的解决方案是由TP数据库进行事务处理,通过ETL将数据导出到AP数据库来服务分析型查询,但是这样的解决方案具有同步延时高、架构复杂、运维难度大、成本高的缺点。在这样的背景下,HTAP数据库应运而生,成为了学术界和工业界关注的热点。...

View Article


Image may be NSFW.
Clik here to view.

DataBase · 理论基础 · 热点优化 (SIGMOD'21 Paper 解读)

数据库中的热点指的是一小部分记录会被大量的事务频繁读写,这在并发控制时会造成大量的竞争。 热点记录的更新在现实生活中非常常见,比如在电商场景中,秒杀或限购时,会存在大量事务短时间内频繁更新某一行数据,比如更新库存。 本文接下来会先介绍 SIGMOD 2021 上的一篇优化热点竞争问题的论文,Releasing Locks As Early As You Can: Reducing...

View Article

Image may be NSFW.
Clik here to view.

MySQL · 源码分析 · Row log分析

引言早期的MySQL仅支持copy模式的DDL。在MySQL 5.5中,引入了inplace算法,可以将部分DDL操作交给引擎层进行处理,但是在进行DDL期间,依旧会阻塞DML操作。在5.6中,部分inplace DDL操作可以采用online算法。该算法允许用户在进行DDL操作过程中,并行的执行写入操作。有关上述三种DDL的差异及主要特点,可以参照文末的扩展阅读部分。以add...

View Article

Image may be NSFW.
Clik here to view.

MySQL · 源码阅读 · 数据库的扫描方法

引言关于存储引擎的介绍有很多,基于HEAP的传统存储引擎,以及基于聚簇索引的Innodb引擎等,但优化器如何充分利用存储引擎的特点来实现快速高效的扫描,从而以最小的代价得到用户所需要的结果,是一个非常复杂过程。为了了解优化器是如何运作的,首先我们要了解每一种扫描方式的特点,下面我们以MySQL为例,就一些常见的表扫描方式进行讨论。全表扫描MySQL的full table...

View Article
Browsing all 689 articles
Browse latest View live