gpperfmon 数据库
gpperfmon
数据库是一个专用数据库,Greenplum segment 主机上的数据收集代理
程序将查询和系统统计信息保存在这个数据库中。
gpperfmon
数据库通过 gpperfmon_install
命令行工具创建。
这个工具然后创建 gpmon
数据库角色并启用 master 和 segment 主机上的数据收集代理
程序。更多关于该工具使用和数据收集代理配置的信息,请参考 Greenplum 数据库工具指南
中的 gpperfmon_install
参考手册。
gpperfmon
数据库由三组表组成。它们分别用于在不同阶段捕捉查询和系统状态信息。
_now
系列表存储当前系统指标,例如活动查询等。_tail
系列表用于在数据保存到_history
系列表之前暂存数据。_tail
系列表仅供内部使用,不提供用户查询。_history
系列表用于存储历史数据。
_now
和 _tail
表的数据存储为文本文件,保存在 master 主机
文件系统中,通过外部表在 gpperfmon
数据库中访问。history
系列表
是 gpperfmon
数据库的常规内存表。只有运行超过一定时间(默认是 20 秒)的查询才会
保存到历史数据表中。 你可以通过设置 $MASTER_DATA_DIRECTORY/gpperfmon/conf/gpperfmon.conf
中的 min_query_time
参数来修改这个门限值。设置为 0 将会保存所有查询历史信息。
Note: gpperfmon
不支持 ALTER
SQL 命令。
ALTER
查询不会被记录在 gpperfmon
历史查询表中。
历史查询
表按月进行分区。关于移除老分区的信息,请参见 历史查询表分区保留 。
该数据库包含以下几类表:
[database_*](db-database.html#db-database)
系列表存储一个 Greenplum 数据库实例的查询负载信息。[diskspace_*](db-diskspace.html#db-diskspac)
系列表存储磁盘 空间指标。[log_alert_*](db-log-alert.html#CommandCenterDatabaseReference-log_alert)
系列表存储pg_log
中的错误和警告消息。[queries_*](db-queries.html#db-queries)
系列表存储高级查询 状态信息。[segment_*](db-segment.html#db-segment)
系列表存储 Greenplum 数据库 segment 实例的内存分配和统计信息。[socket_stats_*](db-socket-stats.html#db-socket_stats)
系列表存储一个 Greenplum 数据库实例中 socket 使用统计指标信息。 注意: 这些表为将来使用保留,当前没有填充信息。[system_*](db-system.html#db-system)
系列表存储系统工具程序指标。
gpperfmon
数据库还包含下列视图:
[dynamic_memory_info](db-dynamic-memory-info.html#CommandCenterDatabaseReference-dynamic_memory_info)
视图展示每个主机中所有 segments 的汇总, 以及每个主机中 动态内存使用量。[memory_info](db-memory-info.html#CommandCenterDatabaseReference-memory_info)
视图展示来自system_history
和segment_history
表的每个主机的内存信息.
历史查询表分区保留
gpperfmon
数据库中的 历史查询
表按月进行分区。分区
在需要时会以两个月为增量自动添加。
$MASTER_DATA_DIRECTORY/gpperfmon/conf/gpperfmon.conf
配置文件中的
partition_age
参数可以设置为要保留的每月最大分区数。添加新分区时,将自动
删除早于指定值的分区。
partition_age
的默认值是 0
, 这意味着管理员必须手动删除
不需要的分区。
警报日志处理和日志轮换
当 gp_gperfmon_enable
服务期配置参数设置为 true 时,
Greenplum 数据库 syslogger 会把警报消息写到一个 .csv
文件中。该文件位于
$MASTER_DATA_DIRECTORY/gpperfmon/logs
目录。
通过修改 postgresql.conf
文件中的 gpperfmon_log_alert_level
服务期配置参数,可以将写入日志消息级别设置为 none
,
warning
, error
, fatal
, 或者
panic
。默认的消息基本是 warning
。
日志存储的目录可以通过设置 $MASTER_DATA_DIRECTORY/gpperfmon/conf/gpperfmon.conf
配置文件中的 log_location
配置变量来改变。
syslogger 每 24 小时,或在当前日志文件达到或超过 1MB 时轮换警报日志。
如果单条错误消息包含一个长 SQL 语句或者长堆栈信息时,轮换日志文件可能超过 1MB。 此外,syslogger 会分批处理错误消息,每个日志记录过程分别对应一个单独的分块。日志块的 大小取决于操作系统; 例如,在 Red Hat Enterprise Linux 系统中, 它是 4096 字节。如果许多 Greenplum 数据库会话同时生成错误消息,则在检查文件大小并触发日志轮换之前, 日志文件可能会显着增长。
gpperfmon 数据收集过程
当 Greenplum 数据库启用 gpperfmon 支持下启动时, 它将创建一个 gpmmon
代理进程。
gpmmon
然后在 Greenplum 数据库集群的 master 主机和每个 segment 主机上启动一个
gpsmon
代理进程。Greenplum 数据库的 postmaster 进程监视 gpmmon
进程并在需要时重启该进程;gpmmon
进程监视和在需要时重启 gpsmon
进程。
gpmmon
进程以循环方式运行,并按一个可配置间隔检索 gpsmon
系列进程聚合的数据,并将其添加到 _now
和 _tail
外部数据库表
的数据文件, 然后存入 _history
常规内存数据库表中。
Note: gpperfmon
中的 log_alert
表流程不同于此,因为警报消息
由 Greenplum 数据库系统 logger 发送,而不是通过 gpsmon
发送。参见 警报日志处理和日志轮换 了解更多信息。
$MASTER_DATA_DIRECTORY/gpperfmon/conf/gpperfmon.conf
配置文件中的
两个配置参数控制着 gpmmon
被触发的频度:
quantum
参数是以秒为单位的频率,gpmmon
依此频率向 segment 节点的gpsmon
代理进程请求数据,并将获取到的数据添加到_now
和_tail
外部表数据文件中。quantum
参数的有效设定值是 10, 15, 20, 30, 以及 60. 默认值是 15.harvest_interval
参数是以秒为单位的频率, 依此频率将_tail
表中的数据移动到_history
表中。harvest_interval
至少是 30. 默认值为 120.
参见 Greenplum 数据库工具指南 中的 gpperfmon_install
管理工具
参考手册, 查阅 gpperfmon 配置参数完整列表。
以下步骤描述了,当 gpperfmon 支持启用时,数据从 Greenplum 数据库进入 gpperfmon
的流程。
- 在执行查询时, Greenplum 数据库查询调度程序和查询执行程序进程以 UDP 报文形式发送查询状态消息。
gp_gpperfmon_send_interval
服务器配置变量决定数据库发送这些消息的频率。 默认为每秒发送一次。 - 每个主机上的
gpsmon
进程接收 UDP 报文, 合并并汇总所包含的数据, 并添加其他主机指标,例如 CPU 和内存使用率。 gpsmon
进程继续累积数据,直到它们从gpmmon
接收到转储命令为止。gpsmon
进程通过发送其累积的状态数据和日志警报到一个gpmmon
事件侦听线程来响应 dump 命令。gpmmon
事件处理程序将指标保存到 master 主机的$MASTER_DATA_DIRECTORY/gpperfmon/data
目录下的.txt
文件。
在每一个 quantum
间隔 (默认为 15 秒), gpmmon
执行以下步骤:
- 发送一个 dump 命令到
gpsmon
进程。 - 收集和转换
.txt
文件(保存在the $MASTER_DATA_DIRECTORY/gpperfmon/data
目录中) 为.dat
外部数据文件, 支持通过gpperfmon
数据库中的_now
和_tail
外部表访问。 例如, 磁盘空间指标被添加到diskspace_now.dat
和_diskspace_tail.dat
带分隔符的文本文件中. 这些文本文件经由gpperfmon
数据库中的diskspace_now
和_diskspace_tail
表访问.
在每一个 harvest_interval
(默认为 120 秒), gpmmon
对每一个 _tail
文件执行以下步骤:1. 重命名 _tail
为一个 _stage
文件.
- 创建一个新的
_tail
文件. - 把数据从
_stage
文件追加进_tail
文件. - 允许一个 SQL 命令吧数据从
_tail
外部表插入进相应的_history
表中.例如,_database_tail
外部表的内容被插进database_history
常规 (内存) 表中. - Deletes the
_tail
file 在内容被加载进数据库表中后,删除_tail
文件。 - 收集所有
$MASTER_DATA_DIRECTORY/gpperfmon/logs
目录下的gpdb-alert-*.csv
文件 (除了 syslogger 已经打开并正在写入的最新文件) 到单个文件alert_log_stage
中. - 把
alert_log_stage
文件内容加载进gpperfmon
数据库的log_alert_history
表中。 - 清空
alert_log_stage
文件.
以下主题分别描述 gpperfmon
数据库每表中的内容。
- database_* 表
- diskspace_* 表
- interface_stats_* 表
- log_alert_* 表
- queries_* 表
- segment_* 表
- socket_stats_* 表
- system_* 表
- dynamic_memory_info 视图
- memory_info 视图
Parent topic: Greenplum数据库参考指南