专栏导览
按领域划分的六个长青专栏,均提供独立的 RSS 订阅源。

PostgreSQL监控系统Pigsty概述
近自己做了套数据库监控系统,搞的还可以,简单给大家介绍一下。

PostgreSQL的KPI
管数据库和管人差不多,都需要定KPI。本文介绍了一种衡量PostgreSQL负载的方式:使用一种单一横向可比的指标,名曰PG Load(PG负载)。

简明实用密码学
密码学里有一个经典的问题,就是如何在不安全的信道中安全可靠地传输数据。避免自己的聊天与通信遭到偷窥,监控与河蟹。只要你手头有电脑,就可以轻易做到这一点。

西行漫记 —— 序章
西行漫记 —— 跨过高山大海,穿过人山人海,踏破丝绸之路,溯源黄河长江。

撸一下官方疫情数据
形势不是一片小好,是一片大好。

在线修改PG字段类型
如何在线修改PostgreSQL中的字段类型?一种通用方法。

事务隔离等级注意事项
PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited)与可序列化(Serializable)。

前后端通信线缆协议
了解PostgreSQL服务器与客户端通信使用的TCP协议,并使用Go语言打印消息。

故障档案:PG安装Extension导致无法连接
今天遇到一个比较有趣的Case,客户报告说数据库连不上了,发现是扩展导致的。

CDC 变更数据捕获机理
数据变更捕获是一种很有趣的ETL替代方案,以流式的方式持续收集状态变化事件。

PostgreSQL中的锁
详细介绍PostgreSQL中的各种锁:表级锁、行级锁、页级锁、咨询锁等。

GIN搜索的O(n²)复杂度
GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n²)。

山巅之城:加州自驾
自驾一周,库比蒂诺,洛杉矶,旧金山,优胜美地

PostgreSQL 常见复制拓扑方案
复制是系统架构中的核心问题之一。

温备:使用pg_receivewal
备份有各种各样的策略,物理备份通常可以分为四种。

容器化数据库是个好主意吗?
生产环境的数据库是否应当放入容器中,仍然是一个充满争议的问题。站在开发者角度我喜欢Docker,但站在DBA立场上,我认为就目前而言,将生产环境数据库放入Docker/K8S中仍然是一个馊主意。

PostgreSQL监控系统概览
监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具,本文简单介绍了一个PostgreSQL的监控系统。

互联网之殇
前途是不一定是光明的,道路肯定是曲折的。

理解时间:闰年闰秒,时间与时区
四年一遇的闰年2月29日,总有土鳖软件出现大翻车。对时间的正确理解,对正确处理工作生活中的时间问题很有帮助。本文聊一聊闰年、闰秒、时间与时区的原理,以及在数据库与编程语言中的注意事项。

故障档案:pg_dump导致的连接池污染
有时候,组件之间的相互作用会以微妙的形式表现出来。例如使用pg_dump从连接池中导出数据,就可能产生连接池污染的问题。

新年随想
前途是不一定是光明的,道路肯定是曲折的。新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。

中国行政区划相关知识
有关行政区划的等级、数量,行政区划代码的意义,城乡划分等。

互联网之冬
这是最好的时代,也是最坏的时代。人们正踏上天堂之路,人们正走向地狱之门。

PostgreSQL数据页面损坏修复
采用二进制编辑的方式修复PostgreSQL数据页,以及如何让一条主键查询出现两条记录来。

PostgreSQL监控系统Pigsty概述
近自己做了套数据库监控系统,搞的还可以,简单给大家介绍一下。

PostgreSQL的KPI
管数据库和管人差不多,都需要定KPI。本文介绍了一种衡量PostgreSQL负载的方式:使用一种单一横向可比的指标,名曰PG Load(PG负载)。

简明实用密码学
密码学里有一个经典的问题,就是如何在不安全的信道中安全可靠地传输数据。避免自己的聊天与通信遭到偷窥,监控与河蟹。只要你手头有电脑,就可以轻易做到这一点。

西行漫记 —— 序章
西行漫记 —— 跨过高山大海,穿过人山人海,踏破丝绸之路,溯源黄河长江。

撸一下官方疫情数据
形势不是一片小好,是一片大好。

在线修改PG字段类型
如何在线修改PostgreSQL中的字段类型?一种通用方法。

事务隔离等级注意事项
PostgreSQL实际上只有两种事务隔离等级:读已提交(Read Commited)与可序列化(Serializable)。

