本文主要介绍PostgreSQL如何找到需要收集的真空表信息,有很好的参考价值,希望对大家有所帮助。和边肖一起来看看
前言
一般在PostgreSQL中,因为经常需要UPDATE和DELETE表,所以表会产生碎片空间。
在PostgreSQL中,对于需要执行VACUUM的表,使用VACUUM只是将删除的空间标记为未使用,以便将来重用该空间,但是占用的空间不能立即返回给操作系统,所以需要使用VACUUM FULL来释放该空间,并立即将该空间返回给操作系统。
实现脚本
记录收集表创建
如果不存在,创建表格标签_真空_记录(文本);
收集需要真空表功能
创建或替换功能f _真空表()
返回无效的AS
$FUNCTION$
宣布
v_tablename文本;
v _ dead _ cond bigint
v_sql文本;
cur _ tablename REFCURSOR
v_vacuum_record文本;
开始
v _ vacuum _ record :=' tab _ vacuum _ record ';
从表中选择表名,表名!~ '^pg|^sql';
环
FETCH cur _ table name INTO v _ table name;
SELECT n _ dead _ tup INTO v _ dead _ cond FROM pg _ stat _ user _ tables WHERE rel name=v _ table name;
如果v_dead_cond 0,则
v _ SQL :=' INSERT INTO ' | | v _ VALUES _ record | | ' VALUES(| | chr(39)| | ' VALUE FULL ' | | v _ table name | | ';'| | chr(39)| | ')';
EXECUTE v _ sql
结束中频;
找不到时退出;
结束循环;
CLOSE cur _ tablename
END
$FUNCTION$
语言PLPGSQL
外壳脚本
#!/bin/bash
#获取环境变量
CURRDIR=$(CD ' $(dirname $ 0)';pwd)
TOPDIR=$(cd $CURRDIR/.pwd)
CONFIG=$TOPDIR/conf/host.ini
CT _ FILE=$ { TOPDIR }/SQL/CREATE _ VANCE _ TABLE _ RECORD . SQL
CT _ FUNCTION=$ { TOPDIR }/SQL/CHECK _ NEEDS _ VALUE _ TABLE _ FUNCTION . SQL
source $CONFIG
CONINFO=' psql-U $ USER-d $ DBNAME-h $ HOSTADDR-p $ PORT '
功能检查_状态()
{
Echo“检查数据库服务器状态是否正常!”
stat=`$ CONINFO-Akt-c ' SELECT 1 ' '
if[' $ { stat } '==' 1 '];然后
回应“服务器连接正常”
其他
回应“异常服务器连接,退出”
出口-1;
场电离(field ionization的缩写)
}
函数create_table()
{
Echo“创建一个需要真空收集的表格”
$ CONINFO-f $ CT _ FILE
}
函数create_function()
{
Echo“创建一个收集真空表的函数”
$ CONINFO-f $ CT _ FUNCTION