
PostgreSQL内核
文章平均质量分 87
PostgreSQL内核相关
小怪兽ysl
云和恩墨PG技术顾问,PG ACE,中国开源软件推进联盟PG分会系列技术丛书《快速掌握PostgreSQL版本新特性》副主编,中国PG分会认证讲师、恩墨学院PG讲师,PGfans年度MVP,拥有PGCM,MYSQL(OCP8.0), OBCP,OGCA等十多项数据库认证。PG中文社区分享过《PG逻辑复制槽与故障转移》《PostgreSQL15版本新特性解读》PG中国技术大会活动嘉宾。LFAPAC开源布道者,Linux基金会Research Localization伙伴。曾参与《深入理解开源项目办公室》《软件材料清单(SBOM)与网络安全准备度》官方中文版翻译
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【PostgreSQL17新特性之-新增系统视图】
PostgreSQL-17-beta1版本目前已经发布了,每个版本随着功能的增加和一些相关优化,会对部分视图进行调整,以及增加新的视图。目前的PostgreSQL-17-beta1新版本新增了两个视图,分别为pg_wait_events和pg_stat_checkpointer。pg_stat_checkpointer视图包含检查点信息,pg_wait_events 主要包含等待事件的描述。原创 2024-05-29 18:17:36 · 1813 阅读 · 0 评论 -
【PostgreSQL的变长字段数据超过多少会写入到TOSAST表】
通常PostgreSQL里如果一个元祖的变长字段的数据量,超过2KB,则PostgreSQL会尝试进行压缩,把元组控制在2KB之内,如果不能满足2KB之内的需求,就需要独立的toast表来存储了。原创 2024-03-11 08:55:52 · 645 阅读 · 0 评论 -
【PostgreSQL采用MD5密码认证时密码和pg_authid里rolpassword的关系】
通过上述测试可以发现,pg_authid系统表里的rolpassword字段的MD5码 ="md5"字符串+ md5(pwd+username)),MD5在理论上是几乎无法破解的,虽然不能反向解析,但是如果获取到了这个MD5处理后的字符串,可以通过撞库方式获取MD5算法处理前的字符,用预先计算好的MD5散列值与已知的散列值进行比较,以查找匹配的明文,从而获取到用户名和密码。但是这种方法需要预先有一定的可能的明文和计算MD5散列值的能力。原创 2024-01-23 13:54:44 · 1907 阅读 · 0 评论 -
【PostgreSQL在线创建索引(CIC)功能的锁分析以及使用注意】
前一篇文章提到了普通创建索引会阻塞DML操作而PostgreSQL里可以使用create index concurrently 在线创建索引(CIC)功能,降低创建索引在表上申请的锁的级别,ShareUpdateExclusiveLock级别的锁和RowExclusiveLock不冲突,不会阻塞表上的DML操作。原创 2024-01-08 09:53:20 · 1657 阅读 · 0 评论 -
【使用perf和火焰图分析PostgreSQL数据库的性能瓶颈】
Perf工具可用来对软件进行优化,包括算法优化(空间复杂度、时间复杂度)和代码优化(提高执行速度、减少内存占用)等等,perf 最常用的参数有top、stat、record,另外还有list和report等。本文主要使用Perf的record,script以及FlameGraph工具生成火焰图,来进一步分析性能瓶颈和函数调用。原创 2023-08-24 22:19:11 · 996 阅读 · 0 评论 -
【PostgreSQL的CLOG解析】
clog,即 commit log,PostgreSQL10之前放在数据库目录的pg_clog下面。PostgreSQL10之后修更名为xact,数据目录变更为pg_xact下面,表现形式是一些物理文件。PostgreSQL为什么要使用clog呢,众所周知,PostgreSQL有着独特的MVCC机制,由于其多版本的特性,原创 2023-08-14 11:21:42 · 2592 阅读 · 0 评论 -
【PostgreSQL-16新特性之普通用户的保留连接个数(reserved_connections)】
PostgreSQL数据库为了保证在高并发,高连接数情况下某些用户能够正常连接到数据库里,设立了几个用户连接的保留个数。本文介绍了PostgreSQL16版本前为超级用户保留的连接数(superuser_reserved_connections)以及PostgreSQL16版本新增的为普通用户的保留的连接数(reserved_connections)。原创 2023-06-26 14:08:28 · 3043 阅读 · 0 评论 -
【关于PostgreSQL的系统信息函数的OID】
这个时候使用这个脚本是很方便的,官方推荐的范围是8000到9999,如果增加的补丁占用的OID相互冲突了,那么可能就会产生相关问题,此时另一个脚本duplicate_oids的意义也就出现了。此篇虽然是修改了已经内置的函数的OID,但是同样的,想创建新内置函数的时候,声明并定义新增函数后,也可以用这个方式给函数分配对应的OID。而我们查询原本数据库里的pg_backend_pid 函数,其对应的OID为2026 ,我们接下来对此系统内置函数的OID进行修改。重新编译,并且initdb到一个新的路径。原创 2023-01-31 10:42:32 · 1190 阅读 · 0 评论 -
【PostgreSQL的“double buffers“刷脏机制和参数】
PostgreSQL数据库使用双缓存写数据,shared_buffer + OS page cache,下图是PG与OS内存交互的过程 ,在PostgreSQL中,shared_buffers所代表的内存区域可以看成是一个以8KB的block为单位的数组,即最小的分配单位是8KB。这正好是一个page的大小,每个page以page内部的元数据(Page Header)互相区分。原创 2022-12-16 17:46:01 · 1947 阅读 · 0 评论 -
【PostgreSQL的wal_buffers】
wal buffer是预写日志(wal)缓冲区。原创 2022-12-12 14:55:24 · 2301 阅读 · 0 评论 -
【PostgreSQL-14版本snapshot的几点优化】
最近在分析PostgreSQL-14版本性能提升的时候,关注到了Snapshots的这一部分。发现在PostgreSQL-14版本,连续合入了好几个和Snapshots相关的patch。并且,Andres Freund也通过这些改进显著减少了已确定的快照可扩展性瓶颈,从而改进了Postgres处理大量连接的问题,因为在连接数很高时计算一个快照的代价是很昂贵的。(对于分析连接可扩展性的局限性可以参考Andres Freund的这篇文章)原创 2022-11-17 11:53:01 · 614 阅读 · 0 评论 -
【PostgreSQL的shared_buffers和系统OS cache的关系】
在使用PostgreSQL要设置shared_buffers的大小的时候,我们通常的建议值是操作系统内存的25%,过大或者过小的值都会影响数据库的性能。此时我们有时候会产生一个疑问,为什么类似的参数,ORACLE和MYSQL都分配了操作系统大部分内存,例如ORACLE的sga通常设置为物理内存的80%,或者MySQL的innodb_buffer_pool_size 通常也设置为80%,而PostgreSQL的shared_buffers确设置的比例这么小呢。原创 2022-10-21 17:10:40 · 1696 阅读 · 0 评论 -
【PostgreSQL数据目录下的postmaster.pid详解】
在src/backend/postmaster/postmaster.c的PostmasterMain()函数里调用了一个CreateDataDirLockFile()函数,函数里包含的DIRECTORY_LOCK_FILE其实就是"postmaster.pid “这个文件。在我们启动PostgreSQL数据库的时候,偶尔会遇到如下的打印信息,它提示我们锁文件 “postmaster.pid"存在,并让我们检查是否以”/opt/ysl_pg14/data"为数据目录的已经启动了postmaster进程。原创 2022-10-15 22:37:27 · 2455 阅读 · 0 评论 -
【PostgreSQL复制槽相关机制在各版本调整】
因此在严格意义上讲,并不能算复制槽的故障转移,而是在所有的节点上都维护一个相同的复制槽。在PostgreSQL源码的src/backend/replication/slot.c里,通过ReplicationSlotsComputeRequiredLSN()函数我们能清晰得看到,它计算了所有槽位的最老的restart_lsn,并通知xlog模块,把最老的restart_lsn的值赋给了min_required变量,也就是把这个LSN作为数据库保留的最小得LSN,即作为数据库还需要的最小的LSN。原创 2022-10-12 15:02:15 · 1467 阅读 · 0 评论 -
【从Oracle的SQL_ID到PG14引入内核的QUERY_ID】
对于习惯了ORACLE运维的DBA们,在进行SQL优化以及问题排查的时候,不可避免地会用到SQL_ID,从ORACLE到PostgreSQL过渡的时候,可能在分析问题的时候第一反应可能还是想获取到对应SQL的SQL_ID,然后根据SQL_ID去获取执行计划从而进行分析。而PostgreSQL与ORACLE类似的SQL_ID功能,是PostgreSQL-14版本从pg_stat_statements插件的QUERY_ID计算模块剥离到内核中, 使得内部可以直接使用query_id功能。原创 2022-10-12 15:00:59 · 480 阅读 · 0 评论