前后端通信线缆协议
了解PostgreSQL服务器与客户端通信使用的TCP协议,并使用Go语言打印消息。

故障档案:PG安装Extension导致无法连接
今天遇到一个比较有趣的Case,客户报告说数据库连不上了,发现是扩展导致的。

CDC 变更数据捕获机理
数据变更捕获是一种很有趣的ETL替代方案,以流式的方式持续收集状态变化事件。

PostgreSQL中的锁
详细介绍PostgreSQL中的各种锁:表级锁、行级锁、页级锁、咨询锁等。

GIN搜索的O(n²)复杂度
GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n²)。

山巅之城:加州自驾
自驾一周,库比蒂诺,洛杉矶,旧金山,优胜美地

PostgreSQL 常见复制拓扑方案
复制是系统架构中的核心问题之一。

温备:使用pg_receivewal
备份有各种各样的策略,物理备份通常可以分为四种。

容器化数据库是个好主意吗?
生产环境的数据库是否应当放入容器中,仍然是一个充满争议的问题。站在开发者角度我喜欢Docker,但站在DBA立场上,我认为就目前而言,将生产环境数据库放入Docker/K8S中仍然是一个馊主意。

PostgreSQL监控系统概览
监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具,本文简单介绍了一个PostgreSQL的监控系统。

互联网之殇
前途是不一定是光明的,道路肯定是曲折的。

理解时间:闰年闰秒,时间与时区
四年一遇的闰年2月29日,总有土鳖软件出现大翻车。对时间的正确理解,对正确处理工作生活中的时间问题很有帮助。本文聊一聊闰年、闰秒、时间与时区的原理,以及在数据库与编程语言中的注意事项。

故障档案:pg_dump导致的连接池污染
有时候,组件之间的相互作用会以微妙的形式表现出来。例如使用pg_dump从连接池中导出数据,就可能产生连接池污染的问题。

新年随想
前途是不一定是光明的,道路肯定是曲折的。新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。

中国行政区划相关知识
有关行政区划的等级、数量,行政区划代码的意义,城乡划分等。

互联网之冬
这是最好的时代,也是最坏的时代。人们正踏上天堂之路,人们正走向地狱之门。

PostgreSQL数据页面损坏修复
采用二进制编辑的方式修复PostgreSQL数据页,以及如何让一条主键查询出现两条记录来。
PostgreSQL监控系统Pigsty概述

近自己做了套数据库监控系统,搞的还可以,简单给大家介绍一下。 Pigsty is an advanced PostgreSQL monitoring systemd based on open source projects like prometheus & grafana. PIGSTY /pɪɡ staɪ/ is the abbreviation of “Postgres in Grafana Style”. Pigsty 是一个基于 Grafana 与 Prometheus 与 …
近自己做了套数据库监控系统,搞的还可以,简单给大家介绍一下。 Pigsty is an advanced PostgreSQL monitoring systemd based on open source projects like prometheus & grafana. PIGSTY /pɪɡ staɪ/ is the abbreviation of “Postgres in Grafana Style”. Pigsty 是一个基于 Grafana 与 Prometheus 与 …
PostgreSQL的KPI

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

微信公众号原文 密码学里有一个经典的问题,就是如何在不安全的信道中安全可靠地传输数据。避免自己的聊天与通信遭到偷窥,监控与河蟹。只要你手头有电脑,就可以轻易做到这一点。 问题1 现假设有两个用户翠花(Alice)与老王(Bob),正在使用偷窥狂马大帅(Oscar)家的垄断聊天软件宏信(MarcoMessage)讨论私密的事情。譬如: 老王 -------> 约吗 ---------> 翠花 老王 <------- 约!<--------- 翠花 消息被马大帅偷看去了,很不好,所以两人事先约定好 …
微信公众号原文 密码学里有一个经典的问题,就是如何在不安全的信道中安全可靠地传输数据。避免自己的聊天与通信遭到偷窥,监控与河蟹。只要你手头有电脑,就可以轻易做到这一点。 问题1 现假设有两个用户翠花(Alice)与老王(Bob),正在使用偷窥狂马大帅(Oscar)家的垄断聊天软件宏信(MarcoMessage)讨论私密的事情。譬如: 老王 -------> 约吗 ---------> 翠花 老王 <------- 约!<--------- 翠花 消息被马大帅偷看去了,很不好,所以两人事先约定好 …
西行漫记 —— 序章

