专栏名称: AustinDatabases
PostgreSQL ACE ,PolarDB 3年, OceanBase 极速学习ING, MongoDB 8年经验, MySQL OCP, SQL SERVER, MCITP,REDIS ,做一个合格的数据库架构师
目录
相关文章推荐
开发者全社区  ·  H家最新进展 ·  昨天  
开发者全社区  ·  55 ... ·  昨天  
潇湘晨报  ·  海尔开启强制双休 ·  2 天前  
湖南日报  ·  太突然!双双宣告停产 ·  3 天前  
51好读  ›  专栏  ›  AustinDatabases

PostgreSQL 扫盲贴 常用的监控分析脚本

AustinDatabases  · 公众号  ·  · 2025-03-03 06:00

正文

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2720人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 +9)(1 2 3 4 5 6 7群均已爆满,,开8群200+ 9群)

Austindatabases公众号已经开启了,AI 文章分析,AI 文章问答,比如你想知道AustinDatabases 里面,说了多少种数据库,那些是讲 MySQL,那些是PostgreSQL, 那些是OB ,POLARDB ,MongoDB ,SQL Server, 阿里云的,问他他会列出来,同时如果有问题不明白,可以将文章的文字粘贴到公众号提供的专用AI ,公众号将通过众多文章(目前1300多篇)来进行尝试性的解释。使用方法,直接到微信公众号中点击服务,选择AI问答。如下示例
图片



图片



正文:

我一直有一个错觉,大家的POSTGRESQL的技术都非常了得,在年前实际上对我有几次的感触。

1 不会装POSTGRESQL 的人有的是

2 基本概念和理解不明白的有的是

3 对于POSTGRESQL 来说,MYSQL 的确是曾经非常的热,至少MYSQL的一些白痴问题,问的人比较少

OK 既然如此,也不能天天高大上,咱们也的有接地气的,今天就奉送大量的PostgreSQL的脚本给一些初学者

1  查询数据库信息

SELECT 
    pg_database.datname AS database_name,
    pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM 
    pg_database;
          database_name           |  size   
-----------------------------------+---------
 postgres                          | 7925 kB
 template1                         | 7957 kB
 template0                         | 7769 kB
 rddsadd                          | 8005 kB
 SaasCenter1                    | 46 GB
 serverNew                      | 2025 MB
 IterativeDev                   | 8101 kB

2  表查询索引大小的信息

SELECT 
    t.relname AS table_name,
    pg_size_pretty(pg_indexes_size(t.oid)) AS index_size
FROM 
    pg_class t
JOIN 
    pg_namespace n ON n.oid = t.relnamespace
WHERE 
    n.nspname NOT IN ('pg_catalog''information_schema')
    AND t.relkind = 'r'  -- 只选择普通表
ORDER BY 
    pg_indexes_size(t.oid) DESC;
                 table_name                 | index_size 
--------------------------------------------+------------
 sysd_log                                    | 2314 MB
 bizd_sc                                     | 2121 MB
 bizd_bs                                     | 1736 MB
 bizd_ts_payway                              | 1718 MB
 bizd_ts                                     | 1372 MB
 kcd_ksc_bak                                 | 1115 MB
 bizd_ss                                     | 1080 MB

3 索引和表之间的关系,索引占多大

SELECT 
    t.relname AS table_name,
    pg_size_pretty(pg_total_relation_size(t.oid)) AS total_size,
    pg_size_pretty(pg_relation_size(t.oid)) AS table_size,
    pg_size_pretty(pg_indexes_size(t.oid)) AS index_size
FROM 
    pg_class t
JOIN 
    pg_namespace n ON n.oid = t.relnamespace
WHERE 
    n.nspname NOT IN ('pg_catalog''information_schema')
    AND t.relkind = 'r'  -- 只选择普通表
ORDER BY 
    pg_total_relation_size(t.oid) DESC;





    
                table_name                 | total_size | table_size | index_size 
--------------------------------------------+------------+------------+------------
 bizd_sc                                     | 9153 MB    | 7031 MB    | 2121 MB
 sysd_log                                    | 7648 MB    | 5305 MB    | 2314 MB
 bizd_bs                                     | 4223 MB    | 2487 MB    | 1736 MB
 kcd_ksc_bak                                 | 3918 MB    | 2802 MB    | 1115 MB
 bizd_ts                                     | 2951 MB    | 1579 MB    | 1372 MB
 bizd_ts_payway                              | 2845 MB    | 1127 MB    | 1718 MB
 bizd_sc_set_meal                            | 2453 MB    | 1514 MB    | 939 MB
 bizd_ss                                     | 2193 MB    | 1113 MB    | 1080 MB
 bizd_ts_expansion                           | 1777 MB    | 844 MB     | 933 MB

4 每个数据库下的不同OBJECTS 的用户权限

