暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG_STATS视图提供对存储在pg_statistic表里面的单列统计信息的访问

原创 霸王龙的日常 2022-09-28
987


关键内容介绍

PG_STATS视图提供对存储在pg_statistic表里面的单列统计信息的访问。

该视图记录的统计信息更新时间间隔由参数autovacuum_naptime设置。


关于自动清理参数autovacuum_naptime的说明

参数说明:设置两次自动清理操作的时间间隔。

该参数属于SIGHUP类型参数。

取值范围:整型,单位为s,最小值为1,最大值为2147483。

默认值:10min(即600s)


1、PG_STATS

表1 PG_STATS字段

名称

类型

引用

描述

schemaname

name

PG_NAMESPACE.nspname

包含表的模式名。 PG_NAMESPACE详见 表2 PG_NAMESPACE字段

tablename

name

PG_CLASS.relname

表名。 PG_CLASS 详见 表3  PG_CLASS字段

attname

name

PG_ATTRIBUTE.attname

字段的名称。PG_ATTRIBUTE 详见 表5 PG_ATTRIBUTE字段

inherited


-

如果为真,则包含继承的子列,否则只是指定表的字段。

null_frac

real

-

记录中字段为空的百分比。

avg_width

integer

-

字段记录以字节记的平均宽度。

n_distinct

real

-

  • 如果大于零,表示字段中独立数值的估计数目。
  • 如果小于零,表示独立数值的数目被行数除的负数。
    1. 用负数形式是因为ANALYZE认为独立数值的数目是随着表增长而增长;
    2. 正数的形式用于在字段看上去好像有固定的可能值数目的情况下。比如,-1表示一个唯一字段,独立数值的个数和行数相同。

n_dndistinct

real

-

标识dn1上字段中非NULL数据的唯一值的数目。

  • 如果大于零,表示独立数值的实际数目。
  • 如果小于零,表示独立数值的数目被行数除的负数。(比如,一个字段的数值平均出现概率为两次,则可以表示为n_dndistinct=-0.5)。
  • 如果等于零,表示独立数值的数目未知。

most_common_vals

anyarray

-

一个字段里最常用数值的列表。如果里面的字段数值是最常见的,则为NULL。

most_common_freqs

real[]

-

一个最常用数值的频率的列表,也就是说,每个出现的次数除以行数。如果most_common_vals是NULL,则为NULL。

histogram_bounds

anyarray

-

一个数值的列表,它把字段的数值分成几组大致相同热门的组。如果在most_common_vals里有数值,则在这个饼图的计算中省略。如果字段数据类型没有<操作符或者most_common_vals列表代表了整个分布性,则这个字段为NULL。

correlation

real

-

统计与字段值的物理行序和逻辑行序有关。它的范围从-1到+1。在数值接近-1或者+1的时候,在字段上的索引扫描将被认为比它接近零的时候开销更少,因为减少了对磁盘的随机访问。如果字段数据类型没有<操作符,则这个字段为NULL。

most_common_elems

anyarray

-

一个最常用的非空元素的列表。

most_common_elem_freqs

real[]

-

一个最常用元素的频率的列表。

elem_count_histogram

real[]

-

对于独立的非空元素的统计直方图。


2、PG_NAMESPACE

PG_NAMESPACE系统表存储名称空间,即存储schema相关的信息。

表2 PG_NAMESPACE字段

名称

类型

描述

oid

oid

行标识符(隐藏属性,必须明确选择)。

nspname

name

名称空间的名称。

nspowner

oid

名称空间的所有者。

nsptimeline

bigint

在数据库节点上创建此命名空间时的时间线。此字段为内部使用,仅在数据库节点上有效。

nspacl

aclitem[]

访问权限。

in_redistribution

“char”

是否处于重发布状态。

nspblockchain


  • 如果为真,则该模式为防篡改模式。
  • 如果为假,则此模式为非防篡改模式。



3、PG_CLASS

PG_CLASS系统表存储数据库对象信息及其之间的关系。

表3  PG_CLASS字段

名称

类型

描述

oid

oid

行标识符(隐藏属性,必须明确选择)。

relname

name

表、索引、视图等对象的名称。

relnamespace

oid

包含这个关系的名称空间的OID。

reltype

oid

对应这个表的行类型的数据类型(索引为零,因为索引没有pg_type记录)。