隔离在家中,翻看起去年游历华夏的照片来,突然有了记录的冲动,那么,也是时候补上这篇游记了。 动机 有人说,好的孩子需要什么样的教育呢?就是需要在 16 岁以后,在人生进入渴望冒险的阶段以后,拿到一笔钱,闭上眼睛让他们到世界各地去闯荡,各种冒险,包括被人打断腿、鼻青脸肿、所有钱都毁了。切忌有一个老管家不停地指挥他,这笔钱应该怎么怎么花,应该怎么怎么花。让他闯荡回来,包括鼻青脸肿回来以后,他的能力会比坐在家里读死书的人要好得多。 我未来的子孙可能有这样机会,但我自己却十分遗憾的,尽管一直期望着有这么 …
隔离在家中,翻看起去年游历华夏的照片来,突然有了记录的冲动,那么,也是时候补上这篇游记了。 动机 有人说,好的孩子需要什么样的教育呢?就是需要在 16 岁以后,在人生进入渴望冒险的阶段以后,拿到一笔钱,闭上眼睛让他们到世界各地去闯荡,各种冒险,包括被人打断腿、鼻青脸肿、所有钱都毁了。切忌有一个老管家不停地指挥他,这笔钱应该怎么怎么花,应该怎么怎么花。让他闯荡回来,包括鼻青脸肿回来以后,他的能力会比坐在家里读死书的人要好得多。 我未来的子孙可能有这样机会,但我自己却十分遗憾的,尽管一直期望着有这么 …
撸一下官方疫情数据

最近疫情成了关注焦点,各类消息此起彼伏,传言漫天飞舞。如果每天看到的都是各种死亡的案例与绝望的求救,真的很容易有种世界末日来临的感觉,陷入恐慌绝望中。数据有助于认知真相,起码能够帮助人们形成正确的比例感(当然前提是数据真实)。比较遗憾的是各个疫情地图站点都没有提供市/区级别历史数据查询的接口,所以我特意把鹅厂公布的疫情数字撸下来归档并简单分析了一下。 TL;DR:湖北省内省外冰火两重天 全国概览 截止至 2 月 12 号凌晨,根据腾讯(卫健委)数据,全国累计确诊 42714 人,疑似 21675 …
最近疫情成了关注焦点,各类消息此起彼伏,传言漫天飞舞。如果每天看到的都是各种死亡的案例与绝望的求救,真的很容易有种世界末日来临的感觉,陷入恐慌绝望中。数据有助于认知真相,起码能够帮助人们形成正确的比例感(当然前提是数据真实)。比较遗憾的是各个疫情地图站点都没有提供市/区级别历史数据查询的接口,所以我特意把鹅厂公布的疫情数字撸下来归档并简单分析了一下。 TL;DR:湖北省内省外冰火两重天 全国概览 截止至 2 月 12 号凌晨,根据腾讯(卫健委)数据,全国累计确诊 42714 人,疑似 21675 …
在线修改PG字段类型

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

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

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

今天遇到一个比较有趣的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 当然,这种错误一眼就知道是插件没编译好,报符号找不到。因此数据库后端进程在启动时尝试加载 …
今天遇到一个比较有趣的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 当然,这种错误一眼就知道是插件没编译好,报符号找不到。因此数据库后端进程在启动时尝试加载 …
CDC 变更数据捕获机理

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

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

GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n^2) Here is the detail of why that query have O(N^2) inside GIN implementation. Details Inspect the index example_keys_idx postgres=# select oid,* from pg_class where relname = …
GIN索引如果使用很长的关键词列表进行搜索,会导致性能显著下降。本文解释了为什么GIN索引关键词搜索的时间复杂度为O(n^2) Here is the detail of why that query have O(N^2) inside GIN implementation. Details Inspect the index example_keys_idx postgres=# select oid,* from pg_class where relname = …
山巅之城:加州自驾

