MongoDB · 引擎特性 · 大量集合启动加载优化原理

背景 启动数据加载时间对于很多数据库来说是一个不容忽视的因素,启动加载慢直接导致数据库恢复正常服务的RTO时间变长,影响服务可用性。比如Redis,启动时要加载RDB和AOF文件,把所有数据加载到内存中,根据节点内存数据量的不同,加载时间可能达到几十分钟甚至更长。MongoDB在启动时同样需要加载一些元数据,结合阿里云MongoDB云上运维的经验,在集合数量不多时,这个加载时间不会很长,但是对于大量集合场景、特别是MongoDB进程资源受限的情况下(比如虚机、容器、cgrou

Redis · 最佳实践 · 集群配置:Redis Cluster

在数据库领域,当数据量大到一定程度后,我们总是绕不开分布式这个话题。这个问题牵扯很多方面, 分片策略(Sharding):分库分表?水平切片?垂直切片? 数据备份:数据备份什么时候做?粒度是什么?怎样备份? 数据迁移:当数据分布发生拓扑变化的时候,怎么把数据从原来的节点迁移到新的节点上? 集群管理:如何管理整个集群,如何把用户请求定向到某个特定的节点上? 这些问题很很多不同的解法,在不同的使用场景,不同的数据库设计结构下有不同的选择。大体上讲,因为相对简

MySQL · 引擎特性 · Performance_schema 内存分配

概述 Performance Schema(pfs)是对MySQL的细力度的性能监控诊断工具,覆盖statement/io/memory/lock 等各个性能相关的模块。Pfs采集到的性能数据使用 performance_Schema 引擎存储,全部保存在内存。 本文关注 pfs 的内存管理。首先从代码中分析 pfs 内存管理机制,然后以一个监控项为例介绍 pfs 的流程,最后介绍下 pfs 内存相关的参数。本文代码基于 MySQL 8.0.18版本。 Pfs内存管理 核心

MySQL · 引擎特性 · 8.0 Window Functions 剖析

什么是window function window function 是在满足某种条件的记录集合上执行一个特殊的函数。这一句话,记录集合就是窗口,特殊的函数就是在这个窗口上执行的函数。 SELECT function_name OVER ( window_definition ) 1. FROM (...) window_definition : 定义要计算的记录的集合。 function_name : 指定对于集合要使用的函数。 接下来我们通过一个简单的例子看一个窗口函

MySQL · 最佳实践 · X-Engine并行扫描

概述 目前RDS(X-Engine)主打的优势是低成本,高性价比,在MySQL生态下帮助解决用户的成本问题。使用X-Engine的用户一般数据量都较大,比如已经在集团大规模部署的交易历史库,钉钉历史库以及图片空间库等。数据既然存储到了X-Engine,当然也少不了计算需求,因此如何高效执行查询是未来X-Engine一定要解决的问题。目前,在MySQL体系下,每个SQL都至多只能使用一个CPU,由一个线程完成串行扫描行并进行计算。X-Engine引擎需要提供并行扫描能力,这样让

MySQL · 源码分析 · InnoDB读写锁实现分析

1 背景 在InnoDB中,当多线程需要访问共享数据结构时,InnoDB使用互斥锁(mutex)和读写锁(rwlock)来同步这些并发操作。InnoDB的读写锁实现并不是对pthread rwlock的直接封装,而是基于原子操作,自旋锁和条件变量进行实现,大大减少了进入内核态进行同步操作的概率,提高了性能,和在现代多核处理器架构下的可扩展性。 本文分析了InnoDB读写锁的具体实现,所有分析基于MySQL 8.0.18代码。 2 锁模式 InnoDB的读写锁有三种基本

PostgreSQL · 源码分析 · 回放分析(一)

基本原理 在数据库的运行过程中,难免会遇到各种非预期的问题,例如: 硬件错误,例如突然断电、磁盘错误、有人拔了你的内存条 :P 软件问题,例如操作系统崩溃、数据库内部存在bug等等 操作错误,例如误删数据、插入了不符合预期的数据、应用程序异常等等 … … 在这些情况下,我们不希望我们的数据异常甚至丢失,有的情况下我们不能进行修复,例如火灾(这类问题依赖于备份存储介质的方式解决,需要异地容灾),但有的情况下我们可以进行解决,例如断电、崩溃。我们希望当数据

PgSQL · 插件分析 · plProfiler

插件介绍 在进行postgres的服务端编程的时候,常常会发现pg的函数和存储过程是一个黑盒,内部的任何问题都有可能造成性能瓶颈。通常会遇到以下情况: 出现问题的语句,其实执行地非常快,但是调用过次数多导致变慢 随机出现的性能瓶颈问题 生产系统上出现了性能问题(尽管我们不愿意直接上生产系统排查) 以上的出现的性能问题只能采取人肉分析(分析schema、统计信息、SQL语句)、断点(pldebugger)的形式进行排查,排查时间长且不直观、问题时隐时现(甚至