PostgreSQL数据库学习知识点大全(终)

简介: 教程来源 https://app-ac8abncezqpt.appmiaoda.com 系统介绍PostgreSQL监控诊断(活动会话、慢查、锁阻塞、缓存命中率、表膨胀)、自动清理调优、常用扩展(PostGIS/hstore/pgcrypto等)、性能工具(pgBadger/pgbouncer)及PG 16新特性(并行VACUUM、JSON_TABLE、增量排序等),助力高效运维与深度优化。

十一、监控与诊断

11.1 系统视图

-- 查看活动会话
SELECT 
    pid,
    usename,
    application_name,
    client_addr,
    state,
    query,
    query_start,
    state_change,
    wait_event_type,
    wait_event
FROM pg_stat_activity
WHERE state != 'idle';

-- 查看表统计
SELECT 
    schemaname,
    tablename,
    n_live_tup AS live_tuples,
    n_dead_tup AS dead_tuples,
    last_vacuum,
    last_autovacuum,
    last_analyze,
    last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

-- 查看索引统计
SELECT 
    schemaname,
    tablename,
    indexname,
    idx_scan,
    idx_tup_read,
    idx_tup_fetch
FROM pg_stat_user_indexes
ORDER BY idx_scan;

-- 查看数据库大小
SELECT 
    datname,
    pg_database_size(datname) AS size_bytes,
    pg_size_pretty(pg_database_size(datname)) AS size_pretty
FROM pg_database
ORDER BY pg_database_size(datname) DESC;

-- 查看表大小
SELECT 
    tablename,
    pg_size_pretty(pg_table_size(tablename)) AS table_size,
    pg_size_pretty(pg_indexes_size(tablename)) AS indexes_size,
    pg_size_pretty(pg_total_relation_size(tablename)) AS total_size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(tablename) DESC;

-- 查看WAL信息
SELECT 
    pg_current_wal_lsn(),
    pg_walfile_name(pg_current_wal_lsn());

-- 查看数据库活动
SELECT 
    datname,
    numbackends,
    xact_commit,
    xact_rollback,
    blks_read,
    blks_hit
FROM pg_stat_database;

11.2 性能诊断

-- 查看慢查询
SELECT 
    query,
    calls,
    total_time / 1000 AS total_seconds,
    mean_time / 1000 AS mean_ms,
    max_time / 1000 AS max_ms,
    rows
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 20;

-- 启用pg_stat_statements
-- 在postgresql.conf中添加
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all

-- 重置统计
SELECT pg_stat_statements_reset();

-- 查看缓存命中率
SELECT 
    datname,
    blks_hit,
    blks_read,
    CASE 
        WHEN blks_hit + blks_read = 0 THEN 0
        ELSE blks_hit * 100.0 / (blks_hit + blks_read)
    END AS cache_hit_ratio
FROM pg_stat_database
WHERE datname NOT IN ('template0', 'template1');

-- 查看表膨胀
SELECT 
    schemaname,
    tablename,
    n_live_tup,
    n_dead_tup,
    ROUND(100.0 * n_dead_tup / NULLIF(n_live_tup + n_dead_tup, 0), 2) AS dead_tuple_ratio
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY dead_tuple_ratio DESC;

-- 查看阻塞锁
SELECT 
    blocked.pid AS blocked_pid,
    blocked.query AS blocked_query,
    blocking.pid AS blocking_pid,
    blocking.query AS blocking_query
FROM pg_stat_activity blocked
JOIN pg_stat_activity blocking 
    ON blocked.pid = ANY(pg_blocking_pids(blocked.pid))
WHERE blocked.wait_event_type = 'Lock';

11.3 自动清理

-- 查看自动清理配置
SELECT name, setting, unit, short_desc
FROM pg_settings
WHERE name LIKE '%autovacuum%';

-- 调整自动清理参数
ALTER SYSTEM SET autovacuum = on;
ALTER SYSTEM SET autovacuum_naptime = '1min';
ALTER SYSTEM SET autovacuum_vacuum_threshold = 50;
ALTER SYSTEM SET autovacuum_vacuum_scale_factor = 0.2;
ALTER SYSTEM SET autovacuum_analyze_threshold = 50;
ALTER SYSTEM SET autovacuum_analyze_scale_factor = 0.1;
SELECT pg_reload_conf();

-- 手动清理
VACUUM (VERBOSE, ANALYZE) employees;
VACUUM FULL employees;  -- 锁定表,回收空间
ANALYZE employees;

-- 查看清理进度
SELECT 
    pid,
    datname,
    relid::regclass,
    phase,
    heap_blks_total,
    heap_blks_scanned,
    heap_blks_vacuumed,
    index_vacuum_count
