Postgresql表和索引占用空间回收释放(表空间膨胀)

2024-09-03 00:20

本文主要是介绍Postgresql表和索引占用空间回收释放(表空间膨胀),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Postgresql表和索引占用空间回收释放(表空间膨胀)


-- 1.创建测试表t_user
create table if not exists t_user(id serial primary key,user_name varchar(255),pass_word varchar(255),create_time date,dr char(1)
);create index ind_time on t_user(create_time);-- 2.注释
comment on column t_user.id is '测试表';
comment on column t_user.user_name is '账号';
comment on column t_user.pass_word is '密码';
comment on column t_user.create_time is '创建日期';
comment on column t_user.dr is 'delete remark';-- 创建存储过程插入数据
create or replace function batch_insert_proc(num int) returns void as 
$$
beginwhile num > 0 loopinsert into t_user(user_name,pass_word,create_time,dr) values('username'||round(random()*num),'password'||round(random()*num),now(),0);num = num -1;end loop;
exceptionwhen others thenraise exception'(%)',SQLERRM;
end;
$$ language plpgsql;-- 插入100*10000条数据
select batch_insert_proc(1000*1000); --分析表统计信息
analyze t_user;--查询统计信息
SELECTrelname AS "表名",seq_scan AS "顺序扫描次数",seq_tup_read AS "顺序扫描行数",idx_scan AS "索引扫描次数",idx_tup_fetch AS "通过索引获取的行数",n_tup_ins AS "插入的行数",n_tup_upd AS "更新的行数",n_tup_del AS "删除的行数",n_live_tup AS "表中当前行数",n_dead_tup AS "表中已删除的行数",last_vacuum AS "上次VACUUM操作的时间",last_autovacuum AS "上次自动VACUUM操作的时间",last_analyze AS "上次ANALYZE操作的时间",last_autoanalyze AS "上次自动ANALYZE操作的时间"
FROM pg_stat_user_tables;--查询表数据量大小信息SELECTtable_size.relname 表名,pg_size_pretty ( pg_relation_size ( relid ) ) 表数据大小,pg_size_pretty ( pg_indexes_size ( relid ) ) 表总索引大小,pg_size_pretty ( pg_total_relation_size ( relid ) ) 表总大小,表行数 
FROM
pg_stat_user_tables table_sizeLEFT JOIN (SELECTrelname,reltuples :: DECIMAL ( 19, 0 ) 表行数 FROMpg_class rJOIN pg_namespace n ON ( relnamespace = n.oid ) WHERErelkind = 'r' AND n.nspname = 'public' ) table_num ON table_num.relname = table_size.relname 
WHEREschemaname = 'public' 
ORDER BYpg_relation_size ( relid ) DESC;--查询表的大小信息表名  | 表数据大小 | 表总索引大小 |  表总大小  | 表行数  
--------+------------+--------------+------------+---------t_user | 71 MB      | 21 MB        | 93 MB      | 1000000tab1   | 8192 bytes | 0 bytes      | 8192 bytes |       1
(2 rows)--物理文件大小信息
[postgres@SJZTproxy-103-38 16646]$ du -sh 16675
72M     16675
[postgres@SJZTproxy-103-38 16646]$ du -sh 16677
22M     16677--备注:
--获取表的物理文件路径
select pg_relation_filenode('t_user'),pg_relation_filepath('t_user');
--查看索引对应的物理文件路劲
select pg_relation_filenode('ind_time'),pg_relation_filepath('ind_time');--truncate前数据文件大小 
[postgres@SJZTproxy-103-38 16646]$ ls -l 16661
-rw------- 1 postgres postgres 6832128 Sep  2 16:54 16661
[postgres@SJZTproxy-103-38 16646]$ 
[postgres@SJZTproxy-103-38 16646]$ du -sh 16661
6.6M    16661dbtest=> truncate table t_user;
TRUNCATE TABLE--truncate后数据文件大小
[postgres@SJZTproxy-103-38 16646]$ du -sh 16661
0       16661--删除索引drop index t_user_pkey;

这篇关于Postgresql表和索引占用空间回收释放(表空间膨胀)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131487

相关文章

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库