SELECT 
   d.datname AS database_name,
   u.usename AS username,
   pg_catalog.has_database_privilege(u.usename, d.datname, 'CONNECT') AS can_connect,
   pg_catalog.has_database_privilege(u.usename, d.datname, 'CREATE') AS can_create,
   pg_catalog.has_database_privilege(u.usename, d.datname, 'TEMP') AS can_use_temp
FROM 
   pg_database d
CROSS JOIN 
   pg_user u
ORDER BY 
   d.datname, u.usename;
          database_name           |      username      | can_connect | can_create | can_use_temp 
-----------------------------------+--------------------+-------------+------------+--------------
 Devops                         | alicloud_rds_admin | t           | t          | t
 Devops                         | aurora             | t           | t          | t
 Devops                         | cy7_read           | t           | f          | t

schema_name |      object_name       | object_type |          grantee          | can_select | can_insert | can_update | can_delete | can_truncate | can_references | can_trigger 
-------------+------------------------+-------------+---------------------------+------------+------------+------------+------------+--------------+----------------+-------------
public      | order              | r           | alicloud_rds_admin        | SELECT     | INSERT     | UPDATE     | DELETE     | TRUNCATE     | REFERENCES     | TRIGGER
public      | order              | r           | aurora                    | SELECT     | INSERT     | UPDATE     | DELETE     | TRUNCATE     | REFERENCES     | TRIGGER
public      | order              | r           | read                  | SELECT     |            |            |            |              |                | 
public      | order              | r           | center_service         | SELECT     | INSERT     | UPDATE     | DELETE     | TRUNCATE     | REFERENCES     | TRIGGER
public      | order              | r           | devops_rw              |            |            |            |            |              |                | 
public      | order              | r           | dp                     |            |            |            |            |              |                | 
public      | order              | r           | saascenter             | SELECT     | INSERT     | UPDATE     | DELETE     | TRUNCATE     | REFERENCES     | TRIGGER
public      | order              | r           | terminal_rw            |            |            |            |            |              |                | 
public      | order              | r           | user                   |            |            |            |            |              |                | 
public      | order              | r           | dba_admin                 | SELECT     | INSERT     | UPDATE     | DELETE     | TRUNCATE     | REFERENCES     | TRIGGER
public      | order              | r           | pg_execute_server_program |            |            |            |            |              |                | 
public      | order              | r           | pg_monitor                |            |            |            |            |              |                | 
public      | order              | r           | pg_rds_superuser          | SELECT     | INSERT     | UPDATE     | DELETE     | TRUNCATE     | REFERENCES     | TRIGGER
public      | order              | r           | pg_read_all_settings      |            |            |            |            |              |                | 
public      | order              | r           | pg_read_all_stats         |            |            |            |            |              |                | 
public      | order              | r           | pg_read_server_files      |            |            |            |            |              |                | 
public      | order              | r           | pg_signal_backend         |            |            |            |            |              |                | 
public      | order              | r           | pg_stat_scan_tables       |            |            |            |            |              |                | 
public      | order              | r           | pg_write_server_files     |            |            |            |            |              |                | 

5  拼接出当前表的create table 语句

WITH column_info AS (
   SELECT 
       a.attname AS column_name, 
       pg_catalog.format_type(a.atttypid, a.atttypmod) AS data_type,
       CASE 
           WHEN a.attnotnull THEN ' NOT NULL'
           ELSE ''
       END AS not_null,
       pg_catalog.array_to_string(ARRAY(
           SELECT conname
           FROM pg_catalog.pg_constraint c
           WHERE c.conrelid = a.attrelid AND a.attnum = ANY(c.conkey) AND c.contype IN ('p''u')
       ), ', ') AS constraints
   FROM 
       pg_catalog.pg_attribute a
   WHERE 
       a.attrelid = 'your_table_name'::regclass AND a.attnum > 0 AND NOT a.attisdropped
)
SELECT 
   'CREATE TABLE your_table_name (' || STRING_AGG(column_name || ' ' || data_type || not_null || 
             CASE WHEN constraints IS NOT NULL THEN ' CONSTRAINT ' || constraints ELSE '' END, ', ') || ');' AS create_statement
FROM 
   column_info;

6 分析数据库中的表1天未进行

SELECT 
    relname AS table_name,
    last_autovacuum,
    last_autoanalyze
FROM 
    pg_stat_all_tables
WHERE 
    last_autovacuum < NOW() - interval '1 day' 
    AND schemaname NOT IN ('pg_catalog''information_schema');

7 分析PostgreSQL shared buffer 的内存使用情况 需要加载 create extension pg_buffercache

