自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

数据库架构之美

不断前行的dbaer,pg爱好者,不定期分享主流及开源、分布式数据库知识,个人公众号:数据库架构之美

  • 博客(39)
  • 收藏
  • 关注

原创 PostgreSQL的几种分布式架构对比

Postgresql由于强大的功能和良好的扩展性,基于postgresql来做的分布式架构也比较多,大部分用于分析类场景,下面比较几种常见的架构特点。CitusCitus以插件的方式扩展到postgresql中,独立于postgresql内核,所以能很快的跟上pg主版本的更新,部署也比较简单,是现在非常流行的分布式方案。Citus在苏宁有大规模应用,微软也提供citus的商业支持。下面是cit...

2019-12-28 11:39:50 14989

原创 PostgreSQL堆内元组、动态剪枝技术介绍

上一篇文章《PostgreSQL的元组、页面结构及索引查找原理》中介绍了postgresql数据库数据结构和索引查找过程,本文接着继续介绍下堆内元组和动态剪枝技术,这两个技术其实是相辅相成的。我们知道在数据库元组插入更新时,索引也需要进行相应维护,因为pg的老元组不会实时清理,那么在更新后索引中就会多出一条索引记录指向新元组,这样造成索引膨胀,维护代价变大。pg为了避免这个问题,从8.3版本开始采...

2019-12-28 11:36:38 1073

原创 PostgreSQL的元组、页面结构及索引查找原理

我们知道postgresql数据库通过数据多版本实现mvcc,pg又没有undo段,老版本的数据元组直接存放在数据页面中,这样带来的问题就是旧元组需要不断地进行清理以释放空间,这也是数据库膨胀的根本原因。本文简单介绍一下postgresql数据库的元组、页面的结构以及索引查找流程。元组结构元组,也叫tuple,这个叫法是很学术的叫法,但是现在数据库中一般叫行或者记录。下面是元组的结构:typ...

2019-12-28 11:32:59 2416 1

转载 全面讲解分布式数据库架构设计特点

行业背景随着全球经济下行压力增大,中美贸易摩擦愈演愈烈,美国一系列的经济制裁和技术封锁使得我们有种被扼住咽喉的感觉,数据库作为基础软件中的重要一环有着很深的技术含量,在这样的大背景下国产数据库厂商开始发力,这其中分布式数据库如雨后春笋般出现,良性的竞争环境使它们都得到了长足的发展,其中不乏优秀的产品,本文主要挑选目前几个相对成熟数据库进行架构特点介绍。分布式数据库总体架构其实分布式数据库总体...

2019-12-28 11:27:09 3678

原创 华为GaussDB数据库相比PostgreSQL做了哪些内核优化

行业背景随着全球经贸摩擦与中美贸易战愈演愈烈,国家基础软件自主可控被提上议程。数据库作为基础设施中重要的一环,承担着不可忽视的作用。近几年国产数据库得到了飞速的发展,特别是云数据库、分布式数据库产品也越来越多。这其中华为公司也已经在数据库领域深耕多年。华为公司在今年5月份推出了自研的AI Native数据库GaussDB。GaussDB分为三个产品线,GaussDB100、GaussDB200...

2019-12-28 11:19:57 5192

原创 为什么要慎用replication slot

复制槽概念复制槽(replication slot)在postgresql9.4版本中被引入,引入之初是为了防止备库需要的xlog日志在主库被删除,主库会会根据备库返回的信息确认哪些xlog已不再需要,,才能进行清理。同时主库不会移除那些导致恢复冲突的行,关于恢复冲突,前面有一篇文章讲到过可以通过设置hot_standby_feedback、max_standby_streaming_delay...

2019-11-08 09:23:18 2650

原创 使用pg_repack实现在线vacuum

Postgresql通过数据多版本实现mvcc,删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的系统,数据膨胀是个头疼的问题,如果不进行处理,数据膨胀倍数可能达到十几倍。为了处理膨胀问题,pg提供了vacuum工具,vacuum分为普通vacuum和vacuum full,普通vacuum会清理死元组,但是不会进行空间重组,磁盘上的空间不会释放,但是会释...

2019-11-08 09:16:51 1449

原创 PostgreSQL数据库xlog文件命名