FROM pg_stat_progress_vacuum;

十二、扩展与工具

12.1 常用扩展

-- 查看已安装扩展
SELECT * FROM pg_available_extensions;
SELECT * FROM pg_extension;

-- 创建扩展
CREATE EXTENSION IF NOT EXISTS hstore;  -- 键值存储
CREATE EXTENSION IF NOT EXISTS uuid-ossp;  -- UUID生成
CREATE EXTENSION IF NOT EXISTS pgcrypto;  -- 加密函数
CREATE EXTENSION IF NOT EXISTS tablefunc;  -- 交叉表
CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;  -- 模糊匹配
CREATE EXTENSION IF NOT EXISTS citext;  -- 不区分大小写文本
CREATE EXTENSION IF NOT EXISTS ltree;  -- 树形结构
CREATE EXTENSION IF NOT EXISTS cube;  -- 多维立方体
CREATE EXTENSION IF NOT EXISTS earthdistance;  -- 地球距离计算

-- 使用uuid-ossp
SELECT uuid_generate_v4();
SELECT uuid_generate_v1();

-- 使用pgcrypto
SELECT crypt('password', gen_salt('bf'));
SELECT crypt('password', stored_hash) = stored_hash;

-- 使用hstore
CREATE TABLE products_hstore (id SERIAL, attributes HSTORE);
INSERT INTO products_hstore (attributes) VALUES ('"brand"=>"Dell", "ram"=>"16GB"');
SELECT attributes -> 'brand' FROM products_hstore;

-- 使用PostGIS(地理空间)
CREATE EXTENSION postgis;
CREATE TABLE locations (id SERIAL, name TEXT, geom GEOMETRY);
INSERT INTO locations (name, geom) VALUES 
('北京', ST_GeomFromText('POINT(116.4 39.9)', 4326));

SELECT ST_Distance(
    ST_GeomFromText('POINT(116.4 39.9)', 4326),
    ST_GeomFromText('POINT(121.5 31.2)', 4326)
);

12.2 性能调优工具

# pg_stat_statements - SQL统计
# 已在11.1中介绍

# pgBadger - 日志分析
pgbadger /var/log/postgresql/postgresql.log -o report.html

# pg_top - 实时监控
pg_top -d mydb

# pgbouncer - 连接池
# 配置 pgbouncer.ini
[databases]
mydb = host=localhost port=5432 dbname=mydb

[pgbouncer]
listen_port = 6432
listen_addr = 127.0.0.1
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20

# pgcluu - 性能报告
pgcluu -d /var/lib/postgresql/16/main -o /tmp/pgcluu_report

# pg_activity - 实时活动监控
pg_activity -U postgres -d mydb

十三、PostgreSQL 16 新特性

13.1 性能改进

-- 并行查询增强
-- 设置并行度
SET max_parallel_workers_per_gather = 4;
SET parallel_setup_cost = 1000;
SET parallel_tuple_cost = 0.1;

-- 增量排序
SET enable_incremental_sort = on;

-- 使用增量排序
EXPLAIN SELECT * FROM employees ORDER BY department_id, salary;

-- 聚合下推
SET enable_partitionwise_aggregate = on;

-- 提高预写日志性能
ALTER SYSTEM SET wal_sync_method = fdatasync;
ALTER SYSTEM SET wal_compression = on;

13.2 SQL/JSON支持

-- JSON_TABLE函数
SELECT *
FROM JSON_TABLE(
    '[{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]',
    '$[*]' COLUMNS (
        id INT PATH '$.id',
        name TEXT PATH '$.name'
    )
) AS jt;

-- IS JSON 约束
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    data JSONB,
    CONSTRAINT data_is_json CHECK (data IS JSON)
);

13.3 其他新特性

-- 并行VACUUM
VACUUM (PARALLEL 4) employees;

-- 逻辑复制性能提升
-- 支持部分复制槽
-- 支持双向复制

-- 系统视图增强
-- pg_stat_io 视图
SELECT * FROM pg_stat_io;

-- pg_stat_subscription_stats
SELECT * FROM pg_stat_subscription_stats;

-- 冻结映射(Freeze Map)
-- 减少VACUUM开销

PostgreSQL的世界充满无限可能,愿本文成为你数据库学习之路上的重要指南。持续学习,深入实践,你一定能成为优秀的PostgreSQL数据库专家!
来源:
https://app-ac8abncezqpt.appmiaoda.com

