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. ORA 12505 Listener does not currently know of SID given in connection descriptor

    oracle数据库正常启动后.在本地能够正常訪问,可是远程使用sqldevelop却不能訪问.提示ORA 12505 Listener does not currently know of SID g ...

  2. Android ImageView 不显示JPEG图片 及 Android Studio中怎样引用图片资源

    Android ImageView 不显示JPEG图片 今天在写一个小实例,ImageView在xml里面设置的是INVISIBLE,在代码里须要设置成setVisibility(View.VISIB ...

  3. linux使用windows中编辑的文件,格式问题

    参考:https://blog.csdn.net/yongan1006/article/details/8142527 运行脚本时出现了这样一个错误,打开之后并没有找到所谓的^M,查了之后才知道原来是 ...

  4. zzulioj--1634--Happy Thanksgiving Day - A + B Problem(模拟水题)

     1634: Happy Thanksgiving Day - A + B Problem Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 136  ...

  5. BZOJ 3626 离线+树链剖分+线段树

    思路: 抄一波yousiki的- 显然,暴力求解的复杂度是无法承受的. 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案 ...

  6. 移动端 input光标问题 以及 监听输入

    1.  input 框光标问题: input框 在ios上显示的与Android是不一样的 显示是这样的 而且在输入的时候 光标位置变化了 是这样的 为了达到一致的效果 在行高加上\9     如:l ...

  7. Timer 的 schedule()方法

    1.timer.schedule(new MyTask(),long time1,long time2); 第一个参数是TimerTask类,使用者要继承该类,并实现run()方法,因为TimerTa ...

  8. C#网络编程—HTTP应用编程(转)

    https://www.cnblogs.com/huangxincheng/archive/2012/01/09/2316745.html https://www.cnblogs.com/wangqi ...

  9. python编程基础

    Date: 2019-05-27 Author: Sun 1. 程序 为了完成某种特定功能,以某种程序设计语言编写的有序指令的集合.程序是指挥cpu工作的"工作手册".计算机只能执 ...

  10. CSS3新增的属性有哪些:

    CSS 用于控制网页的样式和布局. CSS3 是最新的 CSS 标准. CSS3新增了很多的属性,下面一起来分析一下新增的一些属性: 1.CSS3边框: border-radius:CSS3圆角边框. ...