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 
$$
begin
	while num > 0 loop
		insert 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;
exception
	when others then
	raise exception'(%)',SQLERRM;
end;
$$ language plpgsql;


-- 插入100*10000条数据
select batch_insert_proc(1000*1000); 

--分析表统计信息
analyze t_user;

--查询统计信息
SELECT
    relname 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;



--查询表数据量大小信息

SELECT
    table_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_size
    LEFT JOIN (
        SELECT
            relname,
            reltuples :: DECIMAL ( 19, 0 ) 表行数 
        FROM
        pg_class r
        JOIN pg_namespace n ON ( relnamespace = n.oid ) 
        WHERE
            relkind = 'r' 
            AND n.nspname = 'public' 
        ) table_num ON table_num.relname = table_size.relname 
WHERE
    schemaname = 'public' 
ORDER BY
    pg_relation_size ( relid ) DESC;

--查询表的大小信息
  表名  | 表数据大小 | 表总索引大小 |  表总大小  | 表行数  
--------+------------+--------------+------------+---------
 t_user | 71 MB      | 21 MB        | 93 MB      | 1000000
 tab1   | 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    16661


dbtest=> truncate table t_user;
TRUNCATE TABLE


--truncate后数据文件大小
[postgres@SJZTproxy-103-38 16646]$ du -sh 16661
0       16661



--删除索引

drop index t_user_pkey;
相关推荐
结衣结衣.13 分钟前
protobuf介绍与快速上手
java·服务器·html
源力祁老师22 分钟前
Odoo日志系统核心组件_logger
网络·数据库·php
STCNXPARM25 分钟前
Linux PCI/PCIe子系统深度剖析
linux·运维·服务器·pci/pcie
郝学胜-神的一滴30 分钟前
深入理解Linux套接字(Socket)编程:从原理到实践
linux·服务器·开发语言·网络·c++·程序人生·算法
EverydayJoy^v^1 小时前
RH134学习进程——八.管理存储堆栈
linux·运维·服务器
洋不写bug2 小时前
数据库基础核心操作——CRUD,超详细解析,搭配表格讲解和需求的实现。
数据库
马猴烧酒.2 小时前
JAVA后端用户登录与鉴权详解
java·数据库·sql
heartbeat..2 小时前
Redis 常用命令全解析:基础、进阶与场景化实战
java·数据库·redis·缓存
数据知道2 小时前
PostgreSQL 实战:一文掌握如何优雅的进行递归查询?
大数据·数据库·postgresql
陌上丨2 小时前
MySQL8.0高可用集群架构实战
数据库·mysql·架构