23 深入专题:运维、部署与参数调优
常用运维操作、部署要点与关键参数的调优思路。
PostgreSQL 14 的 GROUP BY DISTINCT 是什么?
GROUP BY DISTINCT 用于对 grouping sets、cube、rollup 构造出的分组结果去重。当分组集合里不同分组维度组合产生了重复分组(例如 CUBE(a,b) 里某些组合重复),GROUP BY DISTINCT 会消除重复的分组行。它遵循 SQL 标准,让多维度聚合的结果更干净,避免重复分组行导致的统计错误。
PostgreSQL 14 的 SQL 标准函数体(SQL-standard function body)是什么?
PG14 支持 SQL 标准函数体,允许用纯 SQL 语法定义函数,例如 CREATE FUNCTION … RETURN expr 或 BEGIN ATOMIC … END,替代传统用 $$ … $$ LANGUAGE sql 包裹字符串的方式。标准函数体在创建时即被解析,语法错误能提前暴露,且函数体更清晰、可被工具更好地分析。这提升了函数定义的可读性和可维护性。
PostgreSQL 14 的 jsonb 下标语法和原子操作是什么?
PG14 起 jsonb 支持下标语法(jsonb->‘a’-»‘b’ 之外的 jsonb[‘a’] 形式)和 set 原子操作,类似数组下标赋值,例如 UPDATE 里 jsonb[‘key’] = value 直接修改指定 key,或 jsonb[‘key’] = null 删除。这改变了此前更新 jsonb 必须整体重写(jsonb_set)的方式,让 JSON 字段支持更自然的原地更新,也便于配合部分更新优化。
PostgreSQL 15 的 JSON_TABLE 和 JSON 构造器是什么?
JSON_TABLE 是 SQL/JSON 标准里把 JSON 文档转成关系表(行集)的函数,在 FROM 子句里用 jsonpath 抽取字段映射为列,让 JSON 数据可以直接参与关系查询。JSON 构造器(JSON_OBJECT、JSON_ARRAY、JSON_ARRAYAGG、JSON_OBJECTAGG 等)用于从关系数据生成 JSON。PG15 全面增强了这两类能力,形成「关系→JSON(构造)」和「JSON→关系(JSON_TABLE)」的完整闭环,是 JSON 与关系模型互操作的关键。
PostgreSQL 15 的 UNIQUE NULLS NOT DISTINCT 是什么?
PG15 起 UNIQUE 约束支持 NULLS [NOT] DISTINCT 选项。默认(NULLS DISTINCT)下多个 NULL 互不相等,可同时存在多行 NULL;UNIQUE NULLS NOT DISTINCT 则把 NULL 视作相等的值,只允许一行 NULL。这解决了历史上唯一约束无法阻止重复 NULL 的问题,适合“业务上 NULL 也应有唯一性”的场景。
PostgreSQL 15 的 security invoker views 是什么,解决什么问题?
普通视图默认以 security definer 语义运行还是以 owner 权限运行易混淆,security invoker view(PG15)让视图按调用者(invoker)的权限访问基表,而不是视图定义者的权限。这更符合最小权限原则:用户通过视图查询时,只受自己拥有的基表权限约束,视图不会成为绕过权限检查的后门。适合多租户、需要精细控制基表访问权限的场景。
PostgreSQL 内置连接池(PRO build-in pool)和 pgbouncer 有何区别?
PostgreSQL PRO 版内置连接池(build-in pool),把池化能力做进数据库内部,客户端连接后由 PG 内部复用后端进程,省去独立中间件。pgbouncer 是外部连接池,需单独部署。内置池的优点是架构简单、少一跳网络,但功能可能不如 pgbouncer 丰富;pgbouncer 独立部署、可横向扩展、生态成熟。选型看是否需要中间件和功能深度。
PostgreSQL 在 ZFS 上的调优要点是什么?
ZFS 是 COW 文件系统,用于 PG 时注意:ZFS 的 recordsize 设置(对齐 PG 8KB 页)、关闭或调整 ZFS 的冗余 checksum(与 PG checksum 二选一避免重复)、配置 ARC 缓存大小、以及 WAL 和数据的 dataset 分离。PG12 的 wal_recycle、wal_init_zero 参数可适配 COW 文件系统减少写放大。核心是让 ZFS 特性(快照、压缩、校验)与 PG 的 WAL/checksum 机制协调。
PostgreSQL 的 CLOSE_WAIT 套接字如何快速关闭?
CLOSE_WAIT 是 TCP 状态,表示对端已关闭、本端应用未调用 close 导致连接悬挂。快速关闭需找到持有该套接字的进程并让它 close(重启进程或强制关闭 socket)。排查用 ss/netstat 找 CLOSE_WAIT 连接,定位进程,处理应用层未正确关闭连接的问题(连接泄漏)。数据库连接池若应用未归还连接也会产生大量 CLOSE_WAIT。
PostgreSQL 的 Ceph 存算分离共享存储配置是什么?
PolarDB 存算分离共享存储可用 Ceph 构建,配置 Ceph cache tier(SSD 读写缓存)+ 机械盘两层存储,SSD 做热数据缓存、机械盘做容量层。Ceph 提供分布式块存储(RBD),多节点共享访问。这实现了一写多读集群的共享存储层,用 SSD 缓存保证性能、机械盘降低成本。
PostgreSQL 的 DBA 最常用 SQL 有哪些?
DBA 常用 SQL 包括:查活动会话(pg_stat_activity)、查锁等待(pg_locks + pg_blocking_pids)、查表大小(pg_relation_size/pg_total_relation_size)、查膨胀(pg_stat_user_tables)、查索引使用(pg_stat_user_indexes)、查慢查询(pg_stat_statements)、杀会话(pg_terminate_backend)。这些是日常运维排障的核心查询,应熟记。
PostgreSQL 的 Docker 容器内 zfs / DirectIO 问题是什么?
macOS 的 Docker 容器内核是 linuxkit,不支持 zfs 等需要特定内核模块的文件系统;容器内 DirectIO 的生效取决于宿主机目录挂载方式(未用 DirectIO 挂载时,容器内用 DirectIO flag 写数据不保证真正 DIO)。多容器共享宿主机文件系统的一致性需通过 DirectIO 或共享存储保证。这些是容器化部署 PG 时文件系统层面的常见坑。
PostgreSQL 的 MERGE INTO 语法是什么,支持哪些子句?
MERGE 是 SQL 标准的 upsert 语法,PG15 引入,用 WHEN MATCHED THEN UPDATE / WHEN NOT MATCHED THEN INSERT 分支处理目标行。PG17 增强支持 RETURNING 子句和 WHEN NOT MATCHED BY SOURCE(处理源中不存在的目标行,通常 DELETE)。MERGE 相比 INSERT … ON CONFLICT 更通用,能一次表达匹配更新、不匹配插入、源缺失删除等多种动作,适合数据同步和 ETL 的增量合并场景。
PostgreSQL 的 Patroni 高可用框架是什么?
Patroni 是 PG 的高可用模板,用 DCS(etcd/consul/zookeeper)做分布式协调,通过 leader lock 决定谁是 primary,自动处理 failover、switchover、复制管理。它把 PG 与 DCS 结合,实现自动主从切换和集群管理,是 PG 高可用的主流方案(Pigsty、云 PG 都基于它)。核心是 DCS 里的 leader 租约保证任意时刻只有一个 primary。
PostgreSQL 的 Pigsty 是什么?
Pigsty 是开源的 PG 发行版和高可用部署方案,基于 Ansible 一键部署生产级 PG 集群(高可用、监控、连接池、备份集成),类似“PG 的 Kubernetes”。它整合了 Patroni(HA)、pgbouncer(连接池)、Prometheus/Grafana(监控)、pgbackrest(备份)等,是 PG 生产部署的完整方案,适合快速搭建高可用 PG。
PostgreSQL 的 PolarDB 三节点开源版部署架构是什么?
PolarDB 三节点开源版是共享存储的一写多读集群,一个主节点 + 两个只读节点共享同一存储(PolarFS/共享块设备)。主节点写,只读节点共享数据、就近读,实现存算分离和高可用。部署需配置共享存储、节点间通信、HA 组件。相比传统主从复制,共享存储的只读节点无复制延迟,读扩展更平滑。
PostgreSQL 的 SSH 长连接防断连配置是什么?
SSH 长连接防断连用 TCPKeepAlive(TCP 层心跳)、ServerAliveInterval(客户端周期发心跳)、ServerAliveCountMax(多少次无响应才断开)配置。这些参数让 SSH 连接在中间 NAT/防火墙空闲超时的情况下保持活跃,避免长时间无操作被断开。数据库远程连接(如 ssh 隧道访问 PG)也需要这些防断连配置。
PostgreSQL 的 SaaS DBaaS 设计中 schema 和 database 的优劣?
多租户隔离可用 database 或 schema 两种方式。database 隔离彻底(不同库独立 catalog、权限、连接),但资源开销大、跨库查询难、连接管理复杂;schema 共享 catalog,资源省、跨 schema 查询方便,但隔离弱(共享 catalog、易串扰)。PG 的 schema 本质是命名空间,database 才是真正隔离边界。选型:强隔离、独立计费用 database;资源共享、统一运维用 schema + 严格权限。
PostgreSQL 的 Xata DBA 智能体是什么?
Xata 是 DBA 智能体,用 AI 自动化数据库运维(诊断、优化、回答问题)。它把 DBA 的排障经验和最佳实践封装成 AI agent,让用户用自然语言解决数据库问题。这是 AI 与数据库运维融合的方向,从“人工排障”转向“智能体辅助运维”。
PostgreSQL 的 backtrace_functions 参数是什么?
backtrace_functions 是 PG13 的开发者 GUC,配置需要跟踪的 C 函数列表,当这些函数被调用时打印 backtrace。它用于源码开发调试,追踪特定函数的调用路径。配合 gdb、backtrace_on_internal_error 等工具定位内核问题。
PostgreSQL 的 bad plan 记录器是什么?
bad plan 记录器是评估优化器执行计划准确性的工具,当评估 rows 与实际 rows 相差超过配置比例时记录该查询。它帮助发现“优化器估错”的 SQL(统计信息不足、数据倾斜导致计划偏差),是性能调优的重要辅助——识别需要 ANALYZE 或调参的查询。
PostgreSQL 的 bytebase SQL 审核是什么?
bytebase 是数据库变更管理和 SQL 审核平台,把 SQL 变更纳入流程(工单、审批、执行、回滚、审计),类似“数据库的 GitOps”。它解决手工执行 SQL 缺乏审查、无回滚、无审计的问题,是 DBA 团队的 SQL 治理工具。配合 PolarDB/PG,实现 SQL 审核最佳实践。
PostgreSQL 的 catalog corruption(元数据损坏)如何检测?
catalog corruption 检测通过检查系统表(pg_class、pg_attribute 等)的一致性,发现元数据损坏。工具包括 amcheck(检查索引/页)、pg_catcheck(专门检查 catalog 一致性)、以及查询系统表交叉验证(如 pg_class 与 pg_attribute 的 OID 对应)。元数据损坏危害大(影响所有操作),需定期体检,发现后从备份恢复。
PostgreSQL 的 catalog 全局可见问题是什么(DB 吐槽大会 34 期)?
PG 的 catalog(系统表)全局可见,所有 database 共享同一个实例的 catalog(pg_database、pg_roles 等),而表数据是各库独立的。这意味着用户能看到实例级别的全局信息(所有库、所有角色),在多租户场景下信息暴露更多,隔离性不如 database 独立。这是 PG 架构特性,也是多租户设计需考虑的点。
PostgreSQL 的 debug_invalidate_system_caches_always 参数是什么?
debug_invalidate_system_caches_always 是 PG14 的调试参数,强制不使用 system catalog cache,每次都重新读系统表。它用于调试 catalog cache 相关 bug,验证代码是否依赖了错误的缓存状态。生产环境不能开启(性能极差),仅开发调试用。
PostgreSQL 的 interval 类型内部是如何存储的?
interval 内部用三个独立字段存储:月(month)、日(day)、微秒(microsecond),而非统一的秒数。这样 1 month 和 30 days 在存储上可区分,加减运算能正确处理日历语义(如 1 month + 2023-01-31 应得 2023-02-28)。但代价是不同单位的 interval 之间比较、聚合时语义复杂。interval 可转成数值用于计算,例如 EXTRACT(EPOCH FROM interval) 得到总秒数,便于做时间差计算。
PostgreSQL 的 libpq tcp_user_timeout 参数是什么?
tcp_user_timeout 是 PG12 起 libpq 的连接参数(对应 TCP_USER_TIMEOUT),控制连接异常关闭时的超时时间。当网络异常(对端不可达、链路中断)时,TCP 默认可能长时间不感知,会话一直占用。设置 tcp_user_timeout 让连接在指定时间内未收到 ACK 就关闭,会话占用时间可控,避免僵尸连接堆积。
PostgreSQL 的 long query 客户端异常断开会怎么样?
客户端执行 long query 时异常断开,服务端默认仍会继续执行完该查询(因为 PG 不实时检测客户端断开),可能浪费资源。PG14 起 check_client_connection_interval 可配置周期性检测客户端存活,检测到断开就中断查询。此外 tcp_user_timeout、keepalive 参数也能加速感知。核心是默认“查询跑完才知道断开”,需配置心跳类参数及时回收。
PostgreSQL 的 neon 存算分离 serverless 是什么?
neon 是开源 AWS Aurora 风格的 PG,存算分离、serverless、Rust 编写。它把存储层(WAL 分离、页服务)与计算层解耦,计算节点可动态启停、按需计费,存储用对象存储。这让 PG 具备 serverless 的弹性(空闲缩到零、按需扩展),是 PG 云原生方向的代表。
PostgreSQL 的 odyssey 连接池是什么?
odyssey 是 Yandex 开源的多线程连接池(Scalable PostgreSQL connection pooler),用多线程模型处理连接,性能高于单线程的 pgbouncer。它支持多种认证、TLS、多后端路由,适合大规模高并发场景。相比 pgbouncer 的单线程事件循环,odyssey 多线程能利用多核,吞吐更高。
PostgreSQL 的 peerdb ETL 工具是什么?
peerdb 是 PG 的 ETL 工具,支持逻辑订阅、时间 base、xmin base 的增量提取,号称比现有产品快 10 倍。它做 PG 到数据仓库/数据湖的 CDC 同步,用逻辑复制技术高效增量提取。适合 PG 作为源的数据同步、ELT 场景。
PostgreSQL 的 pg_activity 命令行 top 工具是什么?
pg_activity 是终端里的 PG 实时监控工具(类似 top/htop),实时展示当前活动查询、等待事件、锁、连接等,比静态查询 pg_stat_activity 更直观。它让 DBA 在命令行快速观察数据库负载,是排障的常用工具。
PostgreSQL 的 pg_basebackup 异地从库和增量备份怎么做?
pg_basebackup 做全量备份和建 standby(-X stream 流式 WAL、–write-recovery-conf 生成 standby 配置)。增量备份用 pg_basebackup –incremental=PATH_TO_MANIFEST 基于上次备份的 manifest 只备份变化块,再用 pg_combinebackup 合并全量+增量为新全量。这是 PG17 起的原生增量备份能力。异地从库则用 pg_basebackup + primary_conninfo 建立流复制。
PostgreSQL 的 pg_datasentinel 库内可观测是什么?
pg_datasentinel 是库内可观测性扩展,把运维从“翻日志”推进到“库内可观测”,在数据库内收集和展示运维指标(活动会话、等待、资源),让 DBA 用 SQL 直接查询运行状态,类似内置的 ASH。它减少了外部监控的依赖,是 PG 可观测性增强方向。
PostgreSQL 的 pg_hba.conf 配置和 SSL 吊销证书列表(CRL)是什么?
pg_hba.conf 控制客户端认证规则(谁、从哪、用什么方法连接)。PG14 支持配置 SSL 吊销证书列表目录(ssl_crl_dir 和 libpq 的 sslcrldir),把已吊销的证书 CRL 放在指定目录用于校验,拒绝被吊销证书的客户端。这是证书管理安全增强,配合 clientcert 实现完整的证书认证链。
PostgreSQL 的 pg_hexedit 数据文件编辑工具是什么?
pg_hexedit 是数据文件编辑/修复/读数工具(类似 pg_filedump),直接查看和修改 PG 数据文件的二进制内容。用于数据块级修复、页结构分析、抢救损坏数据。它提供比 pg_filedump 更交互的编辑能力,是极端情况下数据修复的底层工具。
PostgreSQL 的 pg_lightool 轻量级工具是什么?
pg_lightool 是 PG 的轻量级周边工具,提供一些便捷的运维小功能(如查看锁、阻塞、连接等),类似 pg_activity 的辅助工具集。它定位轻量、易用,适合快速排障,不必部署重型监控。这类工具补充了 psql 命令行在可视化观察上的不足。
PostgreSQL 的 pg_osc 在线 DDL 工具是什么?
pg_osc 是 online DDL 工具,用“影子表+触发器”方式在线执行表结构变更(加列、改类型等需要重写表的 DDL),避免长时间锁表。它创建新表、同步数据、切换表名,业务基本无感知。类似 gh-ost 之于 MySQL,pg_osc 解决 PG 大表 DDL 锁表重写的问题。
PostgreSQL 的 pg_rewind 和时间线分叉是什么?
pg_rewind 用于主从切换后把旧主回退到新主的时间线,使其能作为新 standby 加入。当旧主在切换时产生了新时间线分叉(两边都写),pg_rewind 比对数据块差异,把旧主的分叉数据回退,只同步差异块。它是主从切换(failover 后旧主重新加入)的标准工具,配合时间线概念使用。
PostgreSQL 的 pg_track_settings 配置变更跟踪是什么?
pg_track_settings 插件跟踪 postgresql.conf 配置变更历史,记录参数何时被谁改过、改前改后的值。它解决“配置变更无审计”的问题,便于排障(性能突变是否是调参引起)和合规审计。类似功能有 powa 的配置变更跟踪。
PostgreSQL 的 pgbouncer 连接池是什么,为什么需要连接池?
pgbouncer 是轻量级连接池中间件,介于客户端和 PG 之间,复用数据库后端连接。PG 每个后端连接是独立进程,内存开销大(数 MB 起),大量连接会拖垮性能,且 max_connections 有限。连接池把大量客户端连接复用到少量后端连接,支持 session、transaction、statement 三种池化模式。transaction 模式最常用(事务结束即释放连接),适合高并发短事务的 Web 应用。
PostgreSQL 的 pgcat 读写分离连接池是什么?
pgcat 是新一代 PG 连接池和读写分离中间件(Rust 编写),支持分片、读写分离、事务路由、多租户等。它比 pgbouncer 功能更强(支持 sharding 级别的路由),比 pgpool-II 更现代、性能更好。pgcat 适合需要“连接池+读写分离+分片路由”一体化的场景。
PostgreSQL 的 pgmodeler 图形化建模工具是什么?
pgmodeler 是 PG 的图形化建模工具,可视化设计数据库(ER 图、表、关系),生成 DDL 或反向工程现有库生成模型图。适合数据库设计阶段,比手写 DDL 直观,支持正向/反向工程。是 DBA/架构师设计 schema 的可视化工具。
PostgreSQL 的 pgpointcloud 激光点云插件是什么?
pgpointcloud 是存储激光点云(LiDAR)数据的扩展,把海量三维点数据高效存储、压缩、精确提取。点云是自动驾驶、测绘、BIM 的数据形式,pgpointcloud 用压缩块组织点数据,支持快速范围查询。这是 PG 在专业空间数据(点云)领域的扩展。
PostgreSQL 的 pgpool-II 读写分离中间件是什么?
pgpool-II 是功能丰富的中间件,支持连接池、读写分离、负载均衡、复制管理、在线恢复、并行查询等。读写分离通过识别 SQL 类型(SELECT 路由到 standby,写路由到 primary)实现。pgpool-II 4.x 支持 enable_shared_relcache(共享关系缓存)、scram 认证等。相比 pgbouncer(纯连接池),pgpool-II 是完整的高可用+负载均衡中间件,但配置更复杂。
PostgreSQL 的 pgquarrel DDL 比对工具是什么?
pgquarrel 是数据结构(DDL/schema)比对工具,比较两个数据库(或数据库与 DDL 脚本)的结构差异,生成差异 DDL。用于 schema 版本管理、环境一致性检查(开发 vs 生产)、变更审计。类似 diff 之于文本,pgquarrel 是 schema 的 diff 工具,配合迁移脚本管理 schema 变更。
PostgreSQL 的 pgrouting 路径规划插件是什么?
pgrouting 是路径规划扩展,基于 PostGIS 提供路由算法(最短路径 Dijkstra、A*、旅行商 TSP、VRP 等),用于出行、快递、配送的路径规划。它把图算法叠加到路网数据上,配合 PostGIS 的空间索引和路网拓扑,构建完整的导航/物流系统。
PostgreSQL 的 postmaster 从启动到关闭的逻辑是什么?
postmaster 是 PG 的主进程,启动时读配置、初始化共享内存、启动辅助进程(bgwriter、checkpointer、walwriter、autovacuum 等)、监听客户端连接;每个客户端连接 fork 一个 backend 进程;关闭时发信号让各进程优雅退出、做 checkpoint、回收资源。它是 PG 进程模型的核心,管理所有子进程的生命周期。
PostgreSQL 的 psql \dX 和 df/do 快捷命令是什么?
\dX(PG14)查看自定义统计信息(extended statistics),\df 列出函数、\do 列出操作符,PG14 起 df/do 支持按参数类型筛选。这些快捷命令让 DBA 快速查看数据库对象定义,替代查询 pg_catalog。\d 系列(\dt 表、\dv 视图、\di 索引)是 psql 最常用的元命令。
PostgreSQL 的 psql 客户端 gexec 妙用是什么?
psql 的 \gexec 元命令把上一条查询的每一行结果当作一条 SQL 执行,例如 SELECT ‘DROP TABLE ‘||tablename FROM … 后用 \gexec 批量执行生成的多条 DROP。这让 psql 能“用查询结果驱动命令”,实现批量 DDL、批量授权等,省去写脚本循环。是 DBA 批量操作的利器。
PostgreSQL 的 restore_command 参数修改支持 reload 生效(PG14)是什么?
PG14 起 restore_command 等恢复参数支持 reload 生效(SIGHUP 重载配置),无需重启实例。此前这些参数需重启才能修改,调整恢复命令很不方便。reload 生效让备份恢复相关的运维调整更灵活,减少停机。
PostgreSQL 的 supavisor 云原生连接池是什么?
supavisor 是云原生多租户连接池,为 serverless 和 SaaS 场景设计,支持大规模连接复用、租户隔离、动态伸缩。它解决云数据库海量短连接的管理问题,比 pgbouncer 更适合多租户和 serverless 架构。supavisor 是新一代连接池的代表,配合云数据库的弹性能力。
PostgreSQL 的 target_session_attrs 和 GUC_REPORT 实现客户端决策链路是什么?
target_session_attrs(read-write/read-only/any 等)配合 multi host 让 libpq 在连接时选择符合要求的节点(读写分离)。GUC_REPORT 机制让客户端在连接建立时立即获取数据库当前状态(如 in_hot_standby、事务状态),用于驱动级 failover 和负载均衡决策。两者结合实现协议级的读写分离和故障转移,客户端无需应用层判断。
PostgreSQL 的 timezone 如何修改?
timezone 是会话级参数,可用 SET timezone=‘Asia/Shanghai’ 修改会话时区,或 ALTER DATABASE/SYSTEM SET timezone 持久化。timestamptz 类型存 UTC,显示时按 timezone 转换,改 timezone 只影响显示不影响存储。云数据库(RDS)修改时区可能受参数组限制,需在控制台或参数组里设置。
PostgreSQL 的 trace_connection_negotiation 参数是什么?
trace_connection_negotiation 是 PG17 的 GUC,跟踪客户端的 SSLRequest 或 GSSENCRequest 包,即连接协商阶段的加密请求。用于调试 SSL/GSS 连接建立问题,判断客户端是否请求了加密、协商卡在哪一步。
PostgreSQL 的 tuned Linux 参数配置方法是什么?
tuned 是 Linux 的动态系统参数配置工具,用 profile 一键优化 OS 参数(内核、IO 调度、CPU 调频、内存等),适配数据库负载。对 PG 部署,用 tuned 的专用 profile 优化 OS 层(如 noop/deadline IO 调度、大页、swappiness),配合 PG 自身参数调优,提升整体性能。比手工改 sysctl 更规范、可回退。
PostgreSQL 的 unistr 函数是什么?
unistr 函数(PG14)用于把包含 Unicode 转义的字符串还原为实际字符,例如 unistr(’d\0061t’) 返回 ‘dat’,支持 \XXXX 形式的 Unicode 转义序列。它解决了在 SQL 文本里难以直接书写某些特殊字符(控制字符、非常规字符)的问题,是字符串处理的补充工具,常用于处理含转义的国际文本。
PostgreSQL 的 whoDB 数据探索工具是什么?
whoDB 是数据探索工具,让用户探索、理解数据库里的数据(类似“数据的搜索引擎”),解决“数据积灰、不知道有什么数据”的问题。它自动索引和描述数据,支持自然语言查询数据,是数据资产管理和数据发现的工具。
PostgreSQL 的最佳实践规约有哪些核心要点?
持续稳定使用 PG 的最佳实践:连接用连接池控制并发、避免长事务和 idle in transaction、合理建索引(不过度)、定期 vacuum 和 analyze、监控慢查询和膨胀、参数按硬件调优(shared_buffers、work_mem、effective_cache_size)、备份和 PITR 演练、版本升级规划。核心是“防膨胀、控连接、优索引、勤监控、有备份”,让数据库长期稳定。
PostgreSQL 的自定义 GUC 规范化(PG14)是什么?
PG14 规范化自定义 GUC 参数,统一扩展自定义参数的命名和注册方式,避免扩展参数命名混乱。自定义 GUC 让扩展能定义自己的配置参数,纳入 postgresql.conf 管理。规范化后参数命名更一致、文档更清晰。PG17 又支持 ALTER SYSTEM 设置未识别自定义 GUC。
PostgreSQL 的进程模型与高并发和连接池关系是什么?
PG 是进程模型(每连接一个 backend 进程),相比线程模型内存开销大、连接数受限,因此高并发场景必须配合连接池(pgbouncer 等)复用后端连接。进程模型优点是隔离性好(一个进程崩溃不影响他人)、调试简单;缺点是连接多时内存和调度开销大。所以 PG 的架构天然需要连接池来支撑高并发。
PostgreSQL 通过 SQL 接口关闭、重启数据库怎么实现?
PG 没有直接的 SQL 关库命令,需通过函数/信号实现:pg_ctl 命令行执行 stop/restart,或调用 pg_terminate_backend 杀会话、pg_ctl 工具,或扩展提供关闭函数。实际上标准做法是用 pg_ctl stop/restart(需 OS 层面执行),库内无法用纯 SQL 直接 shutdown。文章讨论的是通过 SQL 触发关闭的变通方案(如 UDF 调用 system)。
不懂 jsonpath 就相当于 JSON 没入门,jsonpath 的核心语法是什么?
jsonpath 是 SQL/JSON 的路径语言,核心语法:$ 表示根,.key 取对象成员,[*] 遍历数组,.?(@.x > 1) 做过滤,.type() 取类型,.size() 取大小,双引号内可写复杂 key。PG 的 jsonb_path_query、jsonb_path_exists 等函数都基于 jsonpath 执行。掌握 jsonpath 后,JSON 查询从“多级 -» 和 -> 嵌套”变成一条可读的路径表达式,开发效率提升一个量级,是 JSON 进阶的必修课。
为什么增加连接不能无限提高 TPS/QPS?配置多少个连接合适?
连接数增加会带来进程调度、内存、锁、缓存争用等开销,超过 CPU 核数的连接会导致上下文切换加剧、性能反而下降。合适连接数约为 CPU 核数(活跃连接),用连接池控制活跃连接在核数附近。配置过少并发不足,过多则争用和调度开销抵消收益。核心是让活跃并发连接数匹配 CPU 处理能力,而非堆连接总数。