去米帝出了趟差,工作一周玩一周。自驾一号公路、湾区、洛杉矶、旧金山、优胜美地 托公司的福去美帝出了趟差,待了两个星期,工作一周玩一周。说起来除了去年公司年会去了趟日本,我还从来没出过国,特别是一个人去,还是有点发怵的。加上玩的行程是出发前临时决定的,一路上几乎都是动态规划模式。不过最后的效果倒是相当不错,多亏了当地老同学和老同事的帮助。 准备 工作的一周安排很满,直到上路开玩前两天,我才正式开始规划行程,因为一个最基本的问题还没有确定,到底是租车自驾,还是报个旅行社呢?毕竟第一次到异国他乡人生地 …
去米帝出了趟差,工作一周玩一周。自驾一号公路、湾区、洛杉矶、旧金山、优胜美地 托公司的福去美帝出了趟差,待了两个星期,工作一周玩一周。说起来除了去年公司年会去了趟日本,我还从来没出过国,特别是一个人去,还是有点发怵的。加上玩的行程是出发前临时决定的,一路上几乎都是动态规划模式。不过最后的效果倒是相当不错,多亏了当地老同学和老同事的帮助。 准备 工作的一周安排很满,直到上路开玩前两天,我才正式开始规划行程,因为一个最基本的问题还没有确定,到底是租车自驾,还是报个旅行社呢?毕竟第一次到异国他乡人生地 …
PostgreSQL 常见复制拓扑方案

复制是系统架构中的核心问题之一。 集群拓扑 假设我们使用4单元的标准配置:主库,同步从库,延迟备库,远程备库,分别用字母M,S,O,R标识。 M:Master, Main, Primary, Leader, 主库,权威数据源。 S: Slave, Secondary, Standby, Sync Replica,同步副本,需要直接挂载至主库 R: Remote Replica, Report instance,远程副本,可以挂载到主库或同步从库上 O: Offline,离线延迟备库,可以挂载到主 …
复制是系统架构中的核心问题之一。 集群拓扑 假设我们使用4单元的标准配置:主库,同步从库,延迟备库,远程备库,分别用字母M,S,O,R标识。 M:Master, Main, Primary, Leader, 主库,权威数据源。 S: Slave, Secondary, Standby, Sync Replica,同步副本,需要直接挂载至主库 R: Remote Replica, Report instance,远程副本,可以挂载到主库或同步从库上 O: Offline,离线延迟备库,可以挂载到主 …
温备:使用pg_receivewal

备份是DBA的安身立命之本,也是数据库管理中最为关键的工作之一。有各种各样的备份,但今天这里讨论的备份都是物理备份。物理备份通常可以分为以下四种: 热备(Hot Standby):与主库一模一样,当主库出现故障时会接管主库的工作,同时也会用于承接线上只读流量。 温备(Warm Standby):与热备类似,但不承载线上流量。通常数据库集群需要一个延迟备库,以便出现错误(例如误删数据)时能及时恢复。在这种情况下,因为延迟备库与主库内容不一致,因此不能服务线上查询。 冷备(Code Backup): …
备份是DBA的安身立命之本,也是数据库管理中最为关键的工作之一。有各种各样的备份,但今天这里讨论的备份都是物理备份。物理备份通常可以分为以下四种: 热备(Hot Standby):与主库一模一样,当主库出现故障时会接管主库的工作,同时也会用于承接线上只读流量。 温备(Warm Standby):与热备类似,但不承载线上流量。通常数据库集群需要一个延迟备库,以便出现错误(例如误删数据)时能及时恢复。在这种情况下,因为延迟备库与主库内容不一致,因此不能服务线上查询。 冷备(Code Backup): …
容器化数据库是个好主意吗?

前言:这篇文章是19年1月写的,四年过去了,涉及到数据库与容器的利弊权衡依然成立。这里进行细微调整后重新发出。明天我会发布一篇《数据库是否应当放入K8S中?》,那么今天就先用这篇老文来预热一下吧。 对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 —— 数据库来说,事情就没有那么简单了。生产环境的数据库 是否应当放入容器中,仍然是一个充满争议的问题。 站在开发者的角度上,我非常喜欢Docker,并相信容器也许是未来软件开发部署运维的标准方式。但站在DBA …
前言:这篇文章是19年1月写的,四年过去了,涉及到数据库与容器的利弊权衡依然成立。这里进行细微调整后重新发出。明天我会发布一篇《数据库是否应当放入K8S中?》,那么今天就先用这篇老文来预热一下吧。 对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 —— 数据库来说,事情就没有那么简单了。生产环境的数据库 是否应当放入容器中,仍然是一个充满争议的问题。 站在开发者的角度上,我非常喜欢Docker,并相信容器也许是未来软件开发部署运维的标准方式。但站在DBA …
PostgreSQL监控系统概览

