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;
相关推荐
落日归屿4 分钟前
AI 商品图做完后,为什么还要管图层?
数据库
阿明65 分钟前
进程替换【Linux】
linux·运维·服务器
拾贰_C12 分钟前
【English | conversation 】call | 抖音AI短句情景:打电话---come over
数据库·redis·缓存
2601_9628857222 分钟前
AlphaFeed 支持哪些 K 线周期?period参数怎么传?
前端·数据库·python
麦壳饼1 小时前
架构深度解析:SonnetDB 的写入与查询路径
数据库·sonnetdb
啦啦啦啦啦zzzz1 小时前
一致性哈希
服务器·算法·哈希算法·c++20·分布式存储
倔强的石头1061 小时前
【Linux指南】动静态库系列(十二):库工程发布与错误排查:从能跑到可维护
linux·运维·服务器
gudufy1 小时前
ASP.NET Core 多租户如何动态创建数据库?数据库初始化怎么做?
数据库·blazor·admin
掉进电商坑三年没爬出来的东叔1 小时前
云服务器搭建个人网站实战:从零到公网访问,含域名HTTPS
运维·服务器·https
IT大白鼠1 小时前
彭大帅的AI运维助手跨出 Linux:全面接管 Windows 服务器
运维·服务器·人工智能