-
PostgreSQL 宏观查询优化之 pg_stat_statements
2023年10月26日 in PG 管理
在线业务数据库中,慢查询不仅影响终端用户体验,还会浪费系统资源、拉高资源饱和度、导致死锁和事务冲突,增加数据库连接压力,导致主从复制延迟等问题。因此,查询优化是 DBA 的核心工作内容之一。 在查询优化这条路上,有两种不同的方法: 宏观优化:整体分析工作负载,对其进行剖分下钻,自上而下地识别并改进其中表现最糟糕的部分。 微观优化:分析并改进一条特定的查询,这便需要记录慢查询日志,掌握 EXPLAIN 的玄机,领悟执行计划的奥妙。 今天我们先来说说前者,宏观优化有三个主要目标与动机: 减少资源消 …
-
如何用 pg_filedump 抢救数据?
2023年09月27日 in PG 管理
备份是DBA的生命线 —— 但如果你的 PostgreSQL 数据库已经爆炸了又没有备份,那么该怎么办呢?也许 pg_filedump 可以帮到你! 最近遇到了一个比较离谱的活儿,情况是这样的:有个用户的 PostgreSQL 数据库损坏了,是 Gitlab 自己拉起的 PostgreSQL。没有从库,没有备份,也没有 dump。跑在拿 SSD 当透明缓存的BCACHE上,断电后起不来了。 但这还没完,接连经受了几轮摧残之后,它彻底歇菜了:首先是因为忘了挂BCACHE盘,导致 Gitlab重新 …
-
PG中的本地化排序规则
2021年03月05日 in PG 管理
为什么Pigsty在初始化Postgres数据库时默认指定了locale=C与encoding=UTF8 答案其实很简单,除非真的明确知道自己会用到LOCALE相关功能,否则就根本不应该配置C.UTF8之外的任何字符编码与本地化排序规则选项。特别是` 关于字符编码的部分,之前写过一篇文章专门介绍,这里表过不提。今天专门说一下LOCALE(本地化)的配置问题。 如果说服务端字符编码配置因为某些原因配置为UTF8之外的值也许还情有可原,那么LOCALE配置为C之外的任何选就是无可救药了。因为对 …
-
PG复制标识详解(Replica Identity)
2021年03月03日 in PG 管理
引子:土法逻辑复制 复制身份的概念,服务于 逻辑复制。 逻辑复制的基本工作原理是,将逻辑发布相关表上对行的增删改事件解码,复制到逻辑订阅者上执行。 逻辑复制的工作方式有点类似于行级触发器,在事务执行后对变更的元组逐行触发。 假设您需要自己通过触发器实现逻辑复制,将一章表A上的变更复制到另一张表B中。通常情况下,这个触发器的函数逻辑通常会长这样: -- 通知触发器 CREATE OR REPLACE FUNCTION replicate_change() RETURNS TRIGGER AS $$ …
-
PostgreSQL 逻辑复制详解
2021年03月03日 in PG 管理
逻辑复制 逻辑复制(Logical Replication),是一种根据数据对象的 复制标识(Replica Identity)(通常是主键)复制数据对象及其变化的方法。 逻辑复制 这个术语与 物理复制相对应,物理复制使用精确的块地址与逐字节复制,而逻辑复制则允许对复制过程进行精细的控制。 逻辑复制基于 发布(Publication) 与 订阅(Subscription)模型: 一个 发布者(Publisher) 上可以有多个发布,一个 订阅者(Subscriber) 上可以有多个 订阅 。 …
-
PG慢查询诊断方法论
2021年02月23日 in PG 管理
You can’t optimize what you can’t measure 慢查询是在线业务数据库的大敌,如何诊断定位慢查询是DBA的必修课题。 本文介绍了使用监控系统 —— Pigsty诊断慢查询的一般方法论。 慢查询:危害 对于实际服务于在线业务事务处理的PostgreSQL数据库而言,慢查询的危害包括: 慢查询挤占数据库连接,导致普通查询无连接可用,堆积并导致数据库雪崩。 慢查询长时间锁住了主库已经清理掉的旧版本元组,导致流复制重放进程锁死,导致主从复制延 …
-
故障档案:时间回溯导致的Patroni故障
2021年02月22日 in PG 管理
摘要:机器因为故障重启,NTP服务在PG启动后修复了PG的时间,导致 Patroni 无法启动。 Patroni中的故障信息如下所示: Process %s is not postmaster, too much difference between PID file start time %s and process start time %s patroni 进程启动时间和pid时间不一致。就会认为:postgres is not running。 两个时间相差超过30秒。patroni 就 …
-
黄金监控指标:错误延迟吞吐饱和
2020年11月06日 in PG 管理
前言 玩数据库和玩车有一个共通之处,就是都需要经常看仪表盘。 盯着仪表盘干什么,看指标。为什么看指标,掌握当前运行状态才能有效施加控制。 车有很多指标:车速,胎压,扭矩,刹车片磨损,各种温度,等等等等,各式各样。 但人的注意力空间有限,仪表盘也就那么大, 所以,指标可以分两类: 你会去看的:黄金指标 / 关键指标 / 核心指标 你不会看的:黑匣子指标 / 冷指标。 黄金指标就是那几个关键性的核心数据,需要时刻保持关注(或者让自动驾驶系统/报警系统替你时刻保持关注),而冷指标通常只有故障排查时才 …
-
数据库集群管理概念与实体命名规范
2020年06月03日 in PG 管理
名之则可言也,言之则可行也。 概念及其命名是非常重要的东西,命名风格体现了工程师对系统架构的认知。定义不清的概念将导致沟通困惑,随意设定的名称将产生意想不到的额外负担。因此需要审慎地设计。 TL;DR **集群(Cluster)**是基本自治单元,由用户指定唯一标识,表达业务含义,作为顶层命名空间。 集群在硬件层面上包含一系列的节点(Node),即物理机,虚机(或Pod),可以通过IP唯一标识。 集群在软件层面上包含一系列的实例(Instance),即软件服务器,可以通过IP:Port唯一标 …