reloftype

oid

复合类型的OID,0表示其他类型。

relowner

oid

关系所有者。

relam

oid

如果行是索引,则就是所用的访问模式(B-tree,hash等)。

relfilenode

oid

这个关系在磁盘上的文件的名称,如果没有则为0。

reltablespace

oid

这个关系存储所在的表空间。如果为零,则意味着使用该数据库的缺省表空间。如果关系在磁盘上没有文件,则这个字段没有什么意义。

relpages

double precision

以页(大小为BLCKSZ)为单位的此表在磁盘上的大小,它只是优化器用的一个近似值。

reltuples

double precision

表中行的数目,只是优化器使用的一个估计值。

relallvisible

integer

被标识为全可见的表中的页的数量。此字段是优化器用来做SQL执行优化使用的。VACUUM、ANALYZE和一些DDL语句(例如,CREATE INDEX)会引起此字段更新。

reltoastrelid

oid

与此表关联的TOAST表的OID ,如果没有则为0。

TOAST表在一个从属表里“离线”存储大字段。

reltoastidxid

oid

对于TOAST表是它的索引的OID,如果不是TOAST表则为0。

reldeltarelid

oid

Delta表的OID。

Delta表附属于列存表。用于存储数据导入过程中的甩尾数据。

reldeltaidx

oid

Delta表的索引表OID。

relcudescrelid

oid

CU描述表的OID。

CU描述表(Desc表)附属于列存表。用于控制表目录中存储数据的可见性。

relcudescidx

oid

CU描述表的索引表OID。

relhasindex


如果它是一个表而且至少有(或者最近有过)一个索引,则为真。

它是由CREATE INDEX设置的,但DROP INDEX不会立即将它清除。如果VACUUM进程检测一个表没有索引,将会把它将清理relhasindex字段,将值设置为假。

relisshared


如果该表在中由所有数据库共享则为真。只有某些系统表(比如pg_database)是共享的。

relpersistence

"char"

  • p:表示永久表。
  • u:表示非日志表。
  • t:表示临时表。

relkind

"char"

  • r:表示普通表。
  • i:表示索引。
  • I:表示分区表GLOBAL索引。
  • S:表示序列。
  • v:表示视图。
  • c:表示复合类型。
  • t:表示TOAST表。
  • f:表示外表。

relnatts

smallint

关系中用户字段数目(除了系统字段以外)。在pg_attribute里肯定有相同数目对应行。

relchecks

smallint

表里的检查约束的数目;参阅pg_constraint表。

relhasoids


如果为关系中每行都生成一个OID则为真。

relhaspkey


如果这个表有一个(或者曾经有一个)主键,则为真。

relhasrules


如表有规则就为真。是否有规则可参考系统表PG_REWRITE。

relhastriggers


True表示表中有触发器,或者曾经有过触发器。系统表pg_trigger中记录了表和视图的触发器。

relhassubclass


如果有(或者曾经有)任何继承的子表,为真。

relcmprs

tinyint

表示是否启用表的启用压缩特性。需要特别注意,当且仅当批量插入才会触发压缩,普通的CRUD并不能够触发压缩。

  • 0表示其他不支持压缩的表(主要是指系统表,不支持压缩属性的修改操作)。
  • 1表示表数据的压缩特性为NOCOMPRESS或者无指定关键字。
  • 2表示表数据的压缩特性为COMPRESS。

relhasclusterkey


是否有局部聚簇存储。

relrowmovement


针对分区表进行update操作时,是否允许行迁移。

  • true:表示允许行迁移。
  • false:表示不允许行迁移。

parttype

"char"

表或者索引是否具有分区表的性质。

  • p:表示带有分区表性质。
  • n:表示没有分区表特性。
  • v:表示该表为HDFS的Value分区表。

relfrozenxid

xid32

该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。该字段用于跟踪此表是否需要为了防止事务ID重叠(或者允许收缩pg_clog)而进行清理。如果该关系不是表则为零(InvalidTransactionId)。

为保持前向兼容,保留此字段,新增relfrozenxid64用于记录此信息。

relacl

aclitem[]

访问权限。
查询的回显结果为以下形式:
      rolename=xxxx/yyyy  --赋予一个角色的权限
      =xxxx/yyyy   --赋予public的权限
xxxx表示赋予的权限,yyyy表示授予这个权限的角色。权限的参数说明请参见【表4 权限的参数说明】

