Posts in 2018
  • 第四章 外部数据包装器

    2018年01月08日 in PG 内核

    本章将介绍一种相当实用,而且很有趣的特性:外部数据包装器(Foreign Data Wrapper FDW)。 4.1 外部数据包装器(FDW) 2003年,SQL标准中添加了一个访问远程数据的规范,称为SQL外部数据管理(SQL/MED)。PostgreSQL在9.1版本开发出了FDW,实现了一部分SQL/MED中的特性。 在SQL/MED中,远程服务器上的表被称为外部表(Foreign Table)。 PostgreSQL的外部数据包装器(FDW) 使用与本地表类似的方式,通过SQL/MED …

    Read more

  • 批量配置SSH免密登录

    2018年01月07日 in PG 管理

    配置SSH是运维工作的基础,有时候还是要老生常谈一下。 生成公私钥对 理想的情况是全部通过公私钥认证,从本地免密码直接连接所有数据库机器。最好不要使用密码认证。 首先,使用ssh-keygen生成公私钥对 ssh-keygen -t rsa 注意权限问题,ssh内文件的权限应当设置为0600,.ssh目录的权限应当设置为0700,设置失当会导致免密登录无法使用。 配置ssh config穿透跳板机 把User换成自己的名字。放入.ssh/config,这里给出了有跳板机环境下配置生产网数据库免密 …

    Read more

  • 第五章 并发控制

    2018年01月07日 in PG 内核

    当多个事务同时在数据库中运行时,并发控制是一种用于维持一致性与隔离性的技术,一致性与隔离性是ACID的两个属性。 从宽泛的意义上来讲,有三种并发控制技术:多版本并发控制(Multi-version Concurrency Control, MVCC),严格两阶段锁定(Strict Two-Phase Locking, S2PL)和乐观并发控制(Optimistic Concurrency Control, OCC),每种技术都有多种变体。在MVCC中,每个写操作都会创建一个新版本的数据项,并保留 …

    Read more

  • 第六章 垃圾清理过程

    2018年01月06日 in PG 内核

    **清理(VACUUM)**是一种维护过程,有助于PostgreSQL的持久运行。它的两个主要任务是删除死元组,以及冻结事务标识,两者都在第5.10节中简要提到过。 为了移除死元组,清理过程有两种模式:并发清理(Concurrent Vacuum) 与完整清理(Full Vacuum) 。并发清理(通常简称为VACUUM)会删除表文件每个页面中的死元组,而其他事务可以在其运行时继续读取该表。相反,完整清理不仅会移除整个文件中所有的死元组,还会对整个文件中所有的活元组进行碎片整理。而其他事务在完整 …

    Read more

  • 第七章 堆内元组与仅索引扫描

    2018年01月05日 in PG 内核

    本章中介绍两个和索引扫描有关的特性—— 堆内元组(heap only tuple, HOT)和仅索引扫描(index-only scan) 。 7.1 堆内元组(HOT) 在8.3版本中实现的HOT特性,使得更新行的时候,可以将新行放置在老行所处的同一个数据页中,从而高效地利用索引与表的数据页;HOT特性减少了不必要的清理过程。 在源码的README.HOT中有关于HOT的详细介绍,本章只是简短的介绍HOT。首先,7.1.1节描述了在没有HOT特性的时候,更新一行是怎样一个过程,以阐明要解决的问 …

    Read more

  • Wireshark抓包分析协议

    2018年01月05日 in PG 管理

    Wireshark是一个很有用的工具,特别适合用来分析网络协议。 这里简单介绍使用Wireshark抓包分析PostgreSQL协议的方法。 假设调试本地PostgreSQL实例:127.0.0.1:5432 快速开始 下载并安装Wireshark:下载地址 选择要抓包的网卡,如果是本地测试选择lo0即可。 添加抓包过滤器,如果PostgreSQL使用默认设置,使用port 5432即可。 开始抓包 添加显示过滤器pgsql,这样就可以滤除无关的TCP协议报文。 然后就可以执行一些操作,观察并分 …

    Read more

  • 第八章 缓冲区管理器

    2018年01月04日 in PG 内核

    缓冲区管理器(Buffer Manager)管理着共享内存和持久存储之间的数据传输,对于DBMS的性能有着重要的影响。PostgreSQL的缓冲区管理器十分高效。 本章介绍了PostgreSQL的缓冲区管理器。第一节概览了缓冲区管理器,后续的章节分别介绍以下内容: 缓冲区管理器的结构 缓冲区管理器的锁 缓冲区管理器是如何工作的 环形缓冲区 脏页刷写 图8.1 缓冲区管理器,存储和后端进程之间的关系 8.1 概览 本节介绍了一些关键概念,有助于理解后续章节。 8.1.1 …

    Read more

  • 第九章 预写式日志

    2018年01月03日 in PG 内核

    事务日志(transaction log)是数据库的关键组件,因为当出现系统故障时,任何数据库管理系统都不允许丢失数据。事务日志是数据库系统中所有**变更(change)与行为(action)**的历史记录,当诸如电源故障,或其他服务器错误导致服务器崩溃时,它被用于确保数据不会丢失。由于日志包含每个已执行事务的相关充分信息,因此当服务器崩溃时,数据库服务器应能通过重放事务日志中的变更与行为来恢复数据库集群。 在计算机科学领域,WAL是Write Ahead Logging的缩写,它指的是将变更与 …

    Read more

  • 第十章 基础备份与时间点恢复

    2018年01月02日 in PG 内核

    在线数据库备份大致可分为两类:逻辑备份和物理备份。它们有着各自的优点和缺点。尽管各有优劣,但逻辑备份有一个缺点:执行需要花费太多时间。特别是对于大型数据库而言,需要花费很长时间进行备份,而从备份数据中恢复数据库可能需要更长的时间。相反的是,物理备份可以在相对较短的时间内备份和恢复大型数据库,因此在实际系统中,它是一个非常重要而实用的功能。 在PostgreSQL中,自8.0版本开始提供在线的全量物理备份,整个数据库集簇(即物理备份数据)的运行时快照称为基础备份(base backup)。 …

    Read more

  • 第十一章 流复制

    2018年01月01日 in PG 内核

    PostgreSQL在9.1版本中实现了流复制。它属于所谓的一主多从类型的复制,而这两个术语 —— 主(master)和从(slave),在PostgreSQL中通常分别被称为主(primary)和备(standby)。 译注:存储数据库副本的每个节点称为副本(replica)。每一次对数据库的写入操作都需要传播到所有副本上,否则副本就会包含不一样的数据。最常见的解决方案被称为基于领导者的复制(leader-based replication),也称主动/被动(active/passive) …

    Read more