AliSQL · 引擎特性 · Recycle Bin
背景MySQL 在生产环境使用过程中,会伴随着开发和运维人员的误操作,比如 DROP TABLE / DATABASE,这类 DDL 语句不具有可操作的回滚特性,而导致数据丢失,AliSQL 8.0 新特性支持回收站功能(Recycle Bin),临时把删除清理的表转移到回收站,并保留可设置的时间,方便用户找回数据。为了方便,提供了 DBMS_RECYCLE package...
View ArticleMySQL · 引擎特性 · 8.0 Innodb redo log record 源码分析
Introductionredo log对于innodb高效实现事务有至关重要的作用,关于redo log的介绍目前已有许多资料,但大都针对MySQL 5.6、MySQL 5.7版本,内容大都聚集在redo log与事务、redo log与恢复、checkpoint技术等特性上,对于redo log record本身却很少有(甚至几乎没有)资料介绍。目前8.0.16版本,redo log...
View ArticleDatabase · 内存管理 · JeMalloc-5.1.0 实现分析
JeMalloc 是一款内存分配器,与其它内存分配器相比,它最大的优势在于多线程情况下的高性能以及内存碎片的减少。这篇文章介绍 JeMalloc-5.1.0版本(release 日期:2018年5月9日)的实现细节。对于对老版本比较熟悉的人来说,有几点需要说明:chunk 这一概念被替换成了 extentdirty page 的 decay(或者说 gc) 变成了两阶段,dirty ->...
View ArticleMSSQL · 最佳实践 · 启用即时文件初始化
问题引入某天,假设您所在公司的生产订单库大库(假设超过1TB)Crash掉了,此时,做为DBA的您,不得不从备份文件中快速将数据库还原出来。但是您发现,这个数据库还原操作初期长达小时时间始化在做数据文件零填充初始操作。于是,您想能否跳过这个数据库文件的初始化操作,快速的还原数据库呢?答案是肯定的,就是我们今天要分享的SQL...
View ArticlePgSQL · 特性分析 · 浅析PostgreSQL 的JIT
背景估计很多同学看过之前的月报PgSQL · 特性分析· JIT 在数据仓库中的应用价值,对JIT(just in time)和LLVM(Low Level Virtual Machine)有了一定的了解。概括地来说:JIT 指的是即时编译,即程序在运行过程中即时进行编译,其中可以把编译的中间代码缓存或者优化。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。LLVM...
View ArticleMySQL · 引擎特性 · ROLLUP 功能用法和实现
在数据库查询语句中,在 GROUP BY 表达式之后加上 WITH ROLLUP 语句,可以在查询结果中包含更多高层级的统计输出。ROLLUP 功能使得可以通过单个查询语句来实现对数据进行不同层级上的分析与统计。因此,ROLLUP 功能能够很好得为 OLAP(Online Analytical Processing) 任务提供支持。在本篇文章中,将会对 ROLLUP...
View ArticleRedis · 最佳实践 · 混合存储实践指南
Redis 混合存储实例是阿里云自主研发的兼容Redis协议和特性的云数据库产品,混合存储实例突破 Redis 数据必须全部存储到内存的限制,使用磁盘存储全量数据,并将热数据缓存到内存,实现访问性能与存储成本的完美平衡。架构及特性命令兼容混合存储兼容绝大多数 Redis 命令,与原生 Redis...
View ArticlePgSQL · 应用案例 · pgbench client_id 变量用途
背景pgbench是 PG内置的一款压测工具,效率非常高。内置tpcb测试模型,并且支持自定义压测模型(内置了非常丰富的变量生成函数,操作符,函数,变量。同时支持shell...
View ArticleMySQL · 引擎特性 · 临时表改进
最新release的MySQL 8.0.16中包含的临时表改动:WL#11974, 不再支持myisam作为内部临时表转储磁盘时使用,参数internal_tmp_disk_storage_engine被移除掉了, 直接使用innodb作为内部内存表的持久化引擎新增参数temptable_use_mmap,...
View ArticleMySQL · 引擎特性 · 初探 Clone Plugin
MySQL8.0.17推出了一个重量级的功能:clone plugin。允许用户可以将当前实例进行本地或者远程的clone。这在某些场景尤其想快速搭建复制备份或者在group replication里加入新成员时非常有用。本文主要试玩下该功能,并试图阐述下其实现的机制是什么。我们以本地clone为例,因为去除网络部分,理解起来会相对简单点。 也不会过度接触代码部分,仅仅做简单的原理性阐述示例本地...
View ArticleMySQL · 引擎特性 · 网络模块优化
本文主要描述下MySQL8.0在网络模块的几个小优化, 由于本人对server层代码不熟悉,所以只是列出自己的理解和相关的patch以及worklog,不做深入详细实现的解释,感兴趣的可自行从连接中找到对应的代码admin Port运维大并发负载数据库的同学经常会碰到的情况是,max_connection被占满,甚至root账户都无法登陆上去,kill掉这些链接来让实例恢复正常。Alibaba...
View ArticleMySQL · 引擎特性 · Multi-Valued Indexes 简述
本文主要简单介绍下8.0.17新引入的功能multi-valued index, 顾名思义,索引上对于同一个Primary key, 可以建立多个二级索引项,实际上已经对array类型的基础功能做了支持 (感觉官方未来一定会推出类似pg的array 列类型),...
View ArticleAliSQL · 引擎特性 · Statement Queue
背景MySQL 的 server 层和引擎层在 statement 并发执行过程中,有很多串行化的点,在 DML 语句中,事务锁冲突比较常见,InnoDB 中事务锁的最细粒度是行级锁,如果语句针对相同行进行并发操作,会导致冲突比较严重,系统吞吐量会随着并发的增加而递减。AliSQL 设计了针对语句的排队机制,相同的行或者不同的语句进行分桶排队,尽可能的把具有相同冲突可能的在一个桶内排队,减少...
View ArticleDatabase · 理论基础 · Palm Tree
这篇文章介绍 B+ 树的无锁并发算法 Palm Tree。论文链接:Parallel Architecture-Friendly Latch-Free Modifications to B+ Trees on Many-Core Processors。为什么会介绍这个算法?之前实现过一个有锁并发的 B+ 树算法,Efficient Locking for Concurrent Operations...
View ArticleAliSQL · 引擎特性 · Returning
背景MySQL 对于 statement 执行结果报文通常分为两类 Resultset 和 OK/ERR,针对 DML 语句则返回OK/ERR 报文,其中包括几个影响记录,扫描记录等属性。但在很多业务场景下,通常 INSERT/UPDATE/DELETE 这样的DML语句后,都会跟随 SELECT 查询当前记录内容,以进行接下来的业务处理, 为了减少一次 Client <-> DB...
View ArticleMongoDB · 最佳实践 · 哈希分片为什么分布不均匀
今天接到一个用户反馈的问题,sharding集群,使用wiredtiger引擎,某个DB下集合全部用的hash分片,show dbs发现其中一个shard里该DB的大小,跟其他的集合差别很大,其他基本在60G左右,而这个shard在200G左右?由于这个DB下有大量的集合及索引,一眼也看不出问题,写了个脚本分析了一下,得到如下结论somedb...
View ArticlePgSQL · 应用案例 · PG有standby的情况下为什么停库可能变慢?
背景PostgreSQL 有3种停库模式:“Smart” mode waits for all active clients to disconnect and any online backup to finish. If the server is in hot standby, recovery and streaming replication will be terminated once...
View Article