PostgreSQL 驾驶技巧 PostgreSQL 是一个很棒的数据库,但也相当复杂。上手虽简单,但想要用好不容易,想要管理好就更麻烦了。监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具。用好一个监控系统,理解各种指标背后的意义并不是一件简单的事情,因此本司机决定写一系列文章,来介绍了 PostgreSQL 监控系统的设计,实施与使用。 0x01 PostgreSQL 监控面板 为了帮助读者形成一种直觉,这里展示了在实际环境中,我所使用的监控面板。最为常用的监控面板为“单数据库实例 …
PostgreSQL 驾驶技巧 PostgreSQL 是一个很棒的数据库,但也相当复杂。上手虽简单,但想要用好不容易,想要管理好就更麻烦了。监控系统是几乎所有运维工作的基础,更亦是驾驭数据库的必备工具。用好一个监控系统,理解各种指标背后的意义并不是一件简单的事情,因此本司机决定写一系列文章,来介绍了 PostgreSQL 监控系统的设计,实施与使用。 0x01 PostgreSQL 监控面板 为了帮助读者形成一种直觉,这里展示了在实际环境中,我所使用的监控面板。最为常用的监控面板为“单数据库实例 …
互联网之殇

《理解互联网》 中聊了对互联网的认识,今天聊一聊刻意省略的部分:互联网将面临的挫折。 命运 这是一个最好的时代,也是一个最坏的时代; 这是一个智慧的年代,这是一个愚蠢的年代; 这是一个信任的时期,这是一个怀疑的时期; 这是一个光明的季节,这是一个黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨 …
《理解互联网》 中聊了对互联网的认识,今天聊一聊刻意省略的部分:互联网将面临的挫折。 命运 这是一个最好的时代,也是一个最坏的时代; 这是一个智慧的年代,这是一个愚蠢的年代; 这是一个信任的时期,这是一个怀疑的时期; 这是一个光明的季节,这是一个黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨 …
理解时间:闰年闰秒,时间与时区

前几天出现了四年一遇的闰年 2 月 29 号,每到这一天,总会有一些土鳖软件出现大翻车。这种问题如果运气不好,可能要等上四年才会暴露出来。比如今天新鲜出炉的:禾赛科技激光雷达和新西兰加油站都因为闰年 Bug 无法使用。 今天确实是个很应景的日子,所以重发这篇六年前写的老文。聊一聊闰年,闰秒,时间与时区的原理,以及在数据库与编程语言中的注意事项。 0x01 秒与计时 时间的单位是秒,但秒的定义并不是一成不变的。它有一个天文学定义,也有一个物理学定义。 世界时(UT1) 在最开始,秒的定义来源于日。 …
前几天出现了四年一遇的闰年 2 月 29 号,每到这一天,总会有一些土鳖软件出现大翻车。这种问题如果运气不好,可能要等上四年才会暴露出来。比如今天新鲜出炉的:禾赛科技激光雷达和新西兰加油站都因为闰年 Bug 无法使用。 今天确实是个很应景的日子,所以重发这篇六年前写的老文。聊一聊闰年,闰秒,时间与时区的原理,以及在数据库与编程语言中的注意事项。 0x01 秒与计时 时间的单位是秒,但秒的定义并不是一成不变的。它有一个天文学定义,也有一个物理学定义。 世界时(UT1) 在最开始,秒的定义来源于日。 …
故障档案:pg_dump导致的连接池污染

PostgreSQL很棒,但这并不意味着它是Bug-Free的。这一次在线上环境中,我又遇到了一个很有趣的Case:由 pg_dump 导致的线上故障。这是一个非常微妙的Bug,由Pgbouncer,search_path,以及特殊的 pg_dump 操作所触发。 背景知识 连接污染 在PostgreSQL中,每条数据库连接对应一个后端进程,会持有一些临时资源(状态),在连接结束时会被销毁,包括: 本会话中修改过的参数。RESET ALL; 准备好的语句。 DEALLOCATE ALL 打开的游 …
PostgreSQL很棒,但这并不意味着它是Bug-Free的。这一次在线上环境中,我又遇到了一个很有趣的Case:由 pg_dump 导致的线上故障。这是一个非常微妙的Bug,由Pgbouncer,search_path,以及特殊的 pg_dump 操作所触发。 背景知识 连接污染 在PostgreSQL中,每条数据库连接对应一个后端进程,会持有一些临时资源(状态),在连接结束时会被销毁,包括: 本会话中修改过的参数。RESET ALL; 准备好的语句。 DEALLOCATE ALL 打开的游 …
新年随想