我们会在postgresql数据库的数据目录下pg_xlog(新版本已经变为pg_wal)目录下看到下面这些文件:如果第一次看到这些文件名可能觉得命名很奇怪,这么一串数字有什么含义呢,为什么要这样命名,这就要从lsn说起。我们知道postgresql通过lsn标识redo(xlog)位置,通过lsn可以定位到xlog文件以及文件的偏移量,下面先看看lsn,通过pg_current_xlog_...

2019-11-08 09:12:17 863

原创 硬核-深度剖析PostgreSQL数据库“冻结炸弹”原理机制

冻结(FREEZE),相信熟悉pg的人都对这个词不陌生,因为冻结过程对数据库的资源消耗极大,影响业务的正常运行,所以也被称为“冻结炸弹”。网上关于冻结的文章也比较多,本文就系统性的介绍一下冻结过程的原理以及如何预防。事务号回卷问题先介绍下事务号回卷的问题,这也是为什么需要冻结的根本原因。我们知道,postgresql数据库使用32位事务号,最大容纳42亿左右的事务号,事务号是循环使用的,当事务...

2019-11-07 10:14:56 1880

原创 MHA vs MGR谁更合适用在生产系统

MySQL为什么如此流行的原因是因为它很早就有了非常成熟的高可用方案,这个方案就是mha,很多互联网公司都是基于mha做的高可用,所有受众面非常广。其实还有个小原因就是我们从上大学学习数据库原理这门课的时候老师就是拿mysql数据库作为例子,使得我们大部分人对更加熟悉。相比起来pg的流复制出来的较晚,而且高可用方案也不统一,虽然流复制是基于xlog物理日志的复制技术,性能比mysql binlo...

2019-10-10 21:08:37 4459

原创 使用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 1365 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 1980

原创 pg_rewind到底能做什么?

我们知道postgresql的主从切换有点麻烦,或者说操作步骤要求很严格。可能我们经常遇到这种情况,在没有将主库杀死的情况下将备库提升为主,这时主备库可能由于某种原因都在提供写入操作,这时发生脑裂,如果不考虑数据丢失因素,这时我们可能想将原来的主库以备库的模式重新加入集群,但是主备库此时的时间线已经偏离了,这时就需要我们的pg_rewind工具了。pg_rewind相比pg_basebackup...

2019-09-17 08:47:03 1667

原创 MySQL和PostgreSQL在多表连接算法上的差异

我们知道mysql没有hash join,也没有merge join,所以在连接的时候只有一种算法nest loop join,nl join使用驱动表的结果集作为外表到内表中查找每一条记录,如果有索引,就会走索引扫描,没有索引就会全表扫。nl join并不能适用所有场景,例如两个表都是很大的表的等值连接,这种场景是hash join所擅长的,而且是生产环境中最常见的场景。mysql在这个时候就显...

2019-09-17 08:41:55 304

原创 PostgreSQL主从流复制原理及搭建

Postgresql9开始支持流复制(stream replication),作为pg原生的复制技术,有着很好的性能。本文从几个方面全面介绍pg的流复制技术。主从部署Postgresql主从部署比较简单,首先你需要安装好主从两个实例,然后进行主备库配置,主要配置可以参考如下步骤:主库配置:①创建角色用于同步:create role replica login replication en...

2019-08-12 13:12:18 6993

原创 PostgreSQL中的几种索引类型

