2.4 调整检查点和XLOG 目前为止,这一章已经提供深入洞察PostgreSQL如何写入数据,一般来说,XLOG是用来干什么的.考虑到这方面的知识,我们现在可以继续并学习我们能做些什么来使我们的数据库在复制和单台服务器运行的两种情况更加有效的工作. 2.4.1 理解检查点 在本章中,我们已经看到在数据可能到其它地方之前,它已经被写入到了XLOG.问题是,如果XLOG从未被删除,显然,在没有填满磁盘的同一时间,我们不会永远写到XLOG中. 要解决这个问题,XLOG必须在某一时刻被删除.这个过程就…
在前面的章节中,我们已经理解了各种复制概念.这不仅仅是一个为了接下来将要介绍的东西而增强您的意识的理论概述,还将为您介绍大体的主题. 在本章,我们将更加接近实际的解决方案,并了解PostgreSQL内部是如何工作的,复制意味着什么.我们将看到所谓的事务日志(XLOG)做什么,以及它是如何运作的.XLOG在PostgreSQL复制机制中起着主要作用.理解这部分是如何工作的是必要的. 2.1 PostgreSQL如何写入数据 PostgreSQL的复制完全是关于写入数据的.因此,PostgreSQL…
2.5 XLOG的内部结构 我们将使用事务贯穿本书,并让您在技术层面上更深地洞察事情是如果工作的,我们已经增加了这部分专门处理XLOG的内部工作机制.我们会尽量避免前往下降到C级,因为这将超出本书的范围,但我们会为您提供希望足够深的见解. 2.5.1 理解XLOG记录 对XLOG所做的更改是基于记录的.这意味着什么?让我们假设您在给一个表添加一行数据: test=# INSERT INTO t_test VALUES (1, 'hans'); INSERT 0 1 在这个例子中,我们正在插入一个…
2.3 理解一致性和数据丢失 挖掘PostgreSQL事务日志而不考虑一致性是不可能的.在本章的第一部分,我们已经大体上解释了事务日志的基本思想.您已经知道,无需事先的日志改变的能力,使数据处于一种好的形状是很难甚至是不可能的. 到现在为止,我们大多都在讨论崩溃的问题.因为数据文件中的条目的损坏而丢失文件是绝对不好的.但是,崩溃不是您要关心的唯一问题.另外两个重要的主题是: • 性能 • 数据丢失 虽然这可能是一个重要的主题的明显的选择,我们有这样的感觉,这两个主题都不好理解,是受尊敬的,并因此…
2.2 XLOG和复制 在本章中,您已经了解到PostgreSQL的事务日志已经对数据库做了所有的更改.事务日志本身被打包为易用的16MB段. 使用这种更改集来复制数据的想法是不牵强的.事实上,这是在每个关系(或者甚至非关系)数据库系统的发展的一个逻辑步骤.本书的其它部分,您将在许多方面看到PostgreSQL事务日志可以如何以许多不同的方法被使用,获取,存储,复制,和分析. 在大多数的复制系统中,PostgreSQL事务日志是整个体系结构(用于同步复制和异步复制)的的骨干.…
PostgreSQL Replication系列翻译自PostgreSQL Replication一书 在本章中,将会介绍不同的复制概念,您会了解哪些类型的复制对哪一种实用场景是最合适的. 在本章的最后,您将能够判断某个概念在各种情况下是否是可行的. 我们在本章将介绍以下主题: • CAP理论 •复制的物理限制 •为什么延迟有影响 •同步和异步复制 •拆分和复制 在我们使用PostgreSQL实际工作之前,我们将引导您完成一些非常基本的与复制相关想法和事实. 1.1 CAP理论和物理限制 您可能…
1.3 使用分片和数据分配 本节您将了解基本可扩展性技术,例如数据库分片.分片被广泛应用于高端系统并提供一个简单而且可靠的扩展设置方式来向外扩展.近年来,分片已经成为一种扩大专业系统规模的标准方式. 1.3.1 理解分片的目的 如果您的数据量增长超过一台机器的处理能力将会发生什么事情?如果您要运行这么多的事务,一台服务器根本跟不上怎么办?我们假设您有百万级的用户,上万用户想在同一时间执行特定的任务. 显然,某些时候,您再也不能通过购买能够处理无限大的负载的足够大的服务器来解决问题.显然在单个服务…
1.2不同类型的复制 现在,您已经完全地理解了物理和理论的局限性,可以开始学习不同类型的复制了. 1.2.1 同步和异步复制 我们可以做的第一个区分是同步复制和异步复制的区别. 这是什么意思呢?假设我们有两台服务器,希望从一台服务器(the master)复制数据到第二台服务器(the slave).下图说明了同步和异步复制的概念: 我们可以使用一个简单的事务如下所示: BEGIN: INSERT INTO foo VALUES ('bar'); COMMIT; 在异步复制的情况下,事务被提交到…
9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样做是非常有好处的,因为您没有必要担心函数的副作用或潜在的其他问题.PostgreSQL的事务日志总是正确的,并且它被认为是终极法则. 在流复制没引入到PostgreSQL内核之前,pgpool的语句级的复制是一个复制数据的很好的功能. 除此之外,这对只有一个master来说也是非常有益的.原因很简单…
9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用PostgreSQL流和Linux HA 使用pgpool解决高可用性的最简单的方法是和Linux HA一起使用PostgreSQL的板载工具.在这种情况下,在我们的世界中,最好的方法是不使用语句级别的复制运行pgpool和使用PostgreSQL的流复制来同步数据. pgpool可以被配置来做负载均衡,…