相关文章
|
8天前
|
XML Java Maven
Spring Boot学习知识点大全(一)
教程来源 https://app-a87ujc988w01.appmiaoda.com/ Spring Boot 是 Spring 家族中革命性框架,秉持“约定优于配置”理念,通过自动配置、起步依赖、嵌入式服务器等特性,大幅简化企业级 Java 应用开发。本文系统梳理其核心概念、注解、多环境配置与最佳实践,助初学者快速入门,为进阶开发者提供深度参考。
|
7天前
|
监控 Java 测试技术
Spring Boot学习知识点大全(三)
教程来源 https://app-a6nw7st4g741.appmiaoda.com/ 系统梳理Spring Boot核心实践:涵盖日志分级配置与异步输出、单元/集成测试、Actuator监控与自定义指标、Docker/K8s部署、Spring Boot 3.x Jakarta迁移及虚拟线程等新特性,助力构建高可用生产级应用。
|
9天前
|
SQL Oracle 关系型数据库
Oracle数据库学习知识点(一)
教程来源 https://app-ah8jla8z2m81.appmiaoda.com 系统梳理Oracle数据库核心知识,涵盖安装配置、体系结构、SQL基础、PL/SQL编程等关键内容,兼顾初学者入门与DBA/开发者进阶需求,助力构建完整技术体系。
|
9天前
|
SQL 存储 缓存
SQL Server数据库学习知识点大全(一)
教程来源 https://app-aes4wxahovsx.appmiaoda.com/ SQL Server核心知识,涵盖基础安装配置、体系结构、T-SQL语法(数据类型、查询、连接、子查询)、高级编程(存储过程、函数、触发器)及高可用特性,助力初学者构建完整知识体系,也为DBA与开发者提供实用技术参考。
|
9天前
|
安全 关系型数据库 数据库
PostgreSQL数据库学习知识点大全(三)
教程来源 https://app-acda5zfcddz5.appmiaoda.com 系统介绍PostgreSQL核心运维技术:事务与并发控制(ACID、隔离级别、锁机制)、备份恢复(逻辑/物理备份、PITR)、高可用复制(流复制、逻辑复制)及安全管理(角色权限、RLS、SSL加密),覆盖生产环境关键实践。
|
9天前
|
SQL 运维 安全
SQL Server数据库学习知识点大全(三)
教程来源 https://app-adzoyybqtaf5.appmiaoda.com SQL Server高可用、自动化运维与安全体系:涵盖Always On可用性组配置、日志传送搭建;SQL Server Agent作业调度、警报通知机制;以及登录用户管理、细粒度权限控制、TDE透明加密与列级加密等核心安全实践,助力构建稳定、可控、合规的企业级数据库环境。
|
9天前
|
SQL 存储 Oracle
Oracle数据库学习知识点(二)
教程来源 https://app-ah2affi0rlz5.appmiaoda.com 本节详解Oracle数据库高级编程:存储过程(含输入/输出参数、异常处理)、函数(支持默认值、自治事务)、包(规范与体分离、封装性)、各类触发器(DML/DDL/系统事件)及事务锁机制(隔离级别、行/表锁、死锁诊断),全面提升数据库逻辑控制与安全性。
|
18天前
|
传感器 机器人 Linux
嵌入式开发新手入门教程(第一卷)
教程来源 https://app-a6nw7st4g741.appmiaoda.com/ 嵌入式系统是嵌入设备内部的专用计算机系统,广泛应用于智能手表、汽车电控、医疗设备乃至火星车等。其由硬件(MCU、存储器、外设)和软件(裸机/RTOS/嵌入式Linux)构成。新手可按电路与C语言→单片机开发→RTOS与ARM深入三阶段学习,推荐STM32平台入门。
|
9天前
|
SQL 关系型数据库 数据库
PostgreSQL数据库学习知识点大全(一)
教程来源 https://app-ad5sxofh8phd.appmiaoda.com PostgreSQL是全球领先的开源关系型数据库,以高可靠性、强扩展性、完整SQL标准兼容及丰富功能(JSON/XML/地理空间等)著称。本文系统梳理其核心知识:从安装配置、体系结构、SQL基础到高级查询与窗口函数,助力初学者构建完整知识体系,也为DBA和开发者提供深度技术参考。
|
8天前
|
缓存 NoSQL Java
Spring Boot学习知识点大全(二)
教程来源 https://app-a7illrp9pngh.appmiaoda.com/ 本文详解Spring Boot核心机制:自动配置原理(@EnableAutoConfiguration、条件注解、自定义配置)、Web开发(RESTful API、统一响应、全局异常处理、文件上传下载)及数据访问(JDBC/JPA、MyBatis、多数据源、Redis集成与缓存管理),覆盖企业级应用开发关键实践。