04 2022 档案
摘要:一、简介 PostgreSQL自带了pgstattuple模块,可用于精确计算表的膨胀率。譬如这里的tuple_percent字段就是元组实际字节占关系总大小的百分比,用1减去该值即为膨胀率。 二、示例一 #插入1000W数据 postgres=# insert into t select id,i
阅读全文
摘要:PostgreSQL运行日志可以实现日志输出记录,默认是没有启动记录。这个日志一般是记录服务器与DB的状态,比如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息,诸如此类。 一、常用日志参数 项目默认值设定值说明 logging_collect
阅读全文
摘要:一、示例 select 8/(100-3) as c1, round(8/(100-3) ,4) as c2, round(8/(100-3)::numeric ,4) as c3, 8/(100-3)::numeric as c4 ; -[ RECORD 1 ] c1 | 0 c2 | 0.000
阅读全文
摘要:一、具体方法 一般情况下直接执行 drop role xxx; 就可以把这个用户删除。但是很多时候会因为用户有依赖而报错。 二、权限依赖 postgres=# create role test with login; CREATE ROLE postgres=# grant all on datab
阅读全文
摘要:一、示例 这两个SQL执行所得到的数据是一样的! select count(s.*) from ( select *, row_number() over (partition by fee_date order by fee_date) as gr from new_order where new
阅读全文
摘要:一、概述 Plan Hint是PG社区官方版”永远”不考虑引入的功能之一,社区开发者的理念是,引入Hint功能,会掩盖优化器本身的问题,导致缺陷不被暴露出来。但对于使用者来讲,遇到某些SQL的查询计划不好,性能出了问题,其他方法又不奏效的情况下,首先的目标还是想尽快解决问题,而Hint就可以在这种时
阅读全文
摘要:一、背景 在数据库的使用过程中,一些微妙的操作,在特殊的场景中就可能导致雪崩效应。 1. 当数据库中存在未提交事务,并且未提交事务已经持有了某个表的哪怕是最小的锁时,如果此时对这个对象发起DDL操作,这个DDL操作将会堵塞接下来的其他对该对象的任意操作请求,包括读请求。 因为PG的锁等待判断是整个等
阅读全文
摘要:一、日期/时间操作符 下表演示了基本算术操作符的行为(+,*, 等): 二、日期/时间函数 二、区别 select now();select CURRENT_DATE;select CURRENT_TIME;select CURRENT_TIMESTAMP;select CURRENT_TIME(p
阅读全文
摘要:一、简介 PostgreSQL中的临时表分两种,一种是会话级临时表,一种是事务级临时表。在会话级临时表中,数据可以存在于整个会话的生命周期中,在事务级临时表中的数据只能存在于事务的生命周期中。默认创建的是会话级别的临时表。 1、不管是会话级还是事务级的临时表,当会话结束后,临时表会消失,这和Orac
阅读全文
摘要:一、PG统计信息概述 pg的统计信息主要分为两种: 第一类统计信息是是负载指标“统计信息”(Monitoring stats),通过stat collector进程进行实时采集更新的负载指标,记录一些对磁盘块、表、索引相关的统计信息,SQL语句执行代价信息等。 第二类统计信息是数据分布状态描述“统计
阅读全文
摘要:一、背景 当一个进程处于等待(被堵塞)状态时,是谁干的?可以使用如下函数,快速得到捣蛋(堵塞别人)的PID。 二、案例 1、会话1 postgres=# begin; BEGIN postgres=# select * from tbl limit 1; id | c1 | c2 + + 91894
阅读全文
摘要:一、用法 create extension pg_backtrace; select pg_backtrace_init(); 二、示例 postgres=# select count(*)/0.0 from pg_class; ERROR: division by zero CONTEXT: po
阅读全文
摘要:一、优化器并行计算的并行度计算方法 1、总worker进程数 postgres=# show ; max_worker_processes 128 (1 row) 2、所有会话,在同一时刻的QUERY,并行计算最大允许开启的WORKER数。 max_parallel_workers 3、单条QUER
阅读全文
摘要:一、简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型。 在Postgresql中可以使用dynamic_shared_memory_type参数指定共享内存类型。 默认使用posix,修改参数
阅读全文