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

Image may be NSFW.
Clik here to view.

POLARDB · 理论基础 · 敢问路在何方 — 论B+树索引的演进方向(上)

前言B+树是上世纪70年代针对硬盘和单核处理器设计的。为了减少机械硬盘的寻道次数,它采用多叉树结构,降低了索引结构的深度,减少了外存访问延迟对性能的影响。因为B+树在单键值和范围查找操作等方面具有良好的性能,所以它作为索引结构的构建模块,在长达四十多年的各类大型系统发展历程中发挥了极其重要的作用。此外,为了提高B+树在多核处理器场景下的并发性能,学术界/工业界进行了长达数十年的研究。在前文《B+树并...

View Article


Image may be NSFW.
Clik here to view.

Database · 原理介绍 · Google Percolator 分布式事务实现原理解读

前言Percolator 是谷歌在2010发表的论文«Large-scale Incremental Processing Using Distributed Transactions and Notifications» 介绍的分布式事务协议。本文是对该协议的解读,忽略了论文中和分布式事务无关的其他部分;侧重于完整的介绍其分布式事务的并发控制协议和 failover...

View Article


Image may be NSFW.
Clik here to view.

Database · 原理介绍 · 关于Paxos 幽灵复现问题

由于郁白之前写的关于Multi-Paxos 的文章流传非常广, 具体地址: http://oceanbase.org.cn/?p=111原文提出了一个叫”幽灵复现” 的问题, 认为这个是一个很诡异的问题, 后续和很多人交流关于一致性协议的时候, 也经常会提起这个问题,...

View Article

MySQL · 引擎特性 · InnoDB MVCC 相关实现

InnoDB支持MVCC来提高系统读写并发性能。InnoDB MVCC的实现基于Undo log,通过回滚段来构建需要的版本记录。通过ReadView来判断哪些版本的数据可见。同时Purge线程是通过ReadView来清理旧版本数据。MVCC的相关知识在过去的月报中已有涉及,这里笔者从部分相关实现的角度做一个学习与分享。代码基于MySQL8.0。之前月报涉及相关知识的有:MySQL · 引擎特性 ·...

View Article

MySQL · RocksDB · 数据的读取(一)

概述简而言之,在RocksDB中的读取需要处理的最核心的一个问题就是如何读取最新的数据,这是由于RocksDB是基于LSM,因此在RocksDB中,对于数据的delete以及update,它并不会立即去执行对应的动作,而只是插入一条新的数据,而数据的最终更新(last-write-win)以及删除是在compact的时候来做的.其实最那就是如何读取到一个数据的最新版本,因此首先我们需要知道在Rock...

View Article


PgSQL · 最佳实践 · EXPLAIN 使用浅析

背景在使用数据库时,经常会有开发者有这样的疑问:“我的表对应字段已经创建了索引,为什么这个SQL 语句执行还是这么慢?” 虽然数据库SQL 执行慢有很多原因,但是对于PostgreSQL DBA 来说,好像有个共识,遇到用户慢SQL优化的问题,先拿EXPLAIN 命令查看下对应的查询计划,从而可以快速定位慢在哪里。这就引出了本文的主角—PostgreSQL 的EXPLAIN 命令。EXPLAIN...

View Article

Image may be NSFW.
Clik here to view.

MSSQL · 最佳实践 · 列加密查询性能问题及解决方案

摘要在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密和使用混合密钥实现SQL Server列加密技术三篇文章。本期月报我们分享列加密技术带来的查询性能问题以及相应的解决方案。问题引入根据SQL Server安全系列专题前三篇的月报分享,我们已经可以非常轻松的实现SQL...

View Article

MySQL · 最佳实践 · 性能问题多维度诊断

背景mysql性能问题是所有业务开发和运维人员的噩梦,有时候会遇到一些疑难杂症,监控系统也无法立即能分析出问题产生的原因,如何更好的定位和分析问题所产生的原因变得尤为重要,以下主要从两个大维度来定位分析,系统层面和进程层面来分析,从正向思维,首先摸清资源的消耗分布,然后才能真正的知道消耗在什么地方,从而推断出问题的产生的原因。通过主机层面进程调用栈分析火焰图火焰图就是看顶层的哪个函数占据的宽度最大。...

View Article


MySQL · 最佳实践 · 8.0 CTE和窗口函数的用法

概述MySql...

View Article


PgSQL · 应用案例 · Heap Only Tuple (降低UPDATE引入的索引写IO放大)

