5.2 理解实际影响和性能

在本章中,我们已经讨论了实际影响以及性能影响。但是,有什么好的理论性的例子吗?让我们做一个简单的基准测试,看看复制是怎么做的。我们做这样的测试来为您显示各种耐久性的级别不只是一个次要的话题,对性能来说它们是关键的。

让我们假设一个简单的测试:在下面的场景中,我们已经连接到两个同样强大的机器(3 GHz, 8 GB RAM) 超过1 Gbit 的网络。两台机器彼此相邻。为了演示同步复制的影响,我们使用 shared_buffers 和所有其他内存参数的默认设置,仅仅把 fsync 设置为 off来确保磁盘等待影响几乎降低到0。

该测试很简单:我们使用一个只有一个整型字段的表和包括只有一个INSERT语句的10000笔事务:

INSERT INTO t_test VALUES (1);

我们可以尝试这个完全的同步复制(synchronous_ commit = on):

real 0m6.043s

user 0m0.131s

sys 0m0.169s

正如您所看到的,测试用了大约六秒就可以完成。现在使用 synchronous_commit = local (这实际上意味着异步复制)来重复该测试:

real 0m0.909s

user 0m0.101s

sys 0m0.142s

在这个简单的测试中,您可以看到速度提升了六倍。当然这是一个暴力的例子,这并不能完全地反映现实情况(这不是目标)。要理解什么是重要的,同步复制和异步复制并不是几个百分点的区别。这更加强调了我们的观点:只要真正地需要同步地复制,如果您真的需要使用同步复制,确保您的同步事务数量绝对地小。

另外,请确保您的网络能够满足工作需求。通过带有高延迟的网络连接同步地复制数据肯定不知不觉地会破坏您的系统性能。请记住,没有办法通过昂贵的硬件解决这个问题。实际上,加倍您的服务器的时钟速度对您来说并没有用,因为真正的限制总是来自网络延迟,只来自网络延迟。

[只有一个连接的性能损失肯定比许多连接的情况下大。请记住,可以在并行方面做工作,网络延迟并没有使用我们更多的I/O或CPU带宽,所以,我们可以通过启动更多的并发工作来降低慢事务的影响。]

使用同步复制时,您怎么能确保性能不会有太大的损失?基本上,有几个已被证明的有帮助的重要的建议:

• 使用较长的事务: 记住,,系统必须确保提交的数据在两台服务器上是可用的;我们并不关心事务的中间过程,因为您的事务之外的任何人都不会看到数据。较长的事务会大幅地减少网络通信。

• 运行并行任务: 如果您有多个事务同时运行,它一定会对性能有利。原因是,远程服务器将返回XLOG内部的位置被认为是安全的进程(刷新或接收)。此方法确保了多事务可能会在同一时间得到批准。

