摘要:背景 现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复。redo日志是物理日志,一般采用WAL(Write-Ahead-Logging)机制,所以也称redo日志为wal日志,redo日志记录了所有数据的变更,undo日志是逻辑日志 阅读全文
posted @ 2019-11-10 21:30 天士梦 阅读 (203) 评论 (1) 编辑
摘要:概述 越来越多的企业选择上云,最基础的云服务就是IaaS(Infrastructure as a Service)服务,直观理解就是虚拟主机,用户不用再自建机房,自己购买服务器,而是直接向云厂商购买虚拟主机服务ECS(Elastic Compute Service),按时按量付费。对于数据库而言,将 阅读全文
posted @ 2019-08-18 08:58 天士梦 阅读 (157) 评论 (0) 编辑
摘要:概述 NewSQL日渐火热,无论还是开源的TiDB,CockroachDB还是互联网大厂的Spanner,Oceanbase都号称NewSQL,也就是分布式数据库。NewSQL的典型特征就是,支持SQL,支持事务,高性能,低成本,高可靠,强一致,易扩展,运维友好等。从NewSQL的演进来看,所谓Ne 阅读全文
posted @ 2019-04-14 09:24 天士梦 阅读 (612) 评论 (0) 编辑
摘要:概述 数据库相对于其它存储软件一个核心的特征是它支持事务,所谓事务的ACID就是原子性,一致性,隔离性和持久性。其中原子性,一致性,持久性更多是关注单个事务本身,比如,原子性要求事务中的操作要么都提交,要么都不提交;一致性要求事务的操作必须满足定义的约束,包括触发器,外键约束等;持久性则要求如果事务 阅读全文
posted @ 2019-03-31 19:58 天士梦 阅读 (336) 评论 (0) 编辑
摘要:概述 在单机数据库领域,我们为每个事务都分配一个序列号,比如Oracle的SCN(SystemChangeNumber),MySQL的LSN(LogSequenceNumber),这个序列号可以是逻辑的,也可以是物理的。我们依赖这个序列号对系统中发生的事务进行排序,确保所有事务都有严格的先后关系。数 阅读全文
posted @ 2019-03-25 09:25 天士梦 阅读 (712) 评论 (4) 编辑
摘要:Amazon在SIGMOD 2017发表了论文《Amazon Aurora: DesignConsiderations for High Throughput Cloud-Native Relational Databases》,第一次公开介绍了Aurora的设计理念和内部实现,下文是我对论文的解读 阅读全文
posted @ 2017-09-05 09:22 天士梦 阅读 (5565) 评论 (0) 编辑
摘要:RocksDB作为一个开源的存储引擎支持事务的ACID特性,而要支持ACID中的I(Isolation),并发控制这块是少不了的,本文主要讨论RocksDB的锁机制实现,细节会涉及到源码分析,希望通过本文读者可以深入了解RocksDB并发控制原理。文章主要从以下4方面展开,首先会介绍RocksDB锁 阅读全文
posted @ 2017-07-03 08:54 天士梦 阅读 (3545) 评论 (1) 编辑
摘要:最近一个日常实例在做DDL过程中,直接把数据库给干趴下了,问题还是比较严重的,于是赶紧排查问题,撸了下crash堆栈和alert日志,发现是在去除唯一约束的场景下,MyRocks存在一个严重的bug,于是紧急向官方提了一个bug。其实问题比较隐蔽,因为直接一条DDL语句,数据库是不会挂了,而是在特定 阅读全文
posted @ 2017-04-17 08:43 天士梦 阅读 (1177) 评论 (0) 编辑
摘要:概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁。通过定位排查发现,问题的源头就是index_merge,死锁的原因也很普通,两个事务加锁顺序不同,并存在相互等待的情 阅读全文
posted @ 2017-02-27 09:19 天士梦 阅读 (1409) 评论 (1) 编辑
摘要:背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛。随着SSD逐渐普及,硬件存储成本越来越高,面向写优化的rocksdb引擎逐渐流行起来,我们也是看中了rocksdb引擎在写放大和空间放大的优势,将其引入 阅读全文
posted @ 2016-12-29 08:38 天士梦 阅读 (494) 评论 (0) 编辑
摘要:概述 compaction主要包括两类:将内存中imutable 转储到磁盘上sst的过程称之为flush或者minor compaction;磁盘上的sst文件从低层向高层转储的过程称之为compaction或者是major compaction。对于myrocks来说,compaction过程都 阅读全文
posted @ 2016-10-28 13:28 天士梦 阅读 (4860) 评论 (1) 编辑
摘要:Rocksdb是一个kv引擎,由facebook团队基于levelDB改进而来,Rocksdb采用LSM-tree存储数据,良好的读写特性以及压缩特性使得其非常受欢迎。此外,Rocksdb引擎作为插件已经集成在facebook维护的MySQL分支,用户可以通过SQL来访问rocksDB。本文主要通过 阅读全文
posted @ 2016-10-17 08:08 天士梦 阅读 (3250) 评论 (1) 编辑
摘要:1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。gdb program //最常用的用gdb启动程序,开始调试的方式gdb program core //用gdb查看core dump文件,跟踪程序core的原因g 阅读全文
posted @ 2016-08-06 16:02 天士梦 阅读 (2606) 评论 (1) 编辑
摘要:前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现。有关Raft协议和工程实现可以参考这个链接https://raft.github.io/,里面包含了大量的论文,视屏已经动画演示,非常有助于理解协议。概念与术语leader 阅读全文
posted @ 2016-07-04 08:00 天士梦 阅读 (4965) 评论 (1) 编辑
摘要:Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。在工程实践意义上来说,就是可以通过Paxos实现多副本一致性,分布式锁,名字管理,序列号分配等。比如,在一个分布式数据库系 阅读全文
posted @ 2016-06-27 09:04 天士梦 阅读 (25517) 评论 (1) 编辑
摘要:无论逻辑备份还是物理备份,为了获取一致性位点,都强依赖于FTWRL(Flush Table With Read Lock)。这个锁杀伤力非常大,因为持有锁的这段时间,整个数据库实质上不能对外提供写服务的。此外,由于FTWRL需要关闭表,如有大查询,会导致FTWRL等待,进而导致DML堵塞的时间变长。 阅读全文
posted @ 2016-06-05 08:53 天士梦 阅读 (2779) 评论 (5) 编辑
摘要:上周去参加了2016 DTCC(数据库技术大会),会议总共持续3天,议题非常多,我这里搜集了最新的公开的PPT内容,有兴趣的同学可以下载看看,PPT合集下载链接为:http://pan.baidu.com/s/1i4XDESX。以下内容是我对听的几个议题的一点总结,并欢迎讨论。 《时间序列存储引擎》 阅读全文
posted @ 2016-05-19 11:31 天士梦 阅读 (2616) 评论 (4) 编辑
摘要:备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。这篇文章主要讨论MySQL的 阅读全文
posted @ 2016-05-03 09:13 天士梦 阅读 (6252) 评论 (3) 编辑
摘要:高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法发微博,发微信等。一般而言,衡量高可用做到什么程度可以通过一年内服务不可用时间作为参考,要做到3个9 阅读全文
posted @ 2016-05-02 10:49 天士梦 阅读 (6482) 评论 (0) 编辑
摘要:问题 我们在生产环境中使用SQLite时中发现建表报“table xxx already exists”错误,但DB文件中并没有该表。后面才发现这个是SQLite在实现过程中的一个bug,而这个bug与数据字典的一致性相关,下面这篇文章主要讨论SQLite的缓存机制,以及缓存一致性实现的策略,希望对 阅读全文
posted @ 2016-03-26 11:40 天士梦 阅读 (2174) 评论 (1) 编辑
摘要:背景 现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复。redo日志是物理日志,一般采用WAL(Write-Ahead-Logging)机制,所以也称redo日志为wal日志,redo日志记录了所有数据的变更,undo日志是逻辑日志 阅读全文
posted @ 2019-11-10 21:30 天士梦 阅读 (203) 评论 (1) 编辑
正文内容加载中...
posted @ 2019-09-22 14:00 天士梦 阅读 (131) 评论 (0) 编辑
摘要:并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见。由于go语言的兴起,CSP模型也越来越受关注。基于锁的共享内存模型与后两者的主要区别在于,到底是通过共享内存来通信,还是通过通信来实现访问共享内存。由于actor模型 阅读全文
posted @ 2019-08-18 18:45 天士梦 阅读 (131) 评论 (0) 编辑
摘要:概述 越来越多的企业选择上云,最基础的云服务就是IaaS(Infrastructure as a Service)服务,直观理解就是虚拟主机,用户不用再自建机房,自己购买服务器,而是直接向云厂商购买虚拟主机服务ECS(Elastic Compute Service),按时按量付费。对于数据库而言,将 阅读全文
posted @ 2019-08-18 08:58 天士梦 阅读 (157) 评论 (0) 编辑
摘要:1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发器定义等信息;innodb层也有自己一套元数据,包括表信息,索引信息等,这两套元数据并没有机制保证一 阅读全文
posted @ 2019-07-01 09:34 天士梦 阅读 (168) 评论 (0) 编辑
摘要:概述 MySQL中临时表主要有两类,包括外部临时表和内部临时表。外部临时表是通过语句create temporary table...创建的临时表,临时表只在本会话有效,会话断开后,临时表数据会自动清理。内部临时表主要有两类,一类是information_schema中临时表,另一类是会话执行查询时 阅读全文
posted @ 2019-05-20 07:57 天士梦 阅读 (9210) 评论 (0) 编辑
摘要:概述 NewSQL日渐火热,无论还是开源的TiDB,CockroachDB还是互联网大厂的Spanner,Oceanbase都号称NewSQL,也就是分布式数据库。NewSQL的典型特征就是,支持SQL,支持事务,高性能,低成本,高可靠,强一致,易扩展,运维友好等。从NewSQL的演进来看,所谓Ne 阅读全文
posted @ 2019-04-14 09:24 天士梦 阅读 (612) 评论 (0) 编辑
摘要:概述 数据库相对于其它存储软件一个核心的特征是它支持事务,所谓事务的ACID就是原子性,一致性,隔离性和持久性。其中原子性,一致性,持久性更多是关注单个事务本身,比如,原子性要求事务中的操作要么都提交,要么都不提交;一致性要求事务的操作必须满足定义的约束,包括触发器,外键约束等;持久性则要求如果事务 阅读全文
posted @ 2019-03-31 19:58 天士梦 阅读 (336) 评论 (0) 编辑
摘要:概述 在单机数据库领域,我们为每个事务都分配一个序列号,比如Oracle的SCN(SystemChangeNumber),MySQL的LSN(LogSequenceNumber),这个序列号可以是逻辑的,也可以是物理的。我们依赖这个序列号对系统中发生的事务进行排序,确保所有事务都有严格的先后关系。数 阅读全文
posted @ 2019-03-25 09:25 天士梦 阅读 (712) 评论 (4) 编辑
摘要:Amazon在SIGMOD 2017发表了论文《Amazon Aurora: DesignConsiderations for High Throughput Cloud-Native Relational Databases》,第一次公开介绍了Aurora的设计理念和内部实现,下文是我对论文的解读 阅读全文
posted @ 2017-09-05 09:22 天士梦 阅读 (5565) 评论 (0) 编辑
摘要:RocksDB作为一个开源的存储引擎支持事务的ACID特性,而要支持ACID中的I(Isolation),并发控制这块是少不了的,本文主要讨论RocksDB的锁机制实现,细节会涉及到源码分析,希望通过本文读者可以深入了解RocksDB并发控制原理。文章主要从以下4方面展开,首先会介绍RocksDB锁 阅读全文
posted @ 2017-07-03 08:54 天士梦 阅读 (3545) 评论 (1) 编辑
摘要:最近一个日常实例在做DDL过程中,直接把数据库给干趴下了,问题还是比较严重的,于是赶紧排查问题,撸了下crash堆栈和alert日志,发现是在去除唯一约束的场景下,MyRocks存在一个严重的bug,于是紧急向官方提了一个bug。其实问题比较隐蔽,因为直接一条DDL语句,数据库是不会挂了,而是在特定 阅读全文
posted @ 2017-04-17 08:43 天士梦 阅读 (1177) 评论 (0) 编辑
摘要:1.基本命令git branch 查看本地分支git branch -r 查看远程分支git checkout xxx 切换分支git pull origin master //从远程同步到本地,master或分支名git pull origin xxxgit checkout -b xxx 新建x 阅读全文
posted @ 2017-03-17 16:00 天士梦 阅读 (297) 评论 (0) 编辑
摘要:概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁。通过定位排查发现,问题的源头就是index_merge,死锁的原因也很普通,两个事务加锁顺序不同,并存在相互等待的情 阅读全文
posted @ 2017-02-27 09:19 天士梦 阅读 (1409) 评论 (1) 编辑
摘要:背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛。随着SSD逐渐普及,硬件存储成本越来越高,面向写优化的rocksdb引擎逐渐流行起来,我们也是看中了rocksdb引擎在写放大和空间放大的优势,将其引入 阅读全文
posted @ 2016-12-29 08:38 天士梦 阅读 (494) 评论 (0) 编辑