- 博客(107)
- 收藏
- 关注
原创 别再乱建联合索引了
在 PostgreSQL 的世界里,索引从来不是“有没有”的问题,而是“值不值”的问题。随着 PostgreSQL 近几个大版本(12 → 17)的持续演进,索引相关的优化逐渐从“单点能力增强”,转向“在有限资源约束下的整体效率提升”,如PG14的索引去重、PG16的多列综合评估等。虽然内核上对于多列索引的算法做了很多优化,但是其索引顺序依然会对SQL的检索性能产生较大影响。
2026-02-10 20:42:05
302
原创 PG JDBC一个奇怪的参数设计
最近开发在springt ORM框架下遇到一个以下报错信息。我做了一个复现SQL就是简单的查询,采用了预备语句的绑定变量。
2026-02-02 18:11:12
269
原创 使用Clion查看linux环境中的PG源码
因为大多数环境都是linux ,操作平台不同,部分编译的源码也会有些差异,但是直接在linux中使用vi、view等工具查看代码,太过于古老,Clion有一个远程开发模式,可以进行远程view、debug、 pid attach 等工具。对于源码观察比较方便。
2026-01-10 16:37:02
186
原创 从工行“余额归零”事件看CAP定理:当金融系统在一致性与可用性之间做出选择
属性含义举例说明一致性(C)所有节点的数据在同一时间保持一致用户在北京和上海看到的余额相同可用性(A)每个请求都能在合理时间内得到响应用户随时都能看到查询结果分区容忍性(P)系统在网络分区或节点故障时仍能工作某分行与总行断网时,其它分行仍可运行若选择C:停机或拒绝请求以保持数据正确。若选择A:继续服务但可能返回旧数据或错误值。
2025-10-31 15:31:39
1055
原创 CPU的运行模式
如果CPU处于满负载的情况下CPU MHz参数却不是满,很可能CPU被降频了。当CPU满负载的情况下,还需要看其主频是否也是满负载运行。CPU的相关运行模式和部分参数只能在物理机器上直接看,虚拟机不支持查看相关参数,以上为E7-4820信号的CPU,其支持的CPU运行模式有多种conservative userspace powersave ondemand performance。🟢 performance 固定在最高频率 始终运行在 CPU 支持的最高主频 性能优先,比如数据库服务器、游戏、编译机等。
2025-10-17 10:37:10
330
原创 CPU满了IO未达到瓶颈的一次案例分享
文章摘要:通过性能排查发现客户服务器CPU使用率过高,但IO未达瓶颈。TOP和iostat显示磁盘负载低,主要问题在于CPU执行tts_buffer_heap_getsomeattrs函数消耗67%算力。进一步检查发现CPU主频被限制在平衡模式,未达最大频率,导致元组解析效率低下。建议优化SQL或升级硬件配置。该案例展示了服务器性能排查的典型流程(CPU/内存/IO/网络),其中CPU算力不足是本次瓶颈所在。
2025-10-13 17:24:48
385
原创 查询增强插件pgfincore
postgresql使用的是双缓存结构,其是数据读取的时候,可以直接通过缓存命中返回数据,用于提高查询的效率。在PG中常见的缓存管理插件有pgfincore和pg_premarm。安装部署都比较简单。总结:pg_prewarm 更强调 主动预热,让未来访问更快;而 pgfincore 更强调 缓存状态检测与精细化控制。前者像“暖身器”,后者像“探测器+遥控器”。
2025-10-06 00:35:11
925
原创 explain analyze和直接执行SQL时间相差10倍?
摘要: 文章探讨了PostgreSQL中EXPLAIN ANALYZE与直接执行SQL存在10倍性能差异的问题。通过auto_explain模块分析发现,差异源于并行执行计划是否启用:EXPLAIN ANALYZE成功启动8个并行工作进程(Workers Launched=8),而直接执行时并行工作组未激活(Workers Launched=0),导致单线程扫描效率大幅下降。进一步排查排除了参数配置(如max_parallel_workers)的影响,推测并行工作池资源不足可能是根本原因。文中还指出并行扫描
2025-09-22 11:30:18
979
原创 源码分析unexpected EOF on client connection with an open transaction
最近在学源码,看到什么问题都想从源码角度来看问题。
2025-08-27 16:54:17
308
原创 PostgreSQL 范围、空间唯一性约束
在 PostgreSQL 中,实现数据唯一性不仅限于UNIQUE和,还可以使用EXCLUDE约束配合 GiST 索引来实现更灵活的唯一性检查。
2025-08-12 22:15:22
553
原创 postgresql增量备份系列二 pg_probackup
`pg_probackup` 是一个用于管理 PostgreSQL 数据库集群备份与恢复的实用工具,截止2.5.15版本,支持 PostgreSQL 11-16 及以上版本。它能够执行定期备份,并在故障发生时帮助恢复服务器。
2025-06-30 23:18:45
864
原创 SQL慢可能是触发了ring buffer
最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但是其同样入参在不同时间执行时间却相差甚远。进行 SQL 优化并不能对其根除,查看了一下 shared_buffers 才 12GB。
2025-06-07 20:31:48
827
原创 auto_explain插件使用
由于pg的可观测性相较而言较差,如果发生故障的情况下,不能马上保留现场,很多元数据就会丢失,无法再观测到。所以原生不够,插件来凑。auto_explain插件可以弥补了自动记录慢速语句执行计划的方法,而不必手动运行EXPLAIN。这对于跟踪大型应用程序中未优化的查询特别有帮助。
2025-05-11 18:02:35
397
原创 pgpool安装部署
Pgpool-II 是一个专门为 PostgreSQL 提供中间层功能的软件,位于 PostgreSQL 客户端与后端数据库服务器之间,提供:连接池(Connection Pooling)、负载均衡(Load Balancing)、主备切换(Failover / Watchdog)、读写分离、并行查询(Parallel Query)、复制功能(基于流复制)、自动故障转移。在安装方便,我觉得pgpool是PG高可用方案里面最复杂的一个。配置文件也是比较多,运维起来也是非常复杂。
2025-05-08 10:34:25
1199
原创 cluster、update、delete在死元组清理上的作用
postgresql 中死元组除了能被vacuum清理还能被delete\update\cluster清理
2025-04-12 14:36:10
1045
原创 postgresql+patroni+etcd高可用安装
Patroni 是一个用于管理 PostgreSQL 高可用性的开源工具。它基于 etcd、ZooKeeper 或 Consul 作为分布式一致性存储,以提供自动故障转移和集群管理功能。
2025-03-28 10:08:30
1808
原创 数据存储技术
我平时看的书比较杂,技术类、财经类、文学类偶尔都看看。最近在看了一本技术相关的书,我觉得写的不错。毕竟写书的很多,写得好的确实不多,写此文章,将电子书分享给大家,值得大家阅读。
2025-01-16 12:31:59
1090
原创 postgresql增量备份系列一
在一些大容量得数据库应用中,采用全量备份得方式,会带来大量时间浪费和开销,此时定期的增量备份可以使得数据存储周期变长。本文讲解几个增量备份工具。
2024-10-30 09:20:41
2110
2
原创 自定义函数查看OS的file cache
在OS中使用cache机制,主要为了提高磁盘的读取效率,避免高频的IO交换。将频繁访问的数据存放在file cache中,下一次在获取的时候就可以直接读取,缓存高命中率对于数据高速检索十分有利。那就数据库端,写个脚本定时查看其file cache情况import rerows = []try:else:return []return (执行函数。
2024-10-17 14:46:13
1244
原创 PG+PGBOUNCER同一端口,竟然能同时运行
今天遇到了一个非常低级的错误,psql无法访问已知的数据库当我使用psql -h 的时候,会提示报错首先postgres数据库是有的其次白名单也没有问题数据库监听也没有问题在查看服务器对外服务地址的时候,就发现了问题tcp协议的对外服务中没有postgres进程。这样就好理解了,psql 没有加h的时候是不走TCP协议的。加了h 是需要走TCP 协议的,但是却没有对应的,虽然在对外服务中你有看到tcp6 协议,那是PG默认开启时就是对所有IPv6 可以访问。
2024-10-17 14:45:37
322
原创 postgresql僵尸进程的处理思路
僵尸进程(zombie process)是指一个已经终止但仍然在进程表中保留条目的进程。正常情况下,当一个进程完成执行并退出时,操作系统会通过父进程调用的wait()或waitpid()系统调用来收集该子进程的退出状态。如果父进程未及时调用这些函数,子进程的状态信息就无法从内核中移除,导致进程在内核中以“僵尸”状态存在。此状态下的子进程,使用kill -9 就是“鞭尸”,是无法移除僵尸进程的僵尸进程的主要特点是它们不再消耗CPU或内存资源,因为其已终止,只保留一个进程号(PID)和少量的状态信息。
2024-10-01 15:20:43
425
原创 postgresql僵尸进程的处理思路
僵尸进程(zombie process)是指一个已经终止但仍然在进程表中保留条目的进程。正常情况下,当一个进程完成执行并退出时,操作系统会通过父进程调用的wait()或waitpid()系统调用来收集该子进程的退出状态。如果父进程未及时调用这些函数,子进程的状态信息就无法从内核中移除,导致进程在内核中以“僵尸”状态存在。此状态下的子进程,使用kill -9 就是“鞭尸”,是无法移除僵尸进程的僵尸进程的主要特点是它们不再消耗CPU或内存资源,因为其已终止,只保留一个进程号(PID)和少量的状态信息。
2024-10-01 11:49:33
651
原创 PG逻辑解码
在postgresql中,库级别的复制,通常使用主从复制,但是主从暂时不支持跨大版本复制,使用跨版本复制以及表级别的复制通常使用发布订阅。postgresql15在逻辑订阅上做了一些修改,对于使用者的便利性更高。
2024-09-01 15:55:24
888
原创 PG中逻辑订阅的秘密
在postgresql中,库级别的复制,通常使用主从复制,但是主从暂时不支持跨大版本复制,使用跨版本复制以及表级别的复制通常使用发布订阅。postgresql15在逻辑订阅上做了一些修改,对于使用者的便利性更高。
2024-08-13 00:04:20
1106
原创 去O化神器 Exbase
随着去O化进程推动,很多旧业务依赖的oracle数据库,都需要实现做数据库的替换,当下能很好兼容Oracle,并实现异构数据库之间转换的工具并不多。这里给大家推荐一个商业工具数据库迁移工具exbase(北京海量),支持oracle迁移pg。博主感觉是一个相对比较好用的工具,支持数据库全量迁移、数据效验、实时增量同步。其增量同步支持正向和反向的增量同步是一大特性。
2024-07-07 22:51:51
1264
原创 介绍两个压测工具pgbench\sysbench,可视化监控工具NMON
写篇文章对数据库、OS性能的性能评估,需要选择合适的压测工具,给找出数据库的运行瓶颈。
2024-06-30 19:45:19
1835
原创 postgresql中写python去读取HDFS数据,像表一样使用。
首先postgresql是支持python的,在安装postgresql数据库的时候需要执行python支持。可以使用python进行写fundcation 自然也就可以自定义funcation去读取HDFS文件,以此替换掉hive的,省去中间频繁切换服务器的麻烦。
2024-05-11 17:09:01
541
原创 postgresql中控制符带来的数据错觉
在数据库字符集中,由于数据质量的控制不够完善,每一个字符集都并不是所有字符的能看见,有些字符的展示可能会出现乱码,甚至出现不同字符展示成同样效果的可能,给开发人员造成分析错觉。当数据库存入了控制符,类似制表符,展示的效果竟然和空格效果一样,而且还无法trim掉,对于开发人员可能会带来视觉错觉。Seq十进十六进缩写字符名00x00NULNull (空)^A10x01SOHStart of Heading (报头开始)^B20x02STX。
2024-05-09 17:43:49
517
原创 OOM就一定要启用swap?
在技术群中到,看到有人数据库OOM了,DBA没有去排查高占用的进程,而是去排查为什么swap没有生效,我觉得很有意思。为此我查阅了一些资料,先给大家讲讲swap的作用是什么”
2024-04-18 21:23:47
1163
1
原创 hive了解系列一
查询延迟高:每一次启动脚本,hive都会去调用mapdurce导致其启动时间长。复杂查询性能有限:对于一些复杂场景(如:行列转换、递归查询等)。数据更新和事务性操作不佳:不支持update、delete语句。ACID:hive不是一个ACID模型数据库工具,不支持事务处理。
2024-04-15 11:56:45
919
原创 多进程数据库不适合作为hive的元数据库
今天发现一个比较奇怪的现象,因为博主不熟悉mysql,所以在安装hive的使用了postgresql作为hive的元数据库,在测试几个连接工具对hive进行链接,后面再测试的时候发现链接不上了,并且报错日志如下:”null大概意思就是我JVM的资源不足了,内存溢出了这个就很奇怪, 我就测试了几个数据库链接工具,还没上强度,也没上job,怎么就内存溢出了呢?我查看了一下进程(看看是什么事务占用了资源),吓我一跳。
2024-03-17 13:27:18
817
原创 hive中spark SQL做算子引擎,PG作为MetaDatabase
hive架构原理1.客户端可以采用jdbc的方式访问hive2.客户端将编写好的HQL语句提交,经过SQL解析器,编译器,优化器,执行器执行任务。hive的存算都依赖于hadoop框架,所依赖的真实数据存放在hdfs中,解析好的mapreduce程序,提交给yarn。3.另外hive框架自带一个名为debay的数据库,其作用是用来记录hdfs上数据的存放位置,也就是说,在客户端提交任务之后,hive优先会去数据库中查询所需要数据在hdfs上面的路径信息,然后在拿着路径信息再去hdfs寻找数据。
2024-03-03 15:42:18
1110
原创 SparkStreaming在实时处理的两个场景示例
Spark Streaming是Apache Spark生态系统中的一个组件,用于实时流式数据处理。它提供了类似于Spark的API,使开发者可以使用相似的编程模型来处理实时数据流。Spark Streaming的工作原理是将连续的数据流划分成小的批次,并将每个批次作为RDD(弹性分布式数据集)来处理。这样,开发者可以使用Spark的各种高级功能,如map、reduce、join等,来进行实时数据处理。
2024-03-02 15:28:56
840
原创 hadoop ha安装
Hadoop是一个开源的分布式存储和计算框架,最初由Apache软件基金会开发。它的发展背景可以追溯到Google的MapReduce和Google File System(GFS)的论文,这两篇论文启发了Hadoop的设计。Hadoop的主要应用场景包括大数据存储、处理和分析,特别是在需要处理海量数据的互联网和企业环境中。它被广泛用于日志分析、数据挖掘、机器学习、图像处理等领域。Hadoop的生态系统还包括许多相关项目,如Hive、HBase、Spark等,为大数据处理提供了丰富的工具和技术。
2024-02-01 00:06:45
1164
原创 Kafka常见指令及监控程序介绍
kafka在流数据、IO削峰上非常有用,以下对于这款程序,做一些常见指令介绍。下文使用–bootstrap-server 10.0.0.102:9092,10.0.0.103:9092,10.0.0.104:9092需自行填写各自对应的集群IP和kafka的端口。该写法 等同。
2024-01-21 00:48:46
1591
postgresql中的patroni+etcd 集群应用
2023-10-09
pgsql多次执行后才成功
2023-01-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