Posts in 2020
  • 黄金监控指标:错误延迟吞吐饱和

    2020年11月06日 in PG 管理

    前言 玩数据库和玩车有一个共通之处,就是都需要经常看仪表盘。 盯着仪表盘干什么,看指标。为什么看指标,掌握当前运行状态才能有效施加控制。 车有很多指标:车速,胎压,扭矩,刹车片磨损,各种温度,等等等等,各式各样。 但人的注意力空间有限,仪表盘也就那么大, 所以,指标可以分两类: 你会去看的:黄金指标 / 关键指标 / 核心指标 你不会看的:黑匣子指标 / 冷指标。 黄金指标就是那几个关键性的核心数据,需要时刻保持关注(或者让自动驾驶系统/报警系统替你时刻保持关注),而冷指标通常只有故障排查时才 …

    Read more

  • v0.3.0 发布注记

    2020年10月24日 in 版本发布

    v0.3.0 首个Pigsty公开测试版本现在已经释出! 监控系统 Pigsty v0.3 包含以下8个监控面板作为开源内容: PG Overview PG Cluster PG Service PG Instance PG Database PG Table Overview PG Table Catalog Node 离线安装包 v0.3 离线安装包(CentOS 7.8)已经可以从Github下载:pkg.tgz

    Read more

  • 数据库集群管理概念与实体命名规范

    2020年06月03日 in PG 管理

    名之则可言也,言之则可行也。 概念及其命名是非常重要的东西,命名风格体现了工程师对系统架构的认知。定义不清的概念将导致沟通困惑,随意设定的名称将产生意想不到的额外负担。因此需要审慎地设计。 TL;DR **集群(Cluster)**是基本自治单元,由用户指定唯一标识,表达业务含义,作为顶层命名空间。 集群在硬件层面上包含一系列的节点(Node),即物理机,虚机(或Pod),可以通过IP唯一标识。 集群在软件层面上包含一系列的实例(Instance),即软件服务器,可以通过IP:Port唯一标 …

    Read more

  • PostgreSQL的KPI

    2020年05月29日 in PG 管理

    管数据库和管人差不多,都需要定KPI(关键性能指标)。那么数据库的KPI是什么?本文介绍了一种衡量PostgreSQL负载的方式:使用一种单一横向可比,与负载类型和机器类型基本无关的指标,名曰PG Load(PG负载)。 0x01 Introduction 在现实生产中,经常会有衡量数据库性能与负载,评估数据库水位的需求。一种最朴素的形式就是,能不能有一个类似于KPI的单一指标,能直接了当地告诉用户他心爱的数据库负载有没有超过警戒线?工作量到底饱和不饱和? 当然这里其实隐含着一个重要信息,即用户 …

    Read more

  • 在线修改PG字段类型

    2020年01月30日 in PG 管理

    场景 在数据库的生命周期中,有一类需求是很常见的,修改字段类型。例如: 使用INT作为主键,结果发现业务红红火火,INT32的21亿序号不够用了,想要升级为BIGINT 使用BIGINT存身份证号,结果发现里面有个X需要改为TEXT类型。 使用FLOAT存放货币,发现精度丢失,想要修改为Decimal 使用TEXT存储JSON字段,想用到PostgreSQL的JSON特性,修改为JSONB类型。 那么,如何应对这种需求呢? 常规操作 通常来说,ALTER TABLE可以用来修改字段类型。 …

    Read more

Posts in 2019
  • 事务隔离等级注意事项

    2019年11月12日 in PG 开发

    PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited)与可序列化(Serializable) 基础 SQL标准定义了四种隔离级别,但PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited)与可序列化(Serializable) SQL标准定义了四种隔离级别,但实际上这也是很粗鄙的一种划分。详情请参考并发异常那些事。 查看/设置事务隔离等级 通过执行:SELECT …

    Read more

  • 前后端通信线缆协议

    2019年11月12日 in PG 开发

    了解PostgreSQL服务器与客户端通信使用的TCP协议 启动阶段 启动阶段的基本流程如下所示: 客户端发送一条StartupMessage (F)向服务端发起连接请求 载荷包括0x30000的Int32版本号魔数,以及一系列kv结构的运行时参数(NULL0分割,必须参数为user), 客户端等待服务端响应,主要是等待服务端发送的ReadyForQuery (Z)事件,该事件代表服务端已经准备好接收请求。 上面是连接建立过程中最主要的两个事件, …

    Read more

  • 故障档案:PG安装Extension导致无法连接

    2019年06月13日 in PG 管理

    今天遇到一个比较有趣的Case,客户报告说数据库连不上了。报这个错: psql: FATAL: could not load library "/export/servers/pgsql/lib/pg_hint_plan.so": /export/servers/pgsql/lib/pg_hint_plan.so: undefined symbol: RINFO_IS_PUSHED_DOWN 当然,这种错误一眼就知道是插件没编译好,报符号找不到。因此数据库后端进程在启动时尝试加 …

    Read more

  • CDC 变更数据捕获机理

    2019年06月12日 in PG 开发

    在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 前驱知识 CDC与ETL 数据库在本质上是一个状态集合,任何对数据库的变更(增删改)本质上都是对状态的修改。 在实际生产中,我们经常需要把数据库的状态同步到其他地方去,例如同步到数据仓库进行分析,同步到消息队列供下游消费,同步到缓存以加速查询。总的来说,搬运状态有两大类方法:ETL与CDC。 …

    Read more

  • PostgreSQL中的锁

    2019年06月11日 in PG 开发

    微信公众号原文 PostgreSQL的并发控制以 快照隔离(SI) 为主,以 两阶段锁定(2PL) 机制为辅。PostgreSQL对DML(SELECT, UPDATE, INSERT, DELETE等命令)使用SSI,对DDL(CREATE TABLE等命令)使用2PL。 PostgreSQL有好几类锁,其中最主要的是 表级锁 与 行级锁,此外还有页级锁,咨询锁等,表级锁 通常是各种命令执行时自动获取的,或者通过事务中的LOCK语句显式获取;而行级锁则是由SELECT FOR …

    Read more