Posts in 2018
  • 使用FIO测试磁盘性能

    2018年02月06日 in PG 管理

    Fio是一个很好用的磁盘性能测试工具,可以通过以下命令测试磁盘的读写性能。 fio --filename=/tmp/fio.data \ -direct=1 \ -iodepth=32 \ -rw=randrw \ --rwmixread=80 \ -bs=4k \ -size=1G \ -numjobs=16 \ -runtime=60 \ -group_reporting \ -name=randrw \ --output=/tmp/fio_randomrw.txt \ && …

    Read more

  • 空中换引擎 —— PostgreSQL不停机迁移数据

    2018年02月06日 in PG 管理

    通常涉及到数据迁移,常规操作都是停服务更新。不停机迁移数据是相对比较高级的操作。 不停机数据迁移在本质上,可以视作由三个操作组成: 复制:将目标表从源库逻辑复制到宿库。 改读:将应用读取路径由源库迁移到宿库上。 改写:将应用写入路径由源库迁移到宿库上。 但在实际执行中,这三个步骤可能会有不一样的表现形式。 逻辑复制 使用逻辑复制是比较稳妥的做法,也有几种不同的做法:应用层逻辑复制,数据库自带的逻辑复制(PostgreSQL 10 之后的逻辑订阅),使用第三方逻辑复制插件(例 …

    Read more

  • PG服务器日志常规配置

    2018年02月06日 in PG 管理

    建议配置PostgreSQL的日志格式为CSV,方便分析,而且可以直接导入PostgreSQL数据表中。 日志相关配置项 log_destination ='csvlog' logging_collector =on log_directory ='log' log_filename ='postgresql-%a.log' log_min_duration_statement =1000 log_checkpoints =on …

    Read more

  • 找出没用过的索引

    2018年02月04日 in PG 管理

    索引很有用, 但不是免费的。没用到的索引是一种浪费,使用以下SQL找出未使用的索引: 首先要排除用于实现约束的索引(删不得) 表达式索引(pg_index.indkey中含有0号字段) 然后找出走索引扫描的次数为0的索引(也可以换个更宽松的条件,比如扫描小于1000次的) 找出没有使用的索引 视图名称:monitor.v_bloat_indexes 计算时长:1秒,适合每天检查/手工检查,不适合频繁拉取。 验证版本:9.3 ~ 10 功能:显示当前数据库索引膨胀情况。 在版本9.3与10.4上工 …

    Read more

  • 第一章 数据库的物理/逻辑结构

    2018年01月11日 in PG 内核

    第一章和第二章简单介绍了一些PostgreSQL的基础知识,有助于读者理解后续章节的内容。本章包括以下几个主题: 数据库集簇(database cluster) 的逻辑结构 数据库集簇的物理结构 堆表(heap table) 文件的内部布局 从表中读写数据的方式 如果你已经熟悉这些内容,可以跳过本章。 1.1 数据库集簇的逻辑结构 数据库集簇(database cluster) 是一组 数据库(database) 的集合,由一个PostgreSQL服务器管理。第一次听到这个定义也许会令人疑 …

    Read more

  • 第二章 进程和内存架构

    2018年01月10日 in PG 内核

    本章总结了PostgreSQL中进程与内存的架构,有助于读者理解后续章节。 如果读者已经熟悉这些内容,可以直接跳过本章。 2.1 进程架构 PostgreSQL是一个客户端/服务器风格的关系型数据库管理系统,采用多进程架构,运行在单台主机上。 我们通常所谓的“PostgreSQL服务器(PostgreSQL Server)” 实际上是一系列协同工作的进程集合,包含着下列进程: Postgres服务器进程(Postgres Server Process) 是所有数据库集簇管理进程的父进程。 每个后 …

    Read more

  • 第三章 查询处理

    2018年01月09日 in PG 内核

    查询处理是PostgreSQL中最为复杂的子系统。如PostgreSQL官方文档所述,PostgreSQL支持SQL2011标准中的大多数特性,查询处理子系统能够高效地处理这些SQL。本章概述了查询处理的流程,特别关注了查询优化的部分。 本章包括下列三个部分: 第一部分:3.1节 这一节会简单介绍PostgreSQL中查询处理的流程。 第二部分:3.2~3.4节 这一部分会描述获取单表查询上最优执行计划的步骤。3.2节讨论代价估计的过程,3.3节描述创建计划树的过程,3.4节将简要介绍执行器的工 …

    Read more

  • 第四章 外部数据包装器

    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