cy7SaasCenter1=> WITH buffer_info AS (
cy7SaasCenter1(>     SELECT 
cy7SaasCenter1(>         pg_buffercache.*,
cy7SaasCenter1(>         CASE 
cy7SaasCenter1(>             WHEN pg_buffercache.relfilenode IS NOT NULL THEN 't'
cy7SaasCenter1(>             ELSE 'f'
cy7SaasCenter1(>         END AS used
cy7SaasCenter1(>     FROM 
cy7SaasCenter1(>         pg_buffercache
cy7SaasCenter1(> )
cy7SaasCenter1-> SELECT 
cy7SaasCenter1->     COUNT(*) AS total_blocks,
cy7SaasCenter1->     COUNT(*) FILTER (WHERE used = 't') AS used_blocks,
cy7SaasCenter1->     COUNT(*) FILTER (WHERE used = 'f') AS free_blocks,
cy7SaasCenter1->     (COUNT(*) FILTER (WHERE used = 't') * current_setting('block_size')::numeric / 1024 / 1024) AS used_blocks_mb,  -- 计算已使用块的 MB
cy7SaasCenter1->     (COUNT(*) FILTER (WHERE used = 'f') * current_setting('block_size')::numeric / 1024 / 1024) AS free_blocks_mb   -- 计算空闲块的 MB
cy7SaasCenter1-> FROM 
cy7SaasCenter1->     buffer_info;
 total_blocks | used_blocks | free_blocks |    used_blocks_mb    |     free_blocks_mb     
--------------+-------------+-------------+----------------------+------------------------
       121809 |      121809 |           0 | 951.6328125000000000 | 0.00000000000000000000
(1 row)

8 分析每个POSTGRESQL 子进程的内存使用情况

#!/bin/bash


psql -d your_database_name -c "SELECT pid FROM pg_stat_activity WHERE state = 'active';" -t | while read pid; do
   
    ps -o pid,vsz,rss,comm -p $pid
done

9 分析每个POSTGRESQL 子进程的CPU使用情况

#!/bin/bash

# 查询当前活动连接并提取 PID
pids=$(psql -d your_database_name -c "SELECT pid FROM pg_stat_activity WHERE state = 'active';" -t)

# 遍历所有 PID 并获取对应的 CPU 使用情况
for pid in $pidsdo
    ps -o pid,%cpu,comm -p $pid
done



置顶

辩论中 DeepSeek 竟然可以安慰我?我替AI 送上一句 Shame on you !人类

云原生数据库砸了 K8S云自建数据库的饭碗--- CXL内存技术

临时工:数据库人生路,如何救赎自己  -- 答某个迷茫DBA的职业咨询

开源软件是心怀鬼胎的大骗局 -- 开源软件是人类最好的正能量 --- 一个人的辩论会

AI 祸国殃民必须铲除,AI国强民富必须支持

PolarDB 相关文章

“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!

PostgreSQL 的搅局者问世了,杀过来了!

在被厂商围剿的DBA 求生之路 --我是老油条

POLARDB  添加字段 “卡” 住---这锅Polar不背

PolarDB 版本差异分析--外人不知道的秘密(谁是绵羊,谁是怪兽)

在被厂商围剿的DBA 求生之路 --我是老油条

PolarDB 答题拿-- 飞刀总的书、同款卫衣、T恤,来自杭州的Package (活动结束了)

PolarDB for MySQL 三大核心之一POLARFS 今天扒开它--- 嘛是火星人

PolarDB-MySQL 并行技巧与内幕--(怎么薅羊毛)

PolarDB 并行黑科技--从百套MySQL撤下说起 (感谢8018个粉丝的支持)

PolarDB 杀疯了,Everywhere Everytime Everydatabase on Serverless

POLARDB  从一个使用者的角度来说说,POALRDB 怎么打败 MYSQL RDS

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PolarDB 从节点Down机后,引起的主从节点强一致的争论

PolarDB serverless 真敢搞,你出圈了你知道吗!!!!

PolarDB VS PostgreSQL  "云上"性能与成本评测 -- PolarDB 比PostgreSQL 好?

临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一

PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)

POLARDB  -- Ausitndatabases 历年的文章集合

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?


PostgreSQL 相关文章

“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!

PostgreSQL  添加索引导致崩溃,参数调整需谨慎--文档未必完全覆盖场景
PostgreSQL 的搅局者问世了,杀过来了!
PostgreSQL SQL优化用兵法,优化后提高 140倍速度
PostgreSQL 运维的难与“难”  --上海PG大会主题记录
PostgreSQL 什么都能存,什么都能塞 --- 你能成熟一点吗?
PostgreSQL 迁移用户很简单 ---  我看你的好戏

PostgreSQL 用户胡作非为只能受着 --- 警告他

全世界都在“搞” PostgreSQL ,从Oracle 得到一个“馊主意”开始
PostgreSQL 加索引系统OOM 怨我了--- 不怨你怨谁

PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!

病毒攻击PostgreSQL暴力破解系统,防范加固系统方案(内附分析日志脚本)
PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

PostgreSQL 如何通过工具来分析PG 内存泄露

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?

POSTGRESQL --Austindatabaes 历年文章整理

PostgreSQL  查询语句开发写不好是必然,不是PG的锅

PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)






请到「今天看啥」查看全文