PostgreSQL如何找到需要收集的真空表信息
  • 作者:admin
  • 发表时间:2021-04-27 07:51
  • 来源:未知

本文主要介绍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