问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

掌握pg_size_pretty,轻松提升PostgreSQL性能!

创作时间:
作者:
@小白创作中心

掌握pg_size_pretty,轻松提升PostgreSQL性能!

引用
5
来源
1.
https://neon.tech/postgresql/postgresql-administration/postgresql-database-indexes-table-size
2.
https://www.baremon.eu/backup-large-postgresql-database/
3.
https://www.zhangbj.com/p/1817.html
4.
https://www.postgresql.org/docs/16/release-16-4.html
5.
https://www.alibabacloud.com/help/en/hologres/query-the-storage-sizes-of-tables-and-databases

在数据驱动的时代,高效管理PostgreSQL数据库的存储空间至关重要。通过使用pg_size_pretty函数,你可以轻松查询并优化数据库和表的空间占用情况,从而显著提高系统性能。了解这些技巧不仅能帮助你避免磁盘空间不足的问题,还能发现不必要的冗余数据或过时索引,进一步释放宝贵的存储资源。掌握这些方法,让你的PostgreSQL数据库运行得更加顺畅和高效。

01

pg_size_pretty函数基础

pg_size_pretty是PostgreSQL中一个非常实用的函数,用于将字节表示的大小转换为更易读的格式(如KB、MB、GB等)。它接受一个整数参数(表示字节数),并返回一个格式化后的字符串结果。例如:

SELECT pg_size_pretty(123456789);

执行上述查询后,结果可能显示为117.7 MB

此外,pg_size_pretty还可以与其它系统函数结合使用,以更直观地展示数据库对象的大小信息。比如,我们可以查看特定表的大小:

SELECT pg_size_pretty(pg_relation_size('actor'));

这将返回actor表的大小,结果可能显示为16 kB。需要注意的是,pg_relation_size函数只返回表本身的大小,不包括索引。如果要获取表及其索引的总大小,可以使用pg_total_relation_size函数:

SELECT pg_size_pretty(pg_total_relation_size('actor'));

这将返回包含索引在内的总大小,例如72 kB

02

检查数据库空间使用情况

使用pg_size_pretty和相关函数,我们可以轻松检查数据库中各个对象的空间使用情况。以下是一些常用的查询示例:

  1. 查看单个表的大小
SELECT
    relname AS "relation",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM
    pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE
    nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind <> 'i'
    AND nspname !~ '^pg_toast'
    AND relname = 'your_table_name';

your_table_name替换为实际的表名,即可查看该表的总大小。

  1. 查看数据库中最大的几张表
SELECT
    relname AS "relation",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM
    pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE
    nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind <> 'i'
    AND nspname !~ '^pg_toast'
ORDER BY
    pg_total_relation_size(C.oid) DESC
LIMIT 5;

这条查询将返回数据库中最大的5张表及其大小。

  1. 查看整个数据库的大小
SELECT
    pg_size_pretty(pg_database_size('your_database_name')) AS size;

your_database_name替换为实际的数据库名,即可查看该数据库的总大小。

03

基于空间使用情况的优化建议

了解了数据库的空间使用情况后,我们可以采取一些措施来优化性能:

  1. 使用TOAST存储技术

PostgreSQL的TOAST(The Oversized-Attribute Storage Technique)机制用于处理大块数据。当数据超过2KB时,PostgreSQL会自动进行压缩或将其存储在单独的TOAST表中。对于VARCHAR、TEXT、JSON等变长数据类型,合理设置TOAST策略(PLAIN、EXTENDED、EXTERNAL、MAIN)可以有效节省空间。

  1. 清理冗余数据

定期清理不再需要的历史数据或重复数据,可以显著减少表的大小。使用VACUUM命令可以帮助回收删除行占用的空间。

  1. 优化表结构

检查表结构,去除不必要的列,合理设置数据类型。对于大表,可以考虑使用分区表来分散数据存储。

  1. 定期重建索引

索引会占用额外的空间,而且随着数据的增删改,索引可能会变得碎片化。定期使用REINDEX命令重建索引,可以优化其性能并减少空间占用。

  1. 启用压缩

对于备份文件,可以使用压缩技术来减少存储空间。PostgreSQL支持在备份过程中启用压缩,例如使用pg_dump时可以添加-Z--compress选项。

通过持续监控和优化数据库的空间使用情况,可以确保PostgreSQL数据库始终保持高性能和高可用性。而pg_size_pretty函数正是我们进行空间管理的得力助手,它让复杂的数据库管理任务变得简单直观。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号