本文可能引起不适,阅读请谨慎。 新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。 我一直认为选择要比努力重要:人的一生在形式上就是由一系列关键的选择组成的路径,做出正确的选择需要智慧,而坚持努力前行需要意志。智慧与意志两者都是珍贵而稀有的属性,但智慧相对更为重要,因为它决定了前进的方向,以及可行选择的多少。 在过去一年里,我做出了很多重要的选择:换了职业,换了行业,也换了工作。但要说最重要的选择是什么,我认为是将大量时间花在了社会认知水平的提高上。得益于职业特殊性,我有着大把的时间来学习, …
本文可能引起不适,阅读请谨慎。 新年难得有闲暇独处,写下此篇随笔,想到哪儿就写到哪。 我一直认为选择要比努力重要:人的一生在形式上就是由一系列关键的选择组成的路径,做出正确的选择需要智慧,而坚持努力前行需要意志。智慧与意志两者都是珍贵而稀有的属性,但智慧相对更为重要,因为它决定了前进的方向,以及可行选择的多少。 在过去一年里,我做出了很多重要的选择:换了职业,换了行业,也换了工作。但要说最重要的选择是什么,我认为是将大量时间花在了社会认知水平的提高上。得益于职业特殊性,我有着大把的时间来学习, …
中国行政区划相关知识

中国行政区划分为几个级别,宪法规定了三个级别,但实际上有五个级别:省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 行政区划的级别 中国行政区划(administrative division)分为几个级别(government level): 宪法规定了三个级别(de jure level),但实际上有五个级别(de facto level/practical level) 我国现行的行政层级是“省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 由于我国存在“以党代政”的问题,有党 …
中国行政区划分为几个级别,宪法规定了三个级别,但实际上有五个级别:省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 行政区划的级别 中国行政区划(administrative division)分为几个级别(government level): 宪法规定了三个级别(de jure level),但实际上有五个级别(de facto level/practical level) 我国现行的行政层级是“省—地区—县(区)—乡镇” 四级制,算上中央就是五级。 由于我国存在“以党代政”的问题,有党 …
互联网之冬

这是最好的时代,也是最坏的时代; 这是智慧的年代,这是愚蠢的年代; 这是信任的时期,这是怀疑的时期; 这是光明的季节,这是黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 互联网之冬 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨大优势。 以阿里巴巴为例,为什么一家做toB交易中介平台起家的网站,能够发展成为今天这样一个囊括人们衣食住行吃 …
这是最好的时代,也是最坏的时代; 这是智慧的年代,这是愚蠢的年代; 这是信任的时期,这是怀疑的时期; 这是光明的季节,这是黑暗的季节; 这是希望之春,这是失望之冬; 人们面前应有尽有,人们面前一无所有; 人们正踏上天堂之路,人们正走向地狱之门。 —— 狄更斯,《双城记》 互联网之冬 让我们先从宏大叙事开始。 互联网的长远发展是无比光明的,因为这是一种新兴的社会组织形式,具有无可比拟的巨大优势。 以阿里巴巴为例,为什么一家做toB交易中介平台起家的网站,能够发展成为今天这样一个囊括人们衣食住行吃 …
PostgreSQL数据页面损坏修复

PostgreSQL是一个很可靠的数据库,但是再可靠的数据库,如果碰上了不可靠的硬件,恐怕也得抓瞎。本文介绍了在PostgreSQL中,应对数据页面损坏的方法。 最初的问题 线上有一套统计库跑离线任务,业务方反馈跑SQL的时候碰上一个错误: ERROR: invalid page in block 18858877 of relation base/16400/275852 看到这样的错误信息,第一直觉就是硬件错误导致的关系数据文件损坏,第一步要检查定位具体问题。 这里,16400是数据库的 …
PostgreSQL是一个很可靠的数据库,但是再可靠的数据库,如果碰上了不可靠的硬件,恐怕也得抓瞎。本文介绍了在PostgreSQL中,应对数据页面损坏的方法。 最初的问题 线上有一套统计库跑离线任务,业务方反馈跑SQL的时候碰上一个错误: ERROR: invalid page in block 18858877 of relation base/16400/275852 看到这样的错误信息,第一直觉就是硬件错误导致的关系数据文件损坏,第一步要检查定位具体问题。 这里,16400是数据库的 …