背景PostgreSQL目前默认的存储引擎在更新记录时,会在堆内产生一条新版本,旧版本在不需要使用后VACUUM回收,回收旧版本前,需要先回收所有关联这个版本的所有索引POINT。PG的索引的KEY为索引字段或表达式的值,VALUE为行号。8.3以前,每个TUPLE版本(行号)都有对应的索引POINT,因此更新的放大比较大。8.3开始,引入了HOT的概念,当更新记录时,如果能满足两个条件时,通过HE...

View Article

Image may be NSFW.
Clik here to view.

Database · 原理介绍 · 数据库的事务与复制

前言本文试图讨论这几个问题:MySQL的redo log和binlog为什么要用XAMongoDB的oplog是按照什么顺序复制Raft真的只能串行Apply吗数据库的复制和事务是完全独立的两回事吗?为什么MySQL不早点做一个Raft插件,直接用Raft实现高可用?本文旨在阐述Fault-Tolerant Transaction的几种实现模式。虽然它们乍一看可能都是Raft + KVEngine...

View Article

Image may be NSFW.
Clik here to view.

PgSQL · 引擎特性 · PostgreSQL Hint Bits 简介

前言MVCC (Multiversion Concurrency Control) 是数据库系统中常用的并发控制方式,通过保存数据的多个快照版本,实现 读不阻塞写,写不阻塞读。不同数据库系统实现数据多版本的方式不尽相同,MySQL,Oracle 基于回滚段实现,PostgreSQL...

View Article

Image may be NSFW.
Clik here to view.

MSSQL · 最佳实践 · 行级别安全解决方案

摘要在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术和列加密技术带来的查询性能问题以及相应解决方案四篇文章。本期月报我们分享使用SQL Server RLS(Row Level...

View Article


Image may be NSFW.
Clik here to view.

MySQL · 原理介绍 · 再议MySQL的故障恢复

MySQL的事务处理—两阶段事务提交2PCMySQL数据库的INNODB是一款支持OLTP的存储引擎,为支持MySQL的高可用,支持跨机搭建高可用数据库集群,MySQL采用了一种简单有效的机制-基于binlog的复制,binlog是binary...

View Article

Image may be NSFW.
Clik here to view.

POLARDB · 引擎特性 · 物理复制解读

日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性、稳定性和性能都非常重要。...

View Article


Image may be NSFW.
Clik here to view.

Redis · 原理介绍 · 利用管道优化aofrewrite

前言redis的aof持久化本质上是一个redo...

View Article

Image may be NSFW.
Clik here to view.

PgSQL · 原理介绍 · PostgreSQL行锁实现

锁是数据库很重要的机制,PostgreSQL支持表锁,行锁,了解PostgreSQL行锁机制有助于我们在应用中分析和解决行锁的问题。锁模式当前PG支持4种行锁模式: FOR KEY SHARE, FOR SHARE, FOR NO KEY UPDATE, FOR UPDATE,我们常见的delete场景获取的均为FOR UPDATE锁,而update场景会获取FOR NO KEY...

View Article


MySQL · RocksDB · 数据的读取(二)

概述上一篇文章中我们介绍了在RocksDB中如何在内存中查找对应的数据,这一篇我们将会详细介绍当内存中的数据不存在时,RocksDB如何在磁盘上查找对应的数据.源码分析依旧是从DBImpl::GetImpl开始,上一篇文章中我们分析这个函数只分析了Memtable相关的代码,这次我们来看当memtable没有查找到之后,RocksDB是如何处理的.我们可以看到当MemTable中没有找到对应的数据之...

View Article

PgSQL · 应用案例 · PG 11 并行计算算法,参数,强制并行度设置

背景PostgreSQL 并行计算原理、应用参考:《PostgreSQL 多场景 沙箱实验》优化器并行计算的并行度计算方法1、总worker进程数postgres=# show ; max_worker_processes ---------------------- 128 (1 row)...

View Article

PgSQL · 应用案例 · PostgreSQL IoT,车联网 - 实时轨迹、行程实践

背景车联网场景,一个行程由若干个点组成,业务需要按行程查询,按。但是问题来了:一个行程包含多个点,那么一次查询意味着需要查询并返回多个点(多条记录)。由于有多个设备(例如汽车),大概率可能同时活跃,同时上传点,因此以堆表存储的话,一个行程中的多条记录,实际上在数据库的表里面,存储在多个BLOCK里面。如上分析,性能问题:IO放大。如何优化?1、行程记录,按行聚集存储。类似cluster操作。2、行程...

View Article
Browsing all 692 articles
Browse latest View live