首页 / 资讯中心 / 文章详情

检查 PostgreSQL 集群中各数据库大小:\l+ 元命令与 pg_database_size 查询实战

检查 PostgreSQL 集群中各数据库大小:\l+ 元命令与 pg_database_size 查询实战 ★ FEATURED ARTICLE
文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载导读在管理一个 PostgreSQL 服务器实例集群时快速摸清每个数据库占用的磁盘空间是容量规划与运维排障的常见需求。本文围绕 check-the-size-of-databases-in-a-cluster.md 的核心内容系统讲解两种检查集群内全部数据库大小的方法一是psql交互式客户端自带的\l/\l元命令二是直接查询系统目录pg_database并结合pg_database_size()、pg_size_pretty()管理函数编写 SQL。读完本文你将能随时以人类可读的格式列出集群内每个数据库的磁盘占用并按大小排序定位大头数据库。方法一使用 psql 元命令\l与\lPostgreSQL 自带的命令行客户端psql提供了一系列以反斜杠开头的元命令meta-command其中\l用于列出服务器上的所有数据库。在psql提示符下直接输入\l即可看到集群内全部数据库的清单。该命令默认展示的字段包括Name数据库名称Owner数据库属主roleEncoding字符编码Locale Provider区域设置提供方如 libc、icuCollate排序规则Ctype字符分类规则ICU LocaleICU 区域设置ICU RulesICU 自定义规则Access privileges访问权限ACL加一个多出三个字段如果追加一个加号将命令写成\l则在上述字段之外还会额外返回三列Size每个数据库的磁盘占用大小已按人类可读格式格式化如12 MBTablespace数据库所在表空间Description数据库注释说明其中Size列正是每个数据库经过格式化后的大小一眼即可对比出各库的体量差异。值得说明的是\l背后的查询实际上是对系统目录的封装。如果想知道这个元命令到底执行了什么 SQL可以在psql中执行\set ECHO_HIDDEN true再运行\lpsql就会把背后生成的查询语句一并打印出来——这也是 show-the-hidden-queries-behind-backslash-commands.md 中演示的调试技巧。方法二用 SQL 查询系统目录pg_database\l虽然方便但输出顺序与可定制性有限。如果需要按大小降序排列、只取特定字段或在脚本中复用可以直接查询 PostgreSQL 的记录系统目录。psql的\l系列命令本质上就是在读取这张系统表可参考 list-all-the-databases.md 中对pg_database的说明。pg_database系统目录中每一行对应集群内的一个数据库其中datname列保存数据库名称。结合两个管理函数即可算出各库大小pg_database_size(datname)返回指定数据库占用的字节数bigint详见 get-the-size-of-a-database.mdpg_size_pretty(bigint)把字节数转换为最合适的人类可读单位如kB、MB、GB详见 pretty-print-data-sizes.md。以下查询会列出集群内所有数据库及其大小并按大小从大到小排序select db.datname as db_name, pg_size_pretty(pg_database_size(db.datname)) as db_size from pg_database db order by pg_database_size(db.datname) desc;对查询结果稍作分析db.datname取自pg_database目录代表每个数据库的名称pg_database_size(db.datname)先以字节为单位算出原始大小供order by精确排序pg_size_pretty(...)负责将原始字节数包装成kB/MB/GB等可读格式呈现在db_size列由于排序依据是原始字节数而非格式化后的字符串所以即使大小相差很多倍GB与MB之间也能得到正确的数值顺序不会出现字典序错乱。深入理解从单库大小到集群全貌pg_database_size()并不只能用于集群级统计。单独查看某个数据库的大小时可以直接传入数据库名select pg_size_pretty(pg_database_size(hr_hotels)); -- 输出示例12 MB这与上文集群查询使用的是同一套函数区别仅在于作用范围。若需要继续下钻到更细粒度PostgreSQL 还提供了一组同族管理函数可用于排查集群中某个库的体重究竟来自哪些对象pg_relation_size(表名或索引名)返回指定表或索引占用的字节数参见 get-the-size-of-a-table.md 与 get-the-size-of-an-index.md组合使用pg_size_pretty(pg_relation_size(...))即可得到表级、索引级的可读大小参见 get-the-size-on-disk-of-an-index.md。从实践角度看一个典型的排查路径是先用\l或上述 SQL 找出集群中最大的数据库再用\d查看该库内各表及其索引的名称最后逐表计算pg_relation_size()定位占用最高的对象。小结交互式场景在psql中输入\l查看数据库清单输入\l额外获得Size、Tablespace、Description三列其中 Size 列即每个数据库的可读大小。脚本化 / 排序场景直接查询pg_database系统目录用pg_database_size()取字节数、pg_size_pretty()格式化、order by pg_database_size(db.datname) desc按真实大小降序排列。排查深挖结合pg_relation_size()与\d将统计粒度从数据库下钻到表与索引形成完整的容量分析链路。调试元命令设置\set ECHO_HIDDEN true可查看\l背后实际执行的 SQL理解元命令与系统目录之间的关系。上述方法均基于 PostgreSQL 内建的管理函数与系统目录不依赖任何第三方扩展适用于大多数标准 PostgreSQL 部署环境。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐如何永久保存微信聊天记录WeChatMsg免费工具完整指南如何永久保存微信聊天记录WeChatMsg免费工具完整指南 你是否担心珍贵的微信聊天记录会随着手机更换或误删而永远消失那些与家人朋友的温馨对话、重要的工作沟TIL 仓库实战在 PostgreSQL 中列出所有数据库的两种方式psql 元命令与 pg_database 查询TIL 仓库实战在 PostgreSQL 中列出所有数据库的两种方式psql 元命令与 pg_database 查询 导读 本文源自 TILToday文档教程知识库StarRocks SHOW FILE 命令详解数据库文件元信息查询与实战StarRocks SHOW FILE 命令详解数据库文件元信息查询与实战 本文围绕 StarRocks 的 SHOW FILE 语句展开讲解如何查看已托管数据库OLAP数据仓库大数据湖仓一体数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站