segment_*

segment_*

segment_*表包含Greenplum数据库Segment实例的内存分配统计。这会跟踪一个特定Segment实例上所有postgres进程消耗的内存量,以及根据postgresql.conf配置参数gp_vmem_protect_limit留给Segment的可用内存量。一个导致Segment超过该限制的查询将被取消从而防止系统级别的内存不足错误。这个参数的更多信息请见Greenplum数据库参考指南

有三个Segment表,它们都有相同的列:

  • segment_now是一个外部表,其数据文件存储在$MASTER_DATA_DIRECTORY/gpperfmon/data中。在从数据收集代理收集数据和自动提交到segment_history表之间的时段,当前内存分配数据存储在segment_now中。
  • segment_tail是一个外部表,其数据文件存储在$MASTER_DATA_DIRECTORY/gpperfmon/data中。这是一个过渡表,其中存放着已经从segment_now中清除但是还没有提交到segment_history的内存分配数据。它通常只包含了几分钟的数据。
  • segment_history是一个常规表,它存储数据库范围的历史内存分配数据。它被预分区为每月的分区表。分区会根据需要进行两个月的增量添加。管理员必须要删除那些不再需要的月份的旧分区。

一个特定的Segment实例通过它的hostnamedbid(根据gp_segment_configuration的唯一Segment标识符)来标识。

列名 类型 描述
ctime

timestamp(0)

(without time zone)

该行被创建的时间。
dbid int Segment的ID(dbid来自于gp_segment_configuration)。
hostname charvar(64) Segment的主机名。
dynamic_memory_used bigint 在该Segment上执行的查询处理分配的动态内存量(以字节为单位)。
dynamic_memory_available bigint 在达到通过参数gp_vmem_protect_limit设置的值前该Segment还能请求的额外的动态内存量(以字节为单位)。

主机的聚合内存分配与利用另见视图memory_infodynamic_memory_info