《Greenplum企业应用实战》一书第四章读书笔记。

数据字典

这里的数据字典指的是 Greenplum 中元数据信息,包括:pg_ 和 gp_ 开头的一些系统表。

oid

oid 是 PG/GP 中用来表示对象(包括:表、函数、操作符等等)的全局递增 id (是32位数字),GP 中绝大多数数据字典通过oid相互关联。

表名、函数名、操作符名可以和 oid 相互转换:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

-- 类似的还有
-- regclass : pg_class中的oid关联
-- regproc/regprocedure : pg_proc 中的oid关联
-- regoper/regoperator:pg_operator中的oid关联

-- pg_class表的oid是1259
select 1259::regclass ; 
select oid,relname from pg_class where oid='pg_class'::regclass;

常用数据字典

不同Greenplum版本数据字典有不同程度的变化,具体表结构可以参考Pivotal官网,或者参考Postgresql手册——系统表

  • gp_segment_configuration:集群配置信息、状态表。

  • pg_class:保存所有表、视图、序列、索引的元数据信息,所有DDL、DML需要和该表发生关系。

    • relname:表名
    • relnamespace:表空间oid和pg_namespace关联
    • relpages:磁盘页大小,一般默认32kb
    • reltuples:表的行数
    • relstorage:表类型,如堆表、appendonly表、视图、外部表
  • pg_attribute:字段信息表,所有表的字段类型、名称等信息被保存在该表中

    • attrelid:所属的表,关联pg_class.oid

    • attname: 字段名称

    • atttypid:字段类型,关联pg_type.oid

    • attstattarget:和ANALYZE相关的配置,0表示该字段不收集统计信息,负值表示默认统计,正值表示收集是创建的柱状图数目。

    • pg_attribute可以展示表的隐藏字段:

      • gp_segment_id:隐藏字段,表示改行记录的存储位置
      • tableoid
      • oid
      • cmax、xmax、cmin、xmin等
  • gp_distribution_policy:保存表的分布键

    • localoid:关联表的oid
    • distkey: int2vector类型的数组和pg_attribute的attnum绑定
  • pg_statistic:保存表的统计信息,以列为单位。

    • stanullfrac:该字段中为NULL记录的比率
    • stawidth:非NULL记录的平均存储宽度,以字节计
    • stadistinct:重复率,这个值有两种统计方式,1. 大于零的数值,此时该值是确切的非重复记录数;2. 小于0的值,此时表示重复率(如-0.5表示,一个记录平均出现2次)
  • pg_partition:分区信息表

    • oid:唯一标识分区表的oid和pg_class.oid不同
    • parrelid:关联 pg_class.oid
    • tablename/partitiontablename:表名和分区表名
    • parkind:分区模式
    • parlevel:表示分区的层级
    • paratts / parnatts:分区键信息
  • pg_cast:定义了Greenplum的类型转化关系

    • castsource:源类型,关联pg_type.oid
    • casttarget:目标类型,关联pg_type.oid
    • castfunc:转换函数,如果是0表示二进制兼容,关联pg_prov.oid
  • pg_locks:保存了数据库的锁信息(可以查询这张表的视图gp_toolkit.gp_locks_on_relation)

  • pg_stat_activity:当前正在运行的SQL

gp_toolkit

gp_toolkit是Greenplum为了方便查询数据字典定义了许多视图,用户通过该工具箱可以快速查询想要的信息。

关于gp_toolkit的详细内容可以参考gp_toolkit管理方案

可以关注以下几张表:

  • gp_bloat_diag:识别需要VACUUM或者VACUUM FULL命令回收已经删除的或者废弃的行占据的空间的表
  • gp_stats_missing:统计信息缺失的表(不含分区表的父表,或者一些空表)
  • gp_locks_on_relation:当前表上持有的锁
  • gp_locks_on_resqueue:当前资源队列持有的锁
  • gp_log_*:关于日志信息的外部表
  • gp_param_setting:配置信息表
  • gp_size_of_*:检查数据库对象的大小和磁盘空间