撰写于 2018
  • 找出没用过的索引

    2018年02月04日 在 PG 管理

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

    更多

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

    2018年01月11日 在 PG 内核

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

    更多

  • 第二章 进程和内存架构

    2018年01月10日 在 PG 内核

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

    更多

  • 第三章 查询处理

    2018年01月09日 在 PG 内核

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

    更多

  • 第四章 外部数据包装器

    2018年01月08日 在 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 …

    更多

  • 批量配置SSH免密登录

    2018年01月07日 在 PG 管理

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

    更多

  • 第五章 并发控制

    2018年01月07日 在 PG 内核

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

    更多

  • 第六章 垃圾清理过程

    2018年01月06日 在 PG 内核

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

    更多

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

    2018年01月05日 在 PG 内核

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

    更多

  • Wireshark抓包分析协议

    2018年01月05日 在 PG 管理

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

    更多