relreplident

"char"

逻辑解码中解码列的标识:

  • d = 默认 (主键,如果存在)。
  • n = 无。
  • f = 所有列。
  • i = 索引的indisreplident被设置或者为默认。

relfrozenxid64

xid

该表中所有在这个之前的事务ID已经被一个固定的("frozen")事务ID替换。该字段用于跟踪此表是否需要为了防止事务ID重叠(或者允许收缩pg_clog)而进行清理。如果该关系不是表则为零(InvalidTransactionId)。

relbucket

oid

pg_hashbucket中的桶信息。

relbucketkey

int2vector

哈希分区列号。


4、表4 权限的参数说明

参数

参数说明

r

SELECT(读)

w

UPDATE(写)

a

INSERT(插入)

d

DELETE

D

TRUNCATE

x

REFERENCES

t

TRIGGER

X

EXECUTE

U

USAGE

C

CREATE

c

CONNECT

T

TEMPORARY

A

ALTER

P

DROP

m

COMMENT

i

INDEX

v

VACUUM

*

给前面权限的授权选项



5、PG_ATTRIBUTE系统表存储关于表字段的信息

表5 PG_ATTRIBUTE字段

名称

类型

描述

attrelid

oid

此字段所属表。

attname

name

字段名。

atttypid

oid

字段类型。

attstattarget

integer

控制ANALYZE为这个字段积累的统计细节的级别。

  • 零值表示不收集统计信息。
  • 负数表示使用系统缺省的统计对象。
  • 正数值的确切信息是和数据类型相关的。

对于标量数据类型,ATTSTATTARGET既是要收集的"最常用数值"的目标数目,也是要创建的柱状图的目标数量。

attlen

smallint

是本字段类型的pg_type.typlen的拷贝。

attnum

smallint

字段编号。

attndims

integer

如果该字段是数组,则是维数,否则是0 。

attcacheoff

integer

在磁盘上的时候总是-1 ,但是如果加载入内存中的行描述器中,它可能会被更新以缓冲在行中字段的偏移量。

atttypmod

integer

记录创建新表时支持的类型特定的数据(比如一个varchar字段的最大长度)。它传递给类型相关的输入和长度转换函数当做第三个参数。其值对那些不需要ATTTYPMOD的类型通常为-1。

attbyval


这个字段类型的pg_type.typbyval的拷贝。

attstorage

"char"

这个字段类型的pg_type.typstorage的拷贝。

attalign

"char"

这个字段类型的pg_type.typalign的拷贝。

attnotnull


这代表一个非空约束。可以改变这个字段以打开或者关闭这个约束。

atthasdef


这个字段有一个缺省值,此时它对应pg_attrdef表里实际定义此值的记录。

attisdropped


这个字段已经被删除了,不再有效。一个已经删除的字段物理上仍然存在表中,但会被分析器忽略,因此不能再通过SQL访问。

attislocal


这个字段是局部定义在关系中的。请注意一个字段可以同时是局部定义和继承的。

attcmprmode

tinyint

对某一列指定压缩方式。压缩方式包括:

  • ATT_CMPR_NOCOMPRESS
  • ATT_CMPR_DELTA
  • ATT_CMPR_DICTIONARY
  • ATT_CMPR_PREFIX
  • ATT_CMPR_NUMSTR

attinhcount

integer

这个字段所拥有的直接父表的个数。如果一个字段的父表个数非零,则它就不能被删除或重命名。

attcollation

oid

对此列定义的校对列。

attacl

aclitem[]

列级访问权限控制。

attoptions

text[]

字段属性。目前支持以下两种属性:

n_distinct,表示该字段的distinct值数量(不包含字表)

n_distinct_inherited,表示该字段的distinct值数量(包含字表)

attfdwoptions

text[]

外表字段属性。当前支持的dist_fdw、file_fdw、log_fdw未使用外表字段属性。

attinitdefval

bytea

存储了此列默认的值表达式。行存表的ADD COLUMN需要使用此字段。

attkvtype

tinyint

对某一列指定key value类型。类型包括:

0. ATT_KV_UNDEFINED : 默认

1. ATT_KV_TAG : 维度

2. ATT_KV_FIELD : 指标

3. ATT_KV_TIMETAG :时间列

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

文章被以下合辑收录

评论