PostgreSQL
文章平均质量分 85
PostgreSQL
Hehuyi_In
这个作者很懒,什么都没留下…
展开
-
PG fast模式停库 在归档过慢及有发送延迟 会被阻塞
尝试停库时遇到的两个现象:当archiver process仍有.ready文件待处理时,执行fast模式执行stop时,必须等其处理完当walsender进程仍有wal日志未发送至从库时,必须等其发送完转载 2024-02-12 21:30:12 · 1195 阅读 · 0 评论 -
postgresql 手动清理wal日志的101个坑
新年的第一天,总结下去年遇到的关于WAL日志清理的101个坑,以及如何相对安全地进行清理。前面是关于WAL日志堆积的原因分析,清理相关可以直接看第三部分。原创 2024-02-10 23:12:42 · 3763 阅读 · 2 评论 -
由PG序列监控,看三种列自增方式
PG SEQUENCE、SERIAL 和 IDENTITY的相似和不同原创 2024-03-09 12:19:23 · 2675 阅读 · 1 评论 -
会长期锁表吗?PostgreSQL add column default 在各版本的优化
pg如何处理新增列的默认值,与Oracle有何区别原创 2023-12-01 19:42:20 · 2651 阅读 · 1 评论 -
PostgreSQL日志中的SQL记录时机 —— log_statement 和 log_min_duration_statement
log_statement 和 log_min_duration_statement 的作用及注意事项、源码学习原创 2023-11-28 21:05:11 · 4196 阅读 · 1 评论 -
PostgreSQL create or replace view和重建视图 有什么区别?
遇到开发提了个问题,create or replace view和重建视图(drop+create)有什么区别,查询资料整理了一下。replace后不影响权限和依赖于该视图的对象。来看看replace操作到底在干些啥 ˇˍˇ。原创 2023-11-22 19:51:54 · 2678 阅读 · 0 评论 -
pgbackrest归档目录满,清理后写入仍报错,分析及处理
pgbackrest配置的归档目录/backup被写满,清理后归档仍报错 No space left on device原创 2023-10-17 15:26:17 · 2021 阅读 · 0 评论 -
pg ash自制版 —— pg_active_session_history
由于pgsentinel插件存在严重的内存占用问题,本篇改为自行实现,但其语句仍可以参考pgsentinel插件。v1.0 根据pg 14版本设计及测试,仅支持收集主库信息。默认每10秒收集一次 active与idle in transaction 状态会话信息,保留两个月。参考 pgsentinel插件的pg_active_session_history视图及pg pg_stat_activity视图,根据不同版本,其中部分字段的值可能为空。列名数据类型字段含义。原创 2023-10-15 13:06:08 · 3015 阅读 · 0 评论 -
PostgreSQL ash —— pgsentinel插件 学习与踩坑记录
众所周知,pg是没有像oracle那样的ash视图的,因此要回溯历史问题不太方便。pgsentinel插件会将pg_stat_activity与pg_stat_statements视图内容定期快照,并存入pg_active_session_history和pg_stat_statements_history视图中。与对应版本的pg_stat_statements视图字段含义相同。也可以直接在postgresql.conf中修改。若未配置,查询会报错。原创 2023-10-05 00:41:38 · 2802 阅读 · 1 评论 -
PostgreSQL unloged表测试及记录
不写WAL日志,因此性能优于普通表从库查询unloged表会报错非crash安全:数据库crash或以immediate方式关闭,unloged表数据会被自动清空原创 2023-09-14 19:56:09 · 2555 阅读 · 1 评论 -
记一次前端页面加载方式调整导致的数据库连接数暴增
前端代码也会导致数据库问题?原创 2023-09-04 21:10:45 · 1452 阅读 · 1 评论 -
定位postgresql中疯狂执行DML的表&原理学习
定位一段时间内DML量最大的表,并稍微改动监控每天表变化量。另外,也通过源码学习学习相关字段究竟是从何获取的。原创 2023-08-15 21:41:51 · 2157 阅读 · 1 评论 -
记一次空间告警与pg_rman keep-data-days参数研究
keep-data-days参数明明只设置了1,为什么本地会出现3份备份(保留了3天的备份)?原创 2023-08-09 22:39:13 · 2126 阅读 · 0 评论 -
pg_archivecleanup清理wal日志
pg_archivecleanup代码中仅进行了wal日志文件名的对比,没有实现对WAL日志名及对应生成时间的判断。在WAL日志未被重命名时,时间与日志名顺序名一致,没有问题。一旦WAL日志被重命名,pg_archivecleanup清理就可能清理掉比指定文件更新的WAL日志。因此,在涉及主从尤其是有lag的情况下,非必要不建议使用。真正到了必要的时刻,例如剩余磁盘空间已不足10%甚至5%,必须先检查从库所需日志与待清理日志间的新旧。原创 2023-07-26 21:21:32 · 3022 阅读 · 1 评论 -
postgresql源码学习(57)—— pg中的四种动态库加载方法
pg中四种动态库加载方法及源码学习原创 2023-06-24 12:57:52 · 2950 阅读 · 0 评论 -
postgresql源码学习(55)—— 列中的NULL值是如何存储和判断的?
在pg元组头数据中,有一个t_bits数组,用于存储空值位图。当元组中没有null值的时候,t_bits可以被认为是空的,当元组有null值的列时,t_bits使用一个bit来表示列是否为null。可以看到,表中已删除列会被视为空列。当表中有许多列时,删除列将为每条记录生成额外的t_bit,这将导致存储膨胀。100000,注意实际存储的时候值是颠倒的,所以是000001。为了看t_bits数组更清晰,我们加多几列。10000,颠倒后为00001。,所以第一列非空,与实际一致。判断字段是否为空代码在。原创 2023-05-13 21:53:04 · 3409 阅读 · 1 评论 -
PostgreSQL WAL产生量、发送速度、应用速度监控脚本
PostgreSQL WAL产生量、发送速度、应用速度监控脚本原创 2023-04-24 20:43:24 · 2189 阅读 · 1 评论 -
Linux 内存回收,思维导图记录
最近天天跟内存斗智斗勇,整理下学习的记录。原创 2023-04-09 12:03:25 · 2680 阅读 · 1 评论 -
PostgreSQL定位函数中最耗时的SQL(2)—— plProfiler插件图形化展示耗时语句
plProfiler插件使用C和python语言共同开发,可以收集PL/pgSQL语言(不支持SQL语言)的函数和存储过程的profile信息,并生成html报表。报表以火焰图形式展示函数调用堆栈、耗时占比,还可以查看函数中每个SQL的位置、执行次数、最长执行时间、总时间,清晰明了。由于依赖于python环境,安装、排错较复杂,对python小白不友好。同时,它也并非旁路监控,必须要手动执行对应函数。原创 2023-04-05 23:57:51 · 2271 阅读 · 1 评论 -
从无法创建的索引看 PostgreSQL的create index concurrently(CIC)过程
CREATE INDEX CONCURRENTLY (CIC)大概是DBA们最常用的语句之一,创建索引时只加4级锁,不阻塞DML。听上去非常美好,但在大事务、长事务较多的系统,可能被阻塞得一个中午也建不上一个索引。本篇就从这个无法创建的索引开始,学习CIC的过程、原理以及注意事项。原创 2023-04-04 22:53:31 · 3213 阅读 · 0 评论 -
PostgreSQL定位函数中最耗时的SQL
开发反馈pg中某函数执行时间很长,超过30分钟,想看看慢在其中哪一段SQL。但是如果直接通过pg_stat_activity查询,只能看到上层执行函数的语句,而不像oracle和SqlServer能看到当前在执行什么。咨询群友们得到了几种方法,下面测试和对比一下。执行函数查看运行情况。原创 2023-03-12 22:49:35 · 2879 阅读 · 1 评论 -
PostgreSQL 通过 tds_fdw 访问 SQL Server数据,常见报错分析及处理
PostgreSQL 通过 tds_fdw 访问 SQL Server数据,常见报错分析及处理原创 2023-02-07 17:08:08 · 4802 阅读 · 2 评论 -
《PostgreSQL面试题集锦》学习与回答
《PostgreSQL面试题集锦》学习与回答原创 2023-02-04 21:28:53 · 8886 阅读 · 1 评论 -
postgresql源码学习(54)—— HotStandby从库必须设置大于等于主库的参数
HotStandby从库必须设置大于等于主库的参数原创 2023-01-28 11:38:44 · 1883 阅读 · 2 评论 -
postgresql 14新特性整理
如果设置了compute_query_id参数,将在pg_stat_activity, EXPLAIN VERBOSE, csvlog, log_line_prefix中展示查询id。新增idle_session_timeout参数关闭空闲连接,跟idle_in_transaction_session_timeout的区别是会话不需要开启事务,只判断空闲超时。和 pg_write_all_data,授予 所有 tables, views, sequences的读、写权限。新增了OR REPLACE 选项。翻译 2023-01-24 21:58:52 · 4072 阅读 · 1 评论 -
postgresql源码学习(53)—— vacuum②-lazy vacuum之heap_vacuum_rel函数
lazy vacuum之table_relation_vacuum函数与heap_vacuum_rel函数原创 2023-01-23 21:54:17 · 1749 阅读 · 0 评论 -
postgresql源码学习(52)—— vacuum①-准备工作与主要流程
关于vacuum的基础知识,参考,本篇从源码层继续学习vacuum相关操作在vacuum.c中,当手动执行vacuum及analyze命令,其主入口为ExecVacuum()函数——主要负责为真正执行操作的vacuum()函数做一系列准备工作(语句解析、选项设置与检查、测试设置等),核心是调用vacuum()函数。原创 2023-01-22 17:26:47 · 2637 阅读 · 0 评论 -
postgresql FDW概念、用法与原理小结
FDW (foreign-data wrapper,外部数据包装器),可以让我们在PG中使用SQL查询极为丰富的外部数据原创 2023-01-19 19:09:58 · 10266 阅读 · 0 评论 -
postgresql_internals-14 学习笔记(五)Buffer Cache
调和内存(ns级)与磁盘(ms级)间的速度差异。pg不仅用自己的,也用os cache,所以它使用了“双缓存”,这也是很多文档推荐shared_buffer参数只设为内存25%(通常不超过16G)的原因。原创 2023-01-01 12:23:08 · 2242 阅读 · 0 评论 -
将postgresql配置为Linux服务管理 systemctl service
发行版安装的数据库在装完后会自动添加数据库服务,但编译安装的不会,需要手动添加。如果后面修改了postgresql文件,需要reload。加执行权限 chmod +x postgresql。通过下面的命令添加到服务中。相应的,可通过下述命令删除。PGCE课程《服务管理》原创 2022-12-17 23:02:13 · 1988 阅读 · 1 评论 -
postgresql_internals-14 学习笔记(四)TOAST 超尺寸字段存储技术
pg中的每个行只能存在一个page里,不能跨page存储。因此对于一些非常长的行,就需要使用到TOAST(The OverSized Attribute Storage Technique,超尺寸字段存储技术)将大字段值压缩或者拆分为多行到单独表存储。对于用户来说,这是完全透明的。原创 2022-12-17 21:05:04 · 2114 阅读 · 0 评论 -
postgresql_internals-14 学习笔记(三)冻结、rebuild
autovacuum_freeze_max_age参数值也会影响CLOG,因为没有必要记录已冻结事务的状态,小于datfrozenxid的事务对应的CLOG将会被autovacuum删除。(0,2) xmin_age=2,被冻结;忽略autovacuum_vacuum_cost_delay 和vacuum_cost_delay参数,跳过索引vacuum,以最快速度完成冻结操作。如上面实验,vacuum_freeze_min_age会考虑vm文件,如果这些页一直可见,其中元组事务id就一直不会被冻结。原创 2022-12-13 23:42:04 · 2408 阅读 · 1 评论 -
postgresql_internals-14 学习笔记(二)常规vacuum
page pruning执行速度很快,但它们的作用范围毕竟只有单页、且不包含索引,因此,我们还需要更有效的清理机制。常规vacuum是最常用的一种,作用范围可以是整张表,清理过期元组及索引项,并且不阻塞读和写。为提高效率,vacuum会结合前面提到的.vm文件,跳过不需清理的页。清理之后,还会更新前面提到的fsm(空闲空间映射)文件。另外还可以用vacuum analyze顺便收集统计信息。原创 2022-12-11 22:02:20 · 2983 阅读 · 0 评论 -
postgresql_internals-14 学习笔记(一)
梳理一下之前理解不太清楚的知识点,重点内容可能会再拆出来单独研究。原书链接:Index of /命名空间,在逻辑上相当于DB中的一个目录。pg自带以下schema: search_path变量用于设置搜索路径,pg_catalog和pg_temp 这两个schema总是包含在其中(因此所有库中都能查到系统表和临时表),但默认不显示。未完待续...原创 2022-12-05 18:47:24 · 2035 阅读 · 0 评论 -
postgresql源码学习(51)—— 提交日志CLOG 原理 用途 管理函数
提交日志CLOG 原理 用途 管理函数原创 2022-11-30 15:11:19 · 1681 阅读 · 0 评论 -
postgresql源码学习(50)—— 小白学习Dtrace追踪源码函数调用
业务任意执行的一条语句、出现了某些怪异的现象,如何能知道它究竟调用了pg中的哪些函数?而哪些函数是不符合我们预期的?Dtrace就能解决这个问题。原创 2022-11-26 16:39:25 · 1963 阅读 · 3 评论 -
postgresql源码学习(49)—— MVCC⑤-cmin与cmax 同事务内的可见性判断
cmin与cmax 同事务内的可见性判断原创 2022-11-20 23:02:23 · 1380 阅读 · 0 评论 -
postgresql源码学习(48)—— 流复制冲突(备库锁阻塞与Vacuum冲突)
当hot_standby参数设置为on时,备库可以支持读操作。但有时你会发现,查询执行着突然遇到 terminating connection due to conflict with recovery 报错,这就是所谓的流复制冲突。原创 2022-10-23 22:08:18 · 2505 阅读 · 0 评论 -
postgresql源码学习(十九)—— MVCC④-可见性判断 HeapTupleSatisfiesMVCC函数
回顾一下前面提到的SNAPSHOT_MVCC类型快照的可见性判断条件:原创 2022-10-16 11:08:06 · 1784 阅读 · 3 评论 -
postgresql源码学习(47)—— PostmasterMain(4) 启动数据库与主循环
以下代码也在postmaster.c文件中,可以看到这个函数其实就是启动了StartupProcess进程。|->BackendStartup() ConnFree() ConnCreate()原创 2022-10-08 21:44:40 · 1547 阅读 · 0 评论