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. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

  2. IntelliJ IDEA中JAVA连接MYSQL

    1.下载mysql包 2.项目中引入mysql包 3.连接数据库,查询结果 看jdbc数据库连接类 package Facade; import java.sql.*; /** * Created b ...

  3. DGA ngram kmeans+TSNE用于绘图

    # -*- coding:utf-8 -*- import sys import re import numpy as np from sklearn.externals import joblib ...

  4. Binary Indexed Tree

    我借鉴了这个视频中的讲解的填坑法,我认为非常易于理解.有FQ能力和基本英语听力能力请直接去看视频,并不需要继续阅读. naive 算法 考虑一个这样的场景: 给定一个int数组, 我们想知道它的连续子 ...

  5. 访问Storm ui界面,出现org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts ["master" "slave1"]. Did you specify a valid list of nimbus hosts for confi的问题解决(图文详解)

    不多说,直接上干货! 前期博客 apache-storm-1.0.2.tar.gz的集群搭建(3节点)(图文详解)(非HA和HA)  问题详情 org.apache.storm.utils.Nimbu ...

  6. 理解class.forName()(good--字节码层面)

    使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这 ...

  7. yum概述配置

    YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载 ...

  8. AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)

    题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A Single Source Shortest Path In ...

  9. JOSN快速入门

    1.JSON介绍 (1)JSON是一种与开发语言无关的,轻量级的数据格式,全称 JavaScript Object  Notation,易于阅读和编写,语言解析和生产 (2)JSON数据类型表示 数据 ...

  10. cuda windows运行时间限制

    GTX1080的卡,8G的显存,写cuda时申请了2G的显存就莫名其妙的抛异常,昨天找了一天也没找出bug,去stackoverflow上问了下才知道是windows的事,需要修改注册表.问题链接 - ...