1.存储过程语句
create or replace procedure get_partition_dead_tuples(tablename text)
as
declare
cursor c1 is select oid,relname from pg_partition where parentid=(select parentid from pg_partition where relname=tablename) and parttype='p';
var1 bigint;
var2 bigint;
var3 bigint;
var4 text;
begin
open c1;loop
fetch c1 into var1,var4;
exit when c1%notfound;
select pg_stat_get_partition_dead_tuples into var2 from pg_stat_get_partition_dead_tuples(var1);
select pg_stat_get_partition_tuples_deleted into var3 from pg_stat_get_partition_tuples_deleted(var1);
dbms_output.put_line(' ');
dbms_output.put_line(tablename||' partition '||var4||' dead_tuples '||var2);
dbms_output.put_line(tablename||' partition '||var4||' tuples_deleted '||var3);
dbms_output.put_line('select * from pg_size_pretty(pg_partition_size('''||tablename||''','||''''||var4||'''));');
dbms_output.put_line('analyze '||tablename||' partition ('|| var4||');');
dbms_output.put_line('vacumm full '||tablename||' partition ('|| var4||');');
end loop;
-- dbms_output.put_line('select * from hstore_full_merge('''||tablename||''');');
close c1;
end;
/
不需要的可使用**–**注释掉,或自定义添加新语句。

2.调用存储过程
(1)少量分区的表可直接前台调用
call get_partition_dead_tuples('student_grade');

(2)分区比较多可生成到文件,批量编辑后进行执行
[omm@gsdb01 ~]$ gsql -d testdb -p25308 -c "call get_partition_dead_tuples('student_grade')" &>/tmp/test.txt
[omm@gsdb01 ~]$ cat /tmp/test.txt

只保留可执行语句:
testdb=# \e
testdb$# /
CREATE PROCEDURE
testdb=# \p
create or replace procedure get_partition_dead_tuples(tablename text)
as
declare
cursor c1 is select oid,relname from pg_partition where parentid=(select parentid from pg_partition where relname=tablename) and parttype='p';
var1 bigint;
var2 bigint;
var3 bigint;
var4 text;
begin
open c1;loop
fetch c1 into var1,var4;
exit when c1%notfound;
select pg_stat_get_partition_dead_tuples into var2 from pg_stat_get_partition_dead_tuples(var1);
select pg_stat_get_partition_tuples_deleted into var3 from pg_stat_get_partition_tuples_deleted(var1);
dbms_output.put_line(' ');
-- dbms_output.put_line(tablename||' partition '||var4||' dead_tuples '||var2);
-- dbms_output.put_line(tablename||' partition '||var4||' tuples_deleted '||var3);
dbms_output.put_line('select * from pg_size_pretty(pg_partition_size('''||tablename||''','||''''||var4||'''));');
dbms_output.put_line('analyze '||tablename||' partition ('|| var4||');');
dbms_output.put_line('vacuum full '||tablename||' partition ('|| var4||');');
end loop;
-- dbms_output.put_line('select * from hstore_full_merge('''||tablename||''');');
close c1;
end;
testdb=# call get_partition_dead_tuples('student_grade');
select * from pg_size_pretty(pg_partition_size('student_grade','gym'));
analyze student_grade partition (gym);
vacuum full student_grade partition (gym);
select * from pg_size_pretty(pg_partition_size('student_grade','phys'));
analyze student_grade partition (phys);
vacuum full student_grade partition (phys);
select * from pg_size_pretty(pg_partition_size('student_grade','history'));
analyze student_grade partition (history);
vacuum full student_grade partition (history);
select * from pg_size_pretty(pg_partition_size('student_grade','math'));
analyze student_grade partition (math);
vacuum full student_grade partition (math);
get_partition_dead_tuples
---------------------------
(1 row)
对表分区进行analyze及vacuum full

–结束
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




