由一个bug引发的SQLite缓存一致性探索
置顶随笔
[置顶]RocksDB上锁机制
摘要: RocksDB作为一个开源的存储引擎支持事务的ACID特性,而要支持ACID中的I(Isolation),并发控制这块是少不了的,本文主要讨论RocksDB的锁机制实现,细节会涉及到源码分析,希望通过本文读者可以深入了解RocksDB并发控制原理。文章主要从以下4方面展开,首先会介绍RocksDB锁阅读全文
posted @ 2017-07-03 08:54 天士梦 阅读(114) 评论(1) 编辑
[置顶]MyRocks DDL原理
摘要: 最近一个日常实例在做DDL过程中,直接把数据库给干趴下了,问题还是比较严重的,于是赶紧排查问题,撸了下crash堆栈和alert日志,发现是在去除唯一约束的场景下,MyRocks存在一个严重的bug,于是紧急向官方提了一个bug。其实问题比较隐蔽,因为直接一条DDL语句,数据库是不会挂了,而是在特定阅读全文
posted @ 2017-04-17 08:43 天士梦 阅读(266) 评论(0) 编辑
[置顶]index_merge引发的死锁排查
摘要: 概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁。通过定位排查发现,问题的源头就是index_merge,死锁的原因也很普通,两个事务加锁顺序不同,并存在相互等待的情阅读全文
posted @ 2017-02-27 09:19 天士梦 阅读(324) 评论(0) 编辑
[置顶]myrocks复制中断问题排查
摘要: 背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛。随着SSD逐渐普及,硬件存储成本越来越高,面向写优化的rocksdb引擎逐渐流行起来,我们也是看中了rocksdb引擎在写放大和空间放大的优势,将其引入阅读全文
posted @ 2016-12-29 08:38 天士梦 阅读(156) 评论(0) 编辑
[置顶]Rocksdb Compaction原理
摘要: 概述 compaction主要包括两类:将内存中imutable 转储到磁盘上sst的过程称之为flush或者minor compaction;磁盘上的sst文件从低层向高层转储的过程称之为compaction或者是major compaction。对于myrocks来说,compaction过程都阅读全文
posted @ 2016-10-28 13:28 天士梦 阅读(470) 评论(1) 编辑
[置顶]Rocksdb引擎记录格式
摘要: Rocksdb是一个kv引擎,由facebook团队基于levelDB改进而来,Rocksdb采用LSM-tree存储数据,良好的读写特性以及压缩特性使得其非常受欢迎。此外,Rocksdb引擎作为插件已经集成在facebook维护的MySQL分支,用户可以通过SQL来访问rocksDB。本文主要通过阅读全文
posted @ 2016-10-17 08:08 天士梦 阅读(619) 评论(0) 编辑
[置顶]GDB调试命令小结
摘要: 1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。gdb program //最常用的用gdb启动程序,开始调试的方式gdb program core //用gdb查看core dump文件,跟踪程序core的原因g阅读全文
posted @ 2016-08-06 16:02 天士梦 阅读(343) 评论(1) 编辑
[置顶]分布式一致性算法--Raft
摘要: 前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现。有关Raft协议和工程实现可以参考这个链接https://raft.github.io/,里面包含了大量的论文,视屏已经动画演示,非常有助于理解协议。概念与术语leader阅读全文
posted @ 2016-07-04 08:00 天士梦 阅读(1287) 评论(1) 编辑
[置顶]分布式一致性算法--Paxos
摘要: Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。在工程实践意义上来说,就是可以通过Paxos实现多副本一致性,分布式锁,名字管理,序列号分配等。比如,在一个分布式数据库系阅读全文
posted @ 2016-06-27 09:04 天士梦 阅读(7845) 评论(1) 编辑
[置顶]MySQL备份锁
摘要: 无论逻辑备份还是物理备份,为了获取一致性位点,都强依赖于FTWRL(Flush Table With Read Lock)。这个锁杀伤力非常大,因为持有锁的这段时间,整个数据库实质上不能对外提供写服务的。此外,由于FTWRL需要关闭表,如有大查询,会导致FTWRL等待,进而导致DML堵塞的时间变长。阅读全文
posted @ 2016-06-05 08:53 天士梦 阅读(747) 评论(5) 编辑
[置顶]2016 DTCC(中国数据库技术大会)
摘要: 上周去参加了2016 DTCC(数据库技术大会),会议总共持续3天,议题非常多,我这里搜集了最新的公开的PPT内容,有兴趣的同学可以下载看看,PPT合集下载链接为:http://pan.baidu.com/s/1i4XDESX。以下内容是我对听的几个议题的一点总结,并欢迎讨论。 《时间序列存储引擎》阅读全文
posted @ 2016-05-19 11:31 天士梦 阅读(1683) 评论(4) 编辑
[置顶]MySQL备份原理详解
摘要: 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。这篇文章主要讨论MySQL的阅读全文
posted @ 2016-05-03 09:13 天士梦 阅读(1358) 评论(0) 编辑
[置顶]MySQL高可用方案
摘要: 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法发微博,发微信等。一般而言,衡量高可用做到什么程度可以通过一年内服务不可用时间作为参考,要做到3个9阅读全文
posted @ 2016-05-02 10:49 天士梦 阅读(3018) 评论(0) 编辑
由一个bug引发的SQLite缓存一致性探索
摘要: 问题 我们在生产环境中使用SQLite时中发现建表报“table xxx already exists”错误,但DB文件中并没有该表。后面才发现这个是SQLite在实现过程中的一个bug,而这个bug与数据字典的一致性相关,下面这篇文章主要讨论SQLite的缓存机制,以及缓存一致性实现的策略,希望对阅读全文
posted @ 2016-03-26 11:40 天士梦 阅读(719) 评论(0) 编辑
[置顶]MySQL排序原理与案例分析
摘要: 前言 排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐含使用排序。本文首先会简单介绍SQL如何利用索引避免排序代价,然后会介绍MySQL实现排序的内部原理阅读全文
posted @ 2016-03-22 08:15 天士梦 阅读(3150) 评论(14) 编辑
[置顶]SQLite学习笔记(十二)&&虚拟机指令
摘要: 上篇文章简单讨论了虚拟机的原理,这篇文章我们详细讨论下指令,具体从几种典型的SQL语句来看看每种SQL对应的指令流,以及每个指令的含义。通过explain语句,可以看到语句对应的指令流;通过pragma vdbe_trace=on指令,我们甚至可以得到语句对应的指令执行流程,包括跳转等。测试表结构 阅读全文
posted @ 2016-01-21 09:22 天士梦 阅读(228) 评论(0) 编辑
[置顶]SQLite学习笔记(十一)&&虚拟机原理
摘要: 前言 我们知道任何一种关系型数据库管理系统都支持SQL(Structured Query Language),相对于文件管理系统,用户不用关心数据在数据库内部如何存取,也不需要知道底层的存储结构,熟悉SQL,就能熟练使用数据库。SQL的引入,使得数据库系统需要将SQL转换为内部的数据结构,然后与底层阅读全文
posted @ 2016-01-20 08:59 天士梦 阅读(657) 评论(1) 编辑
[置顶]SQLite使用(三)&&核心API使用
摘要: 概述 SQLite提供了一系列接口供用户访问数据库,主要包括连接数据库,处理SQL,迭代查询结果等。本文会针对我们使用SQLite的主要场景,列出核心的API,详细介绍API的用法并给出代码用例。1.打开关闭数据库sqlite3_open_v2原型: 作用:打开一个数据库连接关键的参数:flagsS阅读全文
posted @ 2016-01-12 08:29 天士梦 阅读(2449) 评论(0) 编辑
[置顶]SQLite使用(二)&&数据类型
摘要: 1.概述 我们熟知的数据库引擎大部分采用静态数据类型,即列定义的类型定义了值的存储,并且值要严格满足列的定义,同一列所有值的存储方式都相同,比如定义了一个列类型为整型 int,不能在该列上输入'abc'。SQLite的数据类型则采用了动态类型,列定义不能决定值的存储,值的存储由值本身决定,因此在SQ阅读全文
posted @ 2016-01-11 09:22 天士梦 阅读(337) 评论(1) 编辑
[置顶]mysql半同步复制问题排查
摘要: 1.问题背景 默认情况下,线上的mysql复制都是异步复制,因此在极端情况下,主备切换时,会有一定的概率备库比主库数据少,因此切换后,我们会通过工具进行回滚回补,确保数据不丢失。半同步复制则要求主库执行每一个事务,都要求至少一个备库成功接收后,才真正执行完成,因此可以保持主备库的强一致性。为了确保主阅读全文
posted @ 2016-01-05 08:57 天士梦 阅读(733) 评论(13) 编辑
来源: http://www.cnblogs.com/cchust/