PostgreSQL Replication之第五章 设置同步复制(2)的更多相关文章

  1. PostgreSQL Replication之第五章 设置同步复制(1)

    到目前为止,我们已经处理了基于文件的复制(或日志传送)和简单的基于流复制的设置.在两种情况中,在master上事务被提交之后,数据被提交,由slave接收.在master提交和slave实际上完全地接 ...

  2. PostgreSQL Replication之第五章 设置同步复制(3)

    5.3 冗余和停止复制 谈到同步复制,有一个现象一定不能被遗漏.想象一下,我们有一个同步复制的双节点集群.如果slave故障会发生什么?答案是master不能容易地区分慢slave和故障slave,因 ...

  3. PostgreSQL Replication之第四章 设置异步复制(2)

    4.2 配置级联复制 正如您在本章已经看到的,设置流复制真的很容易.只需要设置几个参数,做一个基础备份,并享受您的复制设置. 在许多情况下,这种情况更有一点点微妙.在这个例子中我们假设:我们要使用一个 ...

  4. PostgreSQL Replication之第四章 设置异步复制(1)

    执行完您的第一个即时恢复(PITR,Point-In-Time-Recovery),我们准备在一个真正的复制设置上工作.在本章,您将学会如何设置异步复制和流.我们的目标是确保您可以实现更高的高可用和更 ...

  5. PostgreSQL Replication之第四章 设置异步复制(8)

    4.8 处理时间线 时间线是一个您必须要知道的一个重要的概念,尤其是当您规划一个大型的设置的时候. 那么,什么是时间线呢?事实上,它是XLOG的一个分支.正常情况下,刚设置的一个数据库实例使用的时间线 ...

  6. PostgreSQL Replication之第四章 设置异步复制(3)

    4.3 slave到master的切换 如果您想扩展读或您想做一个数据备份,一个 slave是件美好的事情.但是,slave可能不会一直是slave.在有些时候,您可能需要把slave转换为maste ...

  7. PostgreSQL Replication之第四章 设置异步复制(4)

    4.4 基于流和基于文件的恢复 生活并不总只是黑色或白色:有时也会有一些灰色色调.对于某些情况下,流复制可能恰到好处.在另一些情况下,基于文件复制和PITR是您所需要的.但是也有许多情况下,您既需要流 ...

  8. PostgreSQL Replication之第四章 设置异步复制(5)

    4.5 使流复制更健壮 当连接到master时,slave要做的第一件事情是赶上master.但是,这会一直工作吗?我们已经看到,我们可以使用由基于流和基于文件组成的混合设置.这给了我们一些额外的安全 ...

  9. PostgreSQL Replication之第四章 设置异步复制(7)

    4.7 冲突管理 在PostgreSQL中,流复制数据仅在一个方向流动.XLOG由master提供给几个slave,这些slave消耗事务日志并为您提供一个较好的数据备份.您可能想知道这怎么会导致冲突 ...

随机推荐

  1. MainWndProc运行观察(有待研究)

    MainWndProc运行观察 把MainWndProc改写成如下代码,便于观察:procedure TWinControl.MainWndProc(var Message: TMessage);be ...

  2. JAVA设计模式之【模板方法模式】

    模板方法模式 提高代码的复用性 把常用的基本方法放入父类中 强调一种流程步骤 角色 抽象类 抽象方法 具体方法 钩子方法 空方法 通过bool控制 具体类 看例子 1.银行模板类 package Te ...

  3. rsync来传输文件(可断点续传)

    scp传文件的话如果出错就得重新来过, 用rsync可以实现断点上传的功能   大概就是这样用:  rsync -P --rsh=ssh home.tar 192.168.205.34:/home/h ...

  4. BZOJ 3166 set+可持久化trie树(OR 莫队)

    思路: 1.找次大值 我们不妨设当前点是次大的 那这段区间为 左边第二个比它大的点的坐标+1 和右边第二个比它大的点的坐标-1 2.用可持久化trie树找异或最大值 也可以用莫队 //By Siriu ...

  5. C#的常见算法(面试)(转)

    一.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m //方法一,通过顺序规律写程序,同时也知道flag标志位的重要性. static int F1(int m) { ; ...

  6. C++之指针与引用,函数和数组

    ]={,,}; //ptr是指针,该指针类型是int[3] ]=&arr; cout << **ptr << endl;//第一次解指针时得到数组地址,第二次解指针取数 ...

  7. dispatch_group_t踩过的坑

    如果想在dispatch_queue中所有的任务执行完成后在做某种操作,在串行队列中,可以把该操作放到最后一个任务执行完成后继续,但是在并行队列中怎么做呢.这就有dispatch_group 成组操作 ...

  8. 大数相乘(牛客网ac通过)

    2019-05-172019-05-17 大数相乘基本思想: 相乘相加,只不过大于10先不进位到计算完后统一进位 #include <iostream> #include <stri ...

  9. socket网络编程登录实现及多客户端和服务端的数据交互

    一.TCP/IP 客户端 package com.demo.entity; import java.io.Serializable; public class UserInfo implements ...

  10. 链表<新>

    class Node: ''' 节点类 链表节点结构 data next data: 节点保存的数据 _next: 保存下一个节点对象 ''' def __init__(self, data, pne ...