数据库架构之美
不断前行的dbaer,pg爱好者,不定期分享主流及开源、分布式数据库知识,个人公众号:数据库架构之美
数据库架构之美
热爱数据库技术,PG数据库爱好者,不定期分析oracle、mysql、db2、postgresql及分布式数据库相关知识。欢迎关注个人公众号:数据库架构之美
展开
-
PostgreSQL的几种分布式架构对比
Postgresql由于强大的功能和良好的扩展性,基于postgresql来做的分布式架构也比较多,大部分用于分析类场景,下面比较几种常见的架构特点。CitusCitus以插件的方式扩展到postgresql中,独立于postgresql内核,所以能很快的跟上pg主版本的更新,部署也比较简单,是现在非常流行的分布式方案。Citus在苏宁有大规模应用,微软也提供citus的商业支持。下面是cit...原创 2019-12-28 11:39:50 · 15156 阅读 · 0 评论 -
PostgreSQL堆内元组、动态剪枝技术介绍
上一篇文章《PostgreSQL的元组、页面结构及索引查找原理》中介绍了postgresql数据库数据结构和索引查找过程,本文接着继续介绍下堆内元组和动态剪枝技术,这两个技术其实是相辅相成的。我们知道在数据库元组插入更新时,索引也需要进行相应维护,因为pg的老元组不会实时清理,那么在更新后索引中就会多出一条索引记录指向新元组,这样造成索引膨胀,维护代价变大。pg为了避免这个问题,从8.3版本开始采...原创 2019-12-28 11:36:38 · 1166 阅读 · 0 评论 -
PostgreSQL的元组、页面结构及索引查找原理
我们知道postgresql数据库通过数据多版本实现mvcc,pg又没有undo段,老版本的数据元组直接存放在数据页面中,这样带来的问题就是旧元组需要不断地进行清理以释放空间,这也是数据库膨胀的根本原因。本文简单介绍一下postgresql数据库的元组、页面的结构以及索引查找流程。元组结构元组,也叫tuple,这个叫法是很学术的叫法,但是现在数据库中一般叫行或者记录。下面是元组的结构:typ...原创 2019-12-28 11:32:59 · 2603 阅读 · 1 评论 -
全面讲解分布式数据库架构设计特点
行业背景随着全球经济下行压力增大,中美贸易摩擦愈演愈烈,美国一系列的经济制裁和技术封锁使得我们有种被扼住咽喉的感觉,数据库作为基础软件中的重要一环有着很深的技术含量,在这样的大背景下国产数据库厂商开始发力,这其中分布式数据库如雨后春笋般出现,良性的竞争环境使它们都得到了长足的发展,其中不乏优秀的产品,本文主要挑选目前几个相对成熟数据库进行架构特点介绍。分布式数据库总体架构其实分布式数据库总体...转载 2019-12-28 11:27:09 · 3813 阅读 · 0 评论 -
华为GaussDB数据库相比PostgreSQL做了哪些内核优化
行业背景随着全球经贸摩擦与中美贸易战愈演愈烈,国家基础软件自主可控被提上议程。数据库作为基础设施中重要的一环,承担着不可忽视的作用。近几年国产数据库得到了飞速的发展,特别是云数据库、分布式数据库产品也越来越多。这其中华为公司也已经在数据库领域深耕多年。华为公司在今年5月份推出了自研的AI Native数据库GaussDB。GaussDB分为三个产品线,GaussDB100、GaussDB200...原创 2019-12-28 11:19:57 · 5590 阅读 · 0 评论 -
为什么要慎用replication slot
复制槽概念复制槽(replication slot)在postgresql9.4版本中被引入,引入之初是为了防止备库需要的xlog日志在主库被删除,主库会会根据备库返回的信息确认哪些xlog已不再需要,,才能进行清理。同时主库不会移除那些导致恢复冲突的行,关于恢复冲突,前面有一篇文章讲到过可以通过设置hot_standby_feedback、max_standby_streaming_delay...原创 2019-11-08 09:23:18 · 2839 阅读 · 0 评论 -
使用pg_repack实现在线vacuum
Postgresql通过数据多版本实现mvcc,删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的系统,数据膨胀是个头疼的问题,如果不进行处理,数据膨胀倍数可能达到十几倍。为了处理膨胀问题,pg提供了vacuum工具,vacuum分为普通vacuum和vacuum full,普通vacuum会清理死元组,但是不会进行空间重组,磁盘上的空间不会释放,但是会释...原创 2019-11-08 09:16:51 · 1523 阅读 · 0 评论 -
PostgreSQL数据库xlog文件命名
我们会在postgresql数据库的数据目录下pg_xlog(新版本已经变为pg_wal)目录下看到下面这些文件:如果第一次看到这些文件名可能觉得命名很奇怪,这么一串数字有什么含义呢,为什么要这样命名,这就要从lsn说起。我们知道postgresql通过lsn标识redo(xlog)位置,通过lsn可以定位到xlog文件以及文件的偏移量,下面先看看lsn,通过pg_current_xlog_...原创 2019-11-08 09:12:17 · 932 阅读 · 0 评论 -
硬核-深度剖析PostgreSQL数据库“冻结炸弹”原理机制
冻结(FREEZE),相信熟悉pg的人都对这个词不陌生,因为冻结过程对数据库的资源消耗极大,影响业务的正常运行,所以也被称为“冻结炸弹”。网上关于冻结的文章也比较多,本文就系统性的介绍一下冻结过程的原理以及如何预防。事务号回卷问题先介绍下事务号回卷的问题,这也是为什么需要冻结的根本原因。我们知道,postgresql数据库使用32位事务号,最大容纳42亿左右的事务号,事务号是循环使用的,当事务...原创 2019-11-07 10:14:56 · 2103 阅读 · 0 评论 -
使用repmgrd实现postgresql failover和auto failover
前面的文章介绍了postgresql基于repmgr的高可用及切换方案,这篇文章主要聊聊通过repmgrd实现failover及auto failover。前提是部署好postgresql主从,同时部署好repmgr。[postgres@node1 ~]$ repmgr cluster show ID | Name | Role | Status | Upstream | Lo...原创 2019-09-25 12:13:05 · 1482 阅读 · 1 评论 -
基于repmgr的postgresql主备高可用方案
本文比较基础,主要介绍postgresql开源高可用工具repmgr的部署和使用,初学者可以根据本文步骤一步一步做下去,废话不多说,直接进入主题,本文以两台机器为例。1.两台机器分别编译安装postgresql,步骤略。2.主库配置vi postgresql.confwal_log_hints=onarchive_mode=onarchive_command=’test ! -f /p...原创 2019-09-25 12:03:25 · 2036 阅读 · 0 评论 -
pg_rewind到底能做什么?
我们知道postgresql的主从切换有点麻烦,或者说操作步骤要求很严格。可能我们经常遇到这种情况,在没有将主库杀死的情况下将备库提升为主,这时主备库可能由于某种原因都在提供写入操作,这时发生脑裂,如果不考虑数据丢失因素,这时我们可能想将原来的主库以备库的模式重新加入集群,但是主备库此时的时间线已经偏离了,这时就需要我们的pg_rewind工具了。pg_rewind相比pg_basebackup...原创 2019-09-17 08:47:03 · 1758 阅读 · 0 评论 -
MySQL和PostgreSQL在多表连接算法上的差异
我们知道mysql没有hash join,也没有merge join,所以在连接的时候只有一种算法nest loop join,nl join使用驱动表的结果集作为外表到内表中查找每一条记录,如果有索引,就会走索引扫描,没有索引就会全表扫。nl join并不能适用所有场景,例如两个表都是很大的表的等值连接,这种场景是hash join所擅长的,而且是生产环境中最常见的场景。mysql在这个时候就显...原创 2019-09-17 08:41:55 · 339 阅读 · 0 评论 -
PostgreSQL主从流复制原理及搭建
Postgresql9开始支持流复制(stream replication),作为pg原生的复制技术,有着很好的性能。本文从几个方面全面介绍pg的流复制技术。主从部署Postgresql主从部署比较简单,首先你需要安装好主从两个实例,然后进行主备库配置,主要配置可以参考如下步骤:主库配置:①创建角色用于同步:create role replica login replication en...原创 2019-08-12 13:12:18 · 7140 阅读 · 0 评论 -
PostgreSQL中的几种索引类型
索引是增强数据库性能的利器,在检索某些特定行的时候效率会有很大提升,postgresql中索引类型丰富,每种索引有着不同的应用场景,下面简单介绍一下。索引类型与场景BTree • =, >, >=, <, <=、排序Hash • =GIN • 多值类型(数组、全文检索、枚举、网络地址类型):包含、相交 • JSON类型 • 普通类型(通过btre...原创 2019-08-07 08:32:25 · 4371 阅读 · 0 评论 -
PostgreSQL HOT技术内幕解读
我们知道在数据库行数据更新时,索引也需要进行维护,如果是高并发的情况下,索引维护的代价很大,可能造成索引分裂。Pg为了避免这个问题,采用了HOT(堆内元组技术)解决这个问题,下面我们就这个技术详细探讨一下。我们先看看postgresql中page的结构:Pd_lsn:本页面最后一次变更所写入的xlog记录对于的lsn。Pd_checksum:页面校验和。Pd_lower:指向行指针的末尾...原创 2019-08-06 12:20:20 · 2211 阅读 · 0 评论 -
k8s容器平台架构浅析
行业背景Docker自2013年发行以来,得到了飞速的发展,直至今日已经成为了基础架构中必不可缺的一份子,也是构建企业云平台的有效手段。而作为容器编排及管理的利器的kubernetes,已经与docker紧紧绑在一起,K8S对docker提供了更加原生的支持,同时提供了资源调度、容器生命周期管理、负载均衡、弹性伸缩、高可用等底层功能。Docker基本概念Docker简单理解其实就是运行在li...原创 2019-08-04 15:29:18 · 1761 阅读 · 0 评论 -
PostgreSQL为什么要设置hot_standby_feedback
问题背景Postgresql从9.1开始支持流复制,流复制的出现是一次革命,因为它速度非常快,性能很好。流复制是基于wal日志的复制技术,主库不断发送wal日志至备库,备库进行应用回放。但是有时我们可能会在备库进行某个查询,然后遇到查询中途突然抛出如下错误:ERROR:canceling statement due to confilct with recovery。遇到这个错误很不幸,...原创 2019-08-04 15:07:50 · 3087 阅读 · 0 评论 -
记一次分布式数据库启动异常分析
今天在测试环境遇到一个很有意思的问题,我们在测试一款分布式数据库,这款分布式数据库底层是基于postgresql做的,现象大致是这样的,我们在重启数据库集群后发现某台机器的数据节点启动失败,然后去那台机器上发现进程确实没有启动。然后看了下运行日志,定位到了启动失败的原因,是内存不够用了,查了下该节点上还运行着其他数据库,由于其他数据库也占了一部分内存,造成该节点数据库由于内存不足启动失败。上面说...原创 2019-08-02 22:09:32 · 294 阅读 · 0 评论 -
Postgresql vacuum最佳实践
Postgresql作为世界上最先进的HTAP数据库,以其超高在线事务处理及分析性能和强大的功能被广泛应用与各行各业中。但其实它也并不完美,说到postgres,不得不提那个让人一直头疼的问题,也是数据库使用者锁诟病最多的地方:vacuum。那么为什么会有vacuum这个东西呢?它是做什么用的呢?我们先来聊聊postgresql的mvcc机制,我们知道,postgresql是没有undo...原创 2019-08-02 12:24:03 · 10108 阅读 · 0 评论 -
pgxc架构下两阶段提交异常分析
在当前去IOE的大潮下,分布式数据库正如火如荼的发展起来,特别是国产数据库呈现了井喷态势。一个典型的分布式数据库应该具有如下组件:①协调节点,也叫sql转发节点,用来进行sql协议支持,分布式执行计划生成与下发;②数据节点:用来存储数据,同时进行运算;③全局事务管理器,用来保证事务一致性。为了保证高可用,成熟的分布式数据库这些节点都具有主备切换功能。Pgxc就是这样cn+dn+gtm的经...原创 2019-08-02 12:15:48 · 1275 阅读 · 0 评论 -
数据库主备高可用架构浅析
数据库作为信息系统重要的基础设施,一直承担着压舱石的角色。互联网应用的高并发、海量数据使得数据库的负载越来越重,这在数据大集中的情况下愈发明显。而数据库作为信息系统唯一的“单点”,稳定性、可用性是首先要保证的目标。这里的单点并不是指数据库没有高可用方案,而是因为数据库只要涉及到数据的复制就一定是有状态的,有状态的应用更加难以运维,并且在遭遇异常时并不能做到真正意义上的无缝切换。传统关系型...原创 2019-08-02 10:01:14 · 2704 阅读 · 0 评论 -
MHA vs MGR谁更合适用在生产系统
MySQL为什么如此流行的原因是因为它很早就有了非常成熟的高可用方案,这个方案就是mha,很多互联网公司都是基于mha做的高可用,所有受众面非常广。其实还有个小原因就是我们从上大学学习数据库原理这门课的时候老师就是拿mysql数据库作为例子,使得我们大部分人对更加熟悉。相比起来pg的流复制出来的较晚,而且高可用方案也不统一,虽然流复制是基于xlog物理日志的复制技术,性能比mysql binlo...原创 2019-10-10 21:08:37 · 4581 阅读 · 0 评论