索引是增强数据库性能的利器,在检索某些特定行的时候效率会有很大提升,postgresql中索引类型丰富,每种索引有着不同的应用场景,下面简单介绍一下。索引类型与场景BTree  • =, >, >=, <, <=、排序Hash  • =GIN  • 多值类型(数组、全文检索、枚举、网络地址类型):包含、相交  • JSON类型  • 普通类型(通过btre...

2019-08-07 08:32:25 4274

原创 PostgreSQL HOT技术内幕解读

我们知道在数据库行数据更新时,索引也需要进行维护,如果是高并发的情况下,索引维护的代价很大,可能造成索引分裂。Pg为了避免这个问题,采用了HOT(堆内元组技术)解决这个问题,下面我们就这个技术详细探讨一下。我们先看看postgresql中page的结构:Pd_lsn:本页面最后一次变更所写入的xlog记录对于的lsn。Pd_checksum:页面校验和。Pd_lower:指向行指针的末尾...

2019-08-06 12:20:20 2054

原创 k8s容器平台架构浅析

行业背景Docker自2013年发行以来,得到了飞速的发展,直至今日已经成为了基础架构中必不可缺的一份子,也是构建企业云平台的有效手段。而作为容器编排及管理的利器的kubernetes,已经与docker紧紧绑在一起,K8S对docker提供了更加原生的支持,同时提供了资源调度、容器生命周期管理、负载均衡、弹性伸缩、高可用等底层功能。Docker基本概念Docker简单理解其实就是运行在li...

2019-08-04 15:29:18 1683

原创 PostgreSQL为什么要设置hot_standby_feedback

问题背景Postgresql从9.1开始支持流复制,流复制的出现是一次革命,因为它速度非常快,性能很好。流复制是基于wal日志的复制技术,主库不断发送wal日志至备库,备库进行应用回放。但是有时我们可能会在备库进行某个查询,然后遇到查询中途突然抛出如下错误:ERROR:canceling statement due to confilct with recovery。遇到这个错误很不幸,...

2019-08-04 15:07:50 2855

原创 记一次分布式数据库启动异常分析

今天在测试环境遇到一个很有意思的问题,我们在测试一款分布式数据库,这款分布式数据库底层是基于postgresql做的,现象大致是这样的,我们在重启数据库集群后发现某台机器的数据节点启动失败,然后去那台机器上发现进程确实没有启动。然后看了下运行日志,定位到了启动失败的原因,是内存不够用了,查了下该节点上还运行着其他数据库,由于其他数据库也占了一部分内存,造成该节点数据库由于内存不足启动失败。上面说...

2019-08-02 22:09:32 266

原创 Postgresql vacuum最佳实践

Postgresql作为世界上最先进的HTAP数据库,以其超高在线事务处理及分析性能和强大的功能被广泛应用与各行各业中。但其实它也并不完美,说到postgres,不得不提那个让人一直头疼的问题,也是数据库使用者锁诟病最多的地方:vacuum。那么为什么会有vacuum这个东西呢?它是做什么用的呢?我们先来聊聊postgresql的mvcc机制,我们知道,postgresql是没有undo...

2019-08-02 12:24:03 9997

原创 pgxc架构下两阶段提交异常分析

在当前去IOE的大潮下,分布式数据库正如火如荼的发展起来,特别是国产数据库呈现了井喷态势。一个典型的分布式数据库应该具有如下组件:①协调节点,也叫sql转发节点,用来进行sql协议支持,分布式执行计划生成与下发;②数据节点:用来存储数据,同时进行运算;③全局事务管理器,用来保证事务一致性。为了保证高可用,成熟的分布式数据库这些节点都具有主备切换功能。Pgxc就是这样cn+dn+gtm的经...

2019-08-02 12:15:48 1226

原创 数据库主备高可用架构浅析

数据库作为信息系统重要的基础设施,一直承担着压舱石的角色。互联网应用的高并发、海量数据使得数据库的负载越来越重,这在数据大集中的情况下愈发明显。而数据库作为信息系统唯一的“单点”,稳定性、可用性是首先要保证的目标。这里的单点并不是指数据库没有高可用方案,而是因为数据库只要涉及到数据的复制就一定是有状态的,有状态的应用更加难以运维,并且在遭遇异常时并不能做到真正意义上的无缝切换。传统关系型...

2019-08-02 10:01:14 2565

转载 /u01/app/oracle/product/11.2.0/db_1/sqlplus/admin/glogin.sql

使用set serveroutput on 命令设置环境变量serveroutput为打开状态,从而使得pl/sql程序能够在SQL*plus中输出结果使用函数dbms_output.put_line()可以输出参数的值。set serveroutput on命令是不可以放在存储过程中执行的.如果你怕忘记打开或者嫌麻烦,可以把 set server...

2018-03-27 09:39:13 2099

转载 Oracle的软解析(soft prase)和硬解析(hard prase)及绑定变量

说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:1、语法检查(syntax check)检查此sql的拼写是否语法。2、语义检查(semantic check)诸如检查sql语句中的访问对象是否存在及该用户是否具备相...

2018-03-27 09:20:07 574

原创 linux群ping服务器各网段脚本

通过ping命令检测IP地址的shell脚本,代码如下:  IT网,http://www.it.net.cn复制代码代码示例:#!/bin/sh#filename ping.sh Linux学习,http:// linux.it.net.cn pingcmd(){prefix="SERVER $1 PING $2"ping -w 1 -c 1 $2>/d

2017-03-27 08:54:33 1792

转载 创建服务器内部yum源

Linux系统环境1.RHEL版本[root@localhost40 pub]# cat /etc/issueRed HatEnterprise Linux Server release 6.5 (Santiago)2.内核版本[root@localhost40 pub]# uname -aLinux localhost40.localdomain 2.6.32-431.el...

2017-02-15 19:12:52 322

原创 如何删除ssh secure shell中的profile

如果打开软件窗口再修改的话,保存按钮找不到,没法保存。profile路径在C:\Users\Administrator\AppData\Roaming\SSH下。

2016-11-16 14:50:32 4077 1

原创 oracle学习笔记

1.oracle server包含instance和database是多对一的关系;SGA当instance启动的时候分配,是一个总体的,PGA当一个server process(当有一个客户端连接时就有一个server process,而background process是处理数据库后台的进程)启动的时候分配。2.SGA包含shared pool,datavbase buffer ca...

2016-11-10 23:09:31 213

原创 sqlplus时不能用Backspace来删除字符的解决

解决方法1. #su - oracle$stty erase ^h2.要永久生效,可以加入到.bash_profile中vi .bash_profile加入一行stty erase ^h

2016-11-10 23:08:10 996

原创 nat实现虚拟机自动获取ip并且与主机互通

1.本机连上网2.将本机网络共享给vmnet83.开启本机vm dhcp服务和vm net服务(这样vmnet8网卡才能自动获得ip)4.在workstation中将虚拟机的网络设置为nat模式5.进虚拟机后可以发现ip能自动获取了...

2016-11-09 15:50:51 1052

原创 rhel7.0下oracle11gr2的静默安装

先录制一个rsp脚本,然后不能直接用这个脚本,因为安装过程中会报错error in invoking target ‘agent nmhs’ of makefile需要先做如下操作vi $ORACLE_HOME/sysman/lib/ins_emagent.mkSearch for the line$(MK_EMAGENT_NMECTL)Change it to:$(M...

2016-11-08 17:07:52 502

原创 linux右键没有open-terminal快捷方式

yum -y install nautilus-open-terminal

2016-11-08 15:52:07 2905

原创 locate命令找不到

yum install mlocate

2016-11-08 13:52:55 387

原创 linux远程桌面xrdp配置

使用rdp协议访问远程Linux桌面一般情况下,如果需要登陆远程Linux系统,我们会使用ssh/telnet来完成,如果需要登陆到远程Linux系统的桌面环境,我们可能会使用VNC。VNC是大部分Linux发行版默认的基于RFB协议的远程桌面程序,但对于普通用户来说,VNC的用户体验并不好,比较慢,还需要安装客户端。Windows的远程桌面基于RDP协议,在Linux下,我们也是可以...

2016-11-08 13:07:43 18474

原创 Linux中的命令行自动补齐功能

rhel7如果使用最小化安装后,tab键默认是不能自动补全命令的。查找资料最终找到解决办法,是因为bash-completion包没有安装。执行yum install bash-completion之后重启系统正常。...

2016-11-08 13:05:08 11825 1

转载 在Redhat linux7下安装oracle数据库在./runinstall时老是提示Can't connect to X11 window server。。。

Can't connect to X11 window server using '192.168.88.61:0.0' as the value of the DISPLAY variable.192.168.88.61:0.0192.168.88.61:0.0OUI-10025:Unable to start an interactive install session because of ...

2016-11-08 12:58:42 10761

转载 RedHat Linux7如何修改开机默认运行target级别

今天用虚拟机装了一台RedHat Linux 7,想修改开机默认运行级别,实现开机自动进入图形界面,按照以前的方法修改/etc/inittab发现不生效vi /etc/inittab 修改inittab文件找到”id:3:initdefault”这一行,将3修改为5保存后重启。重启后发现不生效,缺省还是进入字符模式,后来查了一些资料后发现Linux 7修改开机运行级别的方法变了,MD.从Cen...

2016-11-08 12:56:38 3987

转载 error in invoking target ‘agent nmhs’ of makefile

今天在rhel7.0上安装oracle11g时报error in invoking target ‘agent nmhs’ of makefilevi $ORACLE_HOME/sysman/lib/ins_emagent.mkSearch for the line$(MK_EMAGENT_NMECTL)Change it to:$(MK_EMAGENT_NMECTL) ...

2016-11-08 12:53:54 3384

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除