随笔分类 -  MySQL

摘要:一 前言 PolarDB是阿里巴巴自研的新一代云原生关系型数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、海量存储、高性能、低成本的数据库服务。X-Engine是阿里巴巴自研的新一代存储引擎,作为AliSQL的核心引擎之一已广泛用于阿里巴巴集团核心业务,包括交易历史库, 阅读全文
posted @ 2021-12-29 21:16 天士梦 阅读(866) 评论(0) 推荐(0) 编辑
摘要:概述 MySQL经过多年的发展已然成为最流行的数据库,广泛用于互联网行业,并逐步向各个传统行业渗透。之所以流行,一方面是其优秀的高并发事务处理的能力,另一方面也得益于MySQL丰富的生态。MySQL在处理OLTP场景下的短查询效果很好,但对于复杂大查询则能力有限。最直接一点就是,对于一个SQL语句, 阅读全文
posted @ 2020-02-22 21:06 天士梦 阅读(5439) 评论(1) 推荐(5) 编辑
摘要:概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜。有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQL多用于简单的OLTP场景,并且在互联网应用居多,需求没那么紧急。另一方面可能是因为以前完全靠社区,这种演进 阅读全文
posted @ 2019-11-30 11:42 天士梦 阅读(5872) 评论(0) 推荐(3) 编辑
摘要:背景 现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复。redo日志是物理日志,一般采用WAL(Write-Ahead-Logging)机制,所以也称redo日志为wal日志,redo日志记录了所有数据的变更,undo日志是逻辑日志 阅读全文
posted @ 2019-11-10 21:30 天士梦 阅读(2257) 评论(1) 推荐(0) 编辑
摘要:概述 越来越多的企业选择上云,最基础的云服务就是IaaS(Infrastructure as a Service)服务,直观理解就是虚拟主机,用户不用再自建机房,自己购买服务器,而是直接向云厂商购买虚拟主机服务ECS(Elastic Compute Service),按时按量付费。对于数据库而言,将 阅读全文
posted @ 2019-08-18 08:58 天士梦 阅读(1836) 评论(0) 推荐(0) 编辑
摘要:1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发器定义等信息;innodb层也有自己一套元数据,包括表信息,索引信息等,这两套元数据并没有机制保证一 阅读全文
posted @ 2019-07-01 09:34 天士梦 阅读(1627) 评论(0) 推荐(0) 编辑
摘要:概述 MySQL中临时表主要有两类,包括外部临时表和内部临时表。外部临时表是通过语句create temporary table...创建的临时表,临时表只在本会话有效,会话断开后,临时表数据会自动清理。内部临时表主要有两类,一类是information_schema中临时表,另一类是会话执行查询时 阅读全文
posted @ 2019-05-20 07:57 天士梦 阅读(29183) 评论(0) 推荐(6) 编辑
摘要:概述 数据库相对于其它存储软件一个核心的特征是它支持事务,所谓事务的ACID就是原子性,一致性,隔离性和持久性。其中原子性,一致性,持久性更多是关注单个事务本身,比如,原子性要求事务中的操作要么都提交,要么都不提交;一致性要求事务的操作必须满足定义的约束,包括触发器,外键约束等;持久性则要求如果事务 阅读全文
posted @ 2019-03-31 19:58 天士梦 阅读(1388) 评论(0) 推荐(1) 编辑
摘要:Amazon在SIGMOD 2017发表了论文《Amazon Aurora: DesignConsiderations for High Throughput Cloud-Native Relational Databases》,第一次公开介绍了Aurora的设计理念和内部实现,下文是我对论文的解读 阅读全文
posted @ 2017-09-05 09:22 天士梦 阅读(13643) 评论(0) 推荐(3) 编辑
摘要:概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁。通过定位排查发现,问题的源头就是index_merge,死锁的原因也很普通,两个事务加锁顺序不同,并存在相互等待的情 阅读全文
posted @ 2017-02-27 09:19 天士梦 阅读(3083) 评论(1) 推荐(4) 编辑
摘要:前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现。有关Raft协议和工程实现可以参考这个链接https://raft.github.io/,里面包含了大量的论文,视屏已经动画演示,非常有助于理解协议。概念与术语leader 阅读全文
posted @ 2016-07-04 08:00 天士梦 阅读(6163) 评论(1) 推荐(3) 编辑
摘要:无论逻辑备份还是物理备份,为了获取一致性位点,都强依赖于FTWRL(Flush Table With Read Lock)。这个锁杀伤力非常大,因为持有锁的这段时间,整个数据库实质上不能对外提供写服务的。此外,由于FTWRL需要关闭表,如有大查询,会导致FTWRL等待,进而导致DML堵塞的时间变长。 阅读全文
posted @ 2016-06-05 08:53 天士梦 阅读(6213) 评论(5) 推荐(0) 编辑
摘要:上周去参加了2016 DTCC(数据库技术大会),会议总共持续3天,议题非常多,我这里搜集了最新的公开的PPT内容,有兴趣的同学可以下载看看,PPT合集下载链接为:http://pan.baidu.com/s/1i4XDESX。以下内容是我对听的几个议题的一点总结,并欢迎讨论。 《时间序列存储引擎》 阅读全文
posted @ 2016-05-19 11:31 天士梦 阅读(3332) 评论(4) 推荐(6) 编辑
摘要:备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。这篇文章主要讨论MySQL的 阅读全文
posted @ 2016-05-03 09:13 天士梦 阅读(11990) 评论(3) 推荐(9) 编辑
摘要:高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法发微博,发微信等。一般而言,衡量高可用做到什么程度可以通过一年内服务不可用时间作为参考,要做到3个9 阅读全文
posted @ 2016-05-02 10:49 天士梦 阅读(8358) 评论(0) 推荐(6) 编辑
摘要:前言 排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐含使用排序。本文首先会简单介绍SQL如何利用索引避免排序代价,然后会介绍MySQL实现排序的内部原理 阅读全文
posted @ 2016-03-22 08:15 天士梦 阅读(20357) 评论(14) 推荐(5) 编辑
摘要:1.问题背景 默认情况下,线上的mysql复制都是异步复制,因此在极端情况下,主备切换时,会有一定的概率备库比主库数据少,因此切换后,我们会通过工具进行回滚回补,确保数据不丢失。半同步复制则要求主库执行每一个事务,都要求至少一个备库成功接收后,才真正执行完成,因此可以保持主备库的强一致性。为了确保主 阅读全文
posted @ 2016-01-05 08:57 天士梦 阅读(3747) 评论(13) 推荐(2) 编辑
摘要:mysql复制简单介绍了mysql semi-sync的出现的原因,并说明了semi-sync如何保证不丢数据。这篇文章主要侧重于semi-sync的实现,结合源码将semi-sync的实现过程展现给大家。最新的semi-sync源码可以参考官方5.7版本的实现,https://github.com 阅读全文
posted @ 2016-01-05 08:56 天士梦 阅读(4515) 评论(0) 推荐(0) 编辑
摘要:前一篇文章我们分析了Performance-Schema中每个表的用途,以及主要字段的含义,比较侧重于理论的介绍。这篇文章我主要从DBA的角度出发,详细介绍如何通过Performance-Schema得到DBA关心的数据,比如哪个SQL执行次数最多,哪个表访问最频繁,哪个锁最热等信息。通过充分利用P 阅读全文
posted @ 2015-12-21 09:07 天士梦 阅读(9842) 评论(0) 推荐(3) 编辑
摘要:MySQL Performance-Schema中总共包含52个表,主要分为几类:Setup表,Instance表,Wait Event表,Stage Event表Statement Event表,Connection表和Summary表。上一篇文章已经着重讲了Setup表,这篇文章将会分别就每种类 阅读全文
posted @ 2015-12-20 16:24 天士梦 阅读(4065) 评论(0) 推荐(0) 编辑