Greenplum中的gpperfmon数据库
Tags: gpccgpperfmonGreenPlum监控
简介
gpperfmon 数据库是一个专用数据库,包含查询状态和系统指标的可选的性能管理数据库,Greenplum segment 主机上的数据收集代理程序将查询和系统统计信息保存在这个数据库中。
gpperfmon_install
管理工具创建名为gpperfmon
的数据库, 并启用运行在Greenplum数据库Master和Segment节点上的数据收集代理。 运行在节点上的数据收集代理会从节点上收集查询状态,还包括诸如CPU和内存使用量等系统指标。 Master节点上的代理周期性的(通常15秒)从节点代理上收集数据并更新gpperfmon
数据库。 用户可以查询gpperfmon
数据库来查看查询和系统指标。
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_* 系列表存储一个 Greenplum 数据库实例的查询负载信息。
- diskspace_* 系列表存储磁盘 空间指标。
- logalert* 系列表存储 pg_log 中的错误和警告消息。
- queries_* 系列表存储高级查询 状态信息。
- segment_* 系列表存储 Greenplum 数据库 segment 实例的内存分配和统计信息。
- socketstats* 系列表存储一个 Greenplum 数据库实例中 socket 使用统计指标信息。 注意: 这些表为将来使用保留,当前没有填充信息。
- system_* 系列表存储系统工具程序指标。
gpperfmon 数据库还包含下列视图:
- dynamic_memory_info 视图展示每个主机中所有 segments 的汇总, 以及每个主机中 动态内存使用量。
- 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 文件执行以下步骤:
重命名 _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 数据库每表中的内容
以下主题分别描述 gpperfmon 数据库每表中的内容。
- database_* 表
- diskspace_* 表
- interfacestats* 表
- logalert* 表
- queries_* 表
- segment_* 表
- socketstats* 表
- system_* 表
- dynamic_memory_info 视图
- memory_info 视图
database_* 表
database_* 表存储一个 Greenplum 数据库实例的工作负载信息。这里一共有三张表,每张表都具有相同的结构(列):
- database_now 是一个外部表,其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 从数据采集代理程序获得数据以后,自动提交到 database_history 表之前,当前查询工作负载数据存储在 database_now 表中。
- database_tail 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 它是一个过渡表,当数据已经从 database_now 中清除,但还没有提交到 database_history 表中时,暂存在这里。它通常仅包含数据几分钟时间。
- database_history 是一个常规表, 用于存储历史查询工作负载数据。 它已预先设置为按月分区。 分区会根据需要以两个月为增量自动添加。
列 | 类型 | 说明 |
---|---|---|
ctime | timestamp | 该行的创建时间. |
queries_total | int | 采集数据时,Greenplum 数据库中的查询总数量. |
queries_running | int | 采集数据时,活动的查询数量. |
queries_queued | int | 采集数据时,资源组或资源队列中处于等待状态的查询数量(与当前使用的资源管理器相关). |
diskspace_* 表
diskspace_* 表存储磁盘空间指标。
- diskspace_now 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 在数据从 gpperfmon 数据采集代理程序获得数据以后,自动提交到 diskspace_history 表之前, 当前磁盘空间指标数据存储在 database_now 表中。
- diskspace_tail 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 它是一个过渡表,当数据已经从 diskspace_now 中清除,但还没有提交到 diskspace_history表中时,暂存在这里。它通常仅包含数据几分钟时间。
- diskspace_history 是一个常规表, 用于存储历史磁盘空间指标。 它已预先设置为按月分区。 分区会根据需要以两个月为增量自动添加。
列 | 类型 | 说明 |
---|---|---|
ctime | timestamp(0) without time zone | 磁盘空间测量时间. |
hostname | varchar(64) | 磁盘空间测量对应的主机名称. |
Filesystem | text | 磁盘空间测量对应的文件系统名称. |
total_bytes | bigint | 文件系统的总字节数. |
bytes_used | bigint | 文件系统中已使用字节数. |
bytes_available | bigint | 文件系统中可用的字节数. |
interface_stats_*
表
interface_stats_*
表存储 一个 Greenplum 数据库实例在每个活动网络接口上 的通信统计指标。
这些表为将来使用保留,当前没有填充信息。
一共有三张 interface_stats 表, 它们具有相同的结构(列):
- interface_stats_now 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data.
- interface_stats_tail 是一个外部表, 其数据文件位于 in $MASTER_DATA_DIRECTORY/gpperfmon/data. 它是一个存储接口统计指标的过渡表,当数据已经从 interface_stats_now 中清除,但还没有提交到 interface_stats_history表中时,暂存在这里。 它通常仅包含数据几分钟时间。
- interface_stats_history 是一个常规表, 用于存储历史接口统计指标。 它已预先设置为按月分区。 分区会根据需要以两个月为增量自动添加。
列 | 类型 | 说明 |
---|---|---|
interface_name | string | 接口名称. 例如: eth0, eth1, lo. |
bytes_received | bigint | 接收字节数. |
packets_received | bigint | 接收报文数. |
receive_errors | bigint | 接收数据时,发生的错误数. |
receive_drops | bigint | 接收数据时,丢弃报文的次数. |
receive_fifo_errors | bigint | 接收数据时,FIFO (先进先出) 错误发生的次数. |
receive_frame_errors | bigint | 接收数据时,帧错误发生的次数. |
receive_compressed_packets | int | 接受的压缩格式报文数. |
receive_multicast_packets | int | 接受的多播报文数. |
bytes_transmitted | bigint | 传输字节数. |
packets_transmitted | bigint | 传输报文数. |
transmit_errors | bigint | 数据传输时,发生的错误数. |
transmit_drops | bigint | 数据传输时,丢弃报文的次数. |
transmit_fifo_errors | bigint | 数据传输时,FIFO (先进先出) 错误发生的次数. |
transmit_collision_errors | bigint | 数据传输时,碰撞错误发生的次数. |
transmit_carrier_errors | bigint | 数据传输时,载波错误发生的次数. |
transmit_compressed_packets | int | 传输的压缩格式报文数. |
log_alert_*
表
log_alert_*
表存储 pg_log 错误和警报.
参考 警报日志处理和日志轮换 了解关于配置 gpperfmon 系统 logger 的更多信息.
一共有三张 log_alert 表, 所有这些表具有相同的列:
- log_alert_now 是一个外部表,它的数据存储在 $MASTER_DATA_DIRECTORY/gpperfmon/logs 目录下的 .csv 文件中。 在数据从 gpperfmon 代理自动提交到 log_alert_history 表期间, 当前的 pg_log 错误和警报数据在 log_alert_now 中。.
- log_alert_tail 是一个外部表,它的数据存储在 $MASTER_DATA_DIRECTORY/gpperfmon/logs/alert_log_stage 中. 这是一个过渡表,当数据已经从 log_alert_now 中清除,但还没有提交到 log_alert_history 中时,暂存在这里。该表包括所有警报日志中的记录, 但最新的除外。它通常仅包含数据几分钟时间。
- log_alert_history 是一个常规表,用于存储数据库范围内的历史错误和警告数据。 它已预先设置为按月分区。分区会根据需要以两个月为增量自动添加。
列 | 类型 | 说明 |
---|---|---|
logtime | timestamp with time zone | 此日志的时间戳 |
loguser | text | 查询的用户 |
logdatabase | text | 查询的用户 |
logpid | text | 进程 ID |
logthread | text | 线程号 |
loghost | text | 主机名或 IP 地址 |
logport | text | 端口号 |
logsessiontime | timestamp with time zone | 会话时间戳 |
logtransaction | integer | 事务 ID |
logsession | text | 会话 ID |
logcmdcount | text | 命令数量 |
logsegment | text | Segment 编号 |
logslice | text | Slice 编号 |
logdistxact | text | 分布式事务 |
loglocalxact | text | 本地事务 |
logsubxact | text | 子事务 |
logseverity | text | 日志级别 |
logstate | text | 日志状态 |
logmessage | text | 日志信息 |
logdetail | text | 详细信息 |
loghint | text | 提示信息 |
logquery | text | 查询内容 |
logquerypos | text | 查询位置 |
logcontext | text | 上下文信息 |
logdebug | text | 调试 |
logcursorpos | text | 光标位置 |
logfunction | text | 函数信息 |
logfile | text | 源代码文件 |
logline | text | 源代码行 |
logstack | text | 堆栈信息 |
queries_* 表
queries_* 系列表存储高级查询状态信息.
tmid, ssid 和 ccnt 列是唯一标识特定查询的组合键.
一共有三张查询表,所有查询表都具有相同的列:
- queries_now 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 在数据从 gpperfmon 代理自动提交到 queries_history 表期间, 当前查询状态存储在 queries_now 中。
- queries_tail 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 它是一个过渡表。当数据已经从 queries_now 中清除,但还没有提交到 queries_history 时,查询状态数据保存在这里。它通常仅包含数据几分钟时间.
- queries_history 是存储历史查询状态数据的常规表。 它被预定义为按月进行分区. 分区会根据需要以两个月为增量自动添加。
列 | 类型 | 说明 |
---|---|---|
ctime | timestamp | 该行的创建时间. |
tmid | int | 特定查询的时间标识符. 与特定查询关联的所有记录具有相同的 tmid. |
ssid | int | 与 gp_session_id 关联的会话 ID. 与特定查询关联的所有记录具有相同的 ssid. |
ccnt | int | 与 gp_command_count 关联的命令号. 与特定查询关联的所有记录具有相同的 ccnt. |
username | varchar(64) | 发出查询的 Greenplum 角色名称. |
db | varchar(64) | 查询的数据库名称. |
cost | int | 在此版本中未实现. |
tsubmit | timestamp | 查询的提交时间. |
tstart | timestamp | 查询的开始时间. |
tfinish | timestamp | 查询的结束时间. |
status | varchar(64) | 查询状态 — start, done, or abort. |
rows_out | bigint | 查询输出的行数. |
cpu_elapsed | bigint | 执行该查询的全部 segments 的全部进程的 CPU 时间 (单位: 秒). 它是从数据库系统中所有活动的主 segments 获取的 CPU 时间总和。请注意,如果查询运行时间短于 quantum 的值,则该值记录为 0。 即使查询运行时间大于 min_query_time 值, 但是低于 quantum 的值, 也会记录为 0。 |
cpu_currpct | float | 当前执行此查询的所有进程的 CPU 平均百分比。 对在每个 segment 上运行的所有进程的百分比求平均值, 然后计算所有这些值的平均值来获得该指标。当前的 CPU 平均百分比在 history 数据和 tail 数据中始终为零。 |
skew_cpu | float | 显示该查询在系统中的处理偏斜量。 当一个 segment 对查询执行的处理量不成比例时,就会发生处理 / CPU 偏斜。 此值是此查询所有 segment 中 CPU% 度量的方差系数乘以 100。 例如,.95 的值表示为 95。 |
skew_rows | float | 显示系统中的行偏斜量。 当一个 segment 产生的查询行数不成比例时,就会发生行偏斜。 该值是该查询所有 segment 的 rows_in 指标的方差系数乘以100。 例如,.95 的值显示为 95。 |
query_hash | bigint | 在此版本中未实现. |
query_text | text | 该查询的 SQL 文本. |
query_plan | text | 查询计划文本. 在此版本中未实现. |
application_name | varchar(64) | 应用程序的名称. |
rsqname | varchar(64) | 如果基于资源队列的资源管理方案被使用,则此列为资源队列的名称. |
rqppriority | varchar(64) | 如果基于资源队列的资源管理方案被使用, 则此列为查询优先级 — max, high, med, low, 或 min. |
segment_* 表
The segment_* 包含 Greenplum 数据库 segment 实例的内存分配统计信息。 它跟踪每个特定 segment 实例上全部 postgres 进程的内存消费数量, 以及由当前资源管理方案(基于资源组或基于资源队列)设置的每个 segment 可用的剩余内存数量. 参见 Greenplum 数据库管理员指南 了解更多关于资源管理方案的详细信息.
一共有三张 segment 表, 每张表都具有相同的结构(列):
- segment_now 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 在数据从 gpperfmon 数据采集代理程序获得以后,自动提交到 segment_history 表之前, 当前系统使用指标数据存储在 segment_now 表中。
- segment_tail 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 它是一个内存分配信息的过渡表,当数据已经从 segment_now 中清除,但还没有提交到 segment_history 表中时,暂存在这里。 它通常仅包含数据几分钟时间。
- segment_history 是一个常规表, 用于存储历史内存分配指标。 它已预先设置为按月分区。 分区会根据需要以两个月为增量自动添加。
每个特定 segment 实例通过 hostname 和 dbid (gp_segment_configuration 系统目录表中的 segment 唯一标识) 定义.
列 | 类型 | 说明 |
---|---|---|
ctime | timestamp(0)(without time zone) | 该行的创建时间. |
dbid | int | segment ID (gp_segment_configuration 中的 dbid). |
hostname | charvar(64) | segment 主机名称. |
dynamic_memory_used | bigint | 当前 segment 上分配给查询进程的动态内存数量(单位: 字节). |
dynamic_memory_available | bigint | 在到达当前资源管理方案(基于资源组或基于资源队列)设置限制前,segment 上还可分配的动态内存数量(单位: 字节). |
参见 memory_info 视图和 dynamic_memory_info 视图了解更多主机上内存分配汇总和使用信息.
socket_stats_*
表
socket_stats_*
表存储一个 Greenplum 数据库实例中 socket 使用统计指标。 一共有三张表,所有查询表都具有相同的列:
这些表为将来使用保留,当前没有填充信息。
- socket_stats_now 是一个外部表,它的数据存储在 $MASTER_DATA_DIRECTORY/gpperfmon/data.
- socket_stats_tail 是一个外部表,它的数据存储在 $MASTER_DATA_DIRECTORY/gpperfmon/data. 这是一个过渡表,当数据已经从 socket_stats_now 中清除,但还没有提交到 socket_stats_history中时,暂存在这里。它通常仅包含数据几分钟时间。
- socket_stats_history 是一个常规表,用于存储 socket 历史统计指标。 它已预先设置为按月分区。分区会根据需要以两个月为增量自动添加。
列 | 类型 | 说明 |
---|---|---|
total_sockets_used | int | 系统中的 socket 总数. |
tcp_sockets_inuse | int | 使用中的 TCP socket 数量. |
tcp_sockets_orphan | int | 孤儿 TCP socket 数量. |
tcp_sockets_timewait | int | Time-Wait 状态的 TCP socket 数量. |
tcp_sockets_alloc | int | 已分配的 TCP socket 数量. |
tcp_sockets_memusage_inbytes | int | TCP socket 消耗的内存总量. |
udp_sockets_inuse | int | 使用中的 UDP socket 数量. |
udp_sockets_memusage_inbytes | int | UDP socket 消耗的内存总量. |
raw_sockets_inuse | int | 使用中的 RAW socket 数量. |
frag_sockets_inuse | int | 使用中的 FRAG socket 数量. |
frag_sockets_memusage_inbytes | int | FRAG socket 消耗的内存总量. |
system_* 表
system_* 表存储系统使用指标。 这里一共有三张表,每张表都具有相同的结构(列):
- system_now 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 在数据从 gpperfmon 数据采集代理程序获得以后,自动提交到 system_history 表之前, 当前系统使用指标数据存储在 system_now 表中。
- system_tail 是一个外部表, 其数据文件位于 $MASTER_DATA_DIRECTORY/gpperfmon/data. 它是一个过渡表,当数据已经从 system_now 中清除,但还没有提交到 system_history 表中时,暂存在这里。它通常仅包含数据几分钟时间。
- system_history 是一个常规表, 用于存储历史系统使用指标。 它已预先设置为按月分区。 分区会根据需要以两个月为增量自动添加。
列 | 类型 | 说明 |
---|---|---|
ctime | timestamp | 该行的创建时间. |
hostname | varchar(64) | 与系统指标相关的 Segment 或 master 主机名称. |
mem_total | bigint | 主机全部系统内存(单位: 字节). |
mem_used | bigint | 主机已使用的系统内存(单位: 字节). |
mem_actual_used | bigint | 主机实际已使用的内存(单位: 字节) (不包括缓存和缓冲保留内存). |
mem_actual_free | bigint | 主机空闲内存(单位: 字节) (不包括缓存和缓冲保留内存). |
swap_total | bigint | 主机全部交换内存(单位: 字节). |
swap_used | bigint | 主机已使用的交换内存(单位: 字节). |
swap_page_in | bigint | 交换进的页数量. |
swap_page_out | bigint | 交换出的页数量. |
cpu_user | float | Greenplum 系统用户的 CPU 使用量. |
cpu_sys | float | 主机 CPU 使用量. |
cpu_idle | float | 指标收集时空闲的 CPU 容量. |
load0 | float | 前一分钟的 CPU 平均负载. |
load1 | float | 前五分钟的 CPU 平均负载. |
load2 | float | 前十五分钟的 CPU 平均负载. |
quantum | int | 此指标的指标采集间隔. |
disk_ro_rate | bigint | 每秒磁盘读取操作次数. |
disk_wo_rate | bigint | 每秒磁盘写入操作次数. |
disk_rb_rate | bigint | 磁盘每秒读取的字节数. |
disk_wb_rate | bigint | 磁盘每秒写入的字节数. |
net_rp_rate | bigint | 系统网络每秒读取的报文数量. |
net_wp_rate | bigint | 系统网络每秒写入的报文数量. |
net_rb_rate | bigint | 系统网络每秒读取的字节数. |
net_wb_rate | bigint | 系统网络每秒写入的字节数. |
dynamic_memory_info 视图
dynamic_memory_info 视图展示一个 segment 主机上所有 segment 实例已用内存和可用动态内存的总和。 动态内存指 Greenplum 数据库实例在启动取消进程前, 允许一个 segment 实例上查询进程使用的内存(超过该数量则启动取消进程)。 这个限制有当前所使用的资源管理方案决定 (基于资源组或基于资源队列), 按每个 segment 进行评估.
列 | 类型 | 说明 |
---|---|---|
ctime | timestamp(0) without time zone | 在 segment_history 表中的创建时间. |
hostname | varchar(64) | 与这些系统内存指标相关的 Segment 或 master 主机名称. |
dynamic_memory_used_mb | numeric | segment 节点上分配给查询进程的动态内存大小(单位: MB). |
dynamic_memory_available_mb | numeric | segment 节点上可分配给查询进程的动态内存大小(单位: MB). 注意这个值是所有 segment 节点上可分配内存的总和. 虽然报告了这么多可分配内存, 也可能一个或多个 segment 在主机上分配的内存已经超过了它们的限制。 |
memory_info 视图
memory_info 视图展示 system_history 表和 segment_history 表中的每个主机上的内存信息. 它允许管理员比较 segment 主机上的总可以内存, 总使用内存, 以及查询进程已使用的动态内存.
列 | 类型 | 说明 |
---|---|---|
ctime | timestamp(0) without time zone | segment_history 表中该行数据的创建时间. |
hostname | varchar(64) | 这些系统内存指标相关的 Segment or master 主机名称. |
mem_total_mb | numeric | segment 主机上的总系统内存(单位: MB). |
mem_used_mb | numeric | segment 主机上的已使用内存(单位: MB). |
mem_actual_used_mb | numeric | segment 主机上的实际使用内存(单位: MB). |
mem_actual_free_mb | numeric | segment 主机上的实际可用内存(单位: MB). |
swap_total_mb | numeric | segment 主机上的总交换内存(单位: MB). |
swap_used_mb | numeric | segment 主机上的已使用交换内存(单位: MB). |
dynamic_memory_used_mb | numeric | segment 主机上分配给查询进程的动态内存(单位: MB). |
dynamic_memory_available_mb | numeric | segment 主机上查询进程还可分配的动态内存(单位: MB). 注意这个值是一个主机上所有 segment 的可用内存总和. 即使报告为可用内存, 也可能主机上的一个或多个 segment 已经超过了它们自身的内存限制. |
gpperfmon_install安装gpperfmon数据库
安装Greenplum Command Center使用的gpperfmon数据库, 并可选择启用数据收集代理。
概要
1 2 3 4 | gpperfmon_install --port gpdb_port [--enable --password gpmon_password [--pgpass path_to_file]] [--verbose] gpperfmon_install --help | -h | -? |
安装
gpcc(Greenplum Command Center Console)是 greenplum 的常用监控平台,在安装了gpcc后才有gpperfmon_install程序。
在开始 configure 时需要添加 --enable-gpperfmon
,
比如:
1 2 3 | $ ./configure --prefix=/usr/local/greenplum-db --with-perl --with-python --with-libxml --with-gssapi \ --enable-orca --enable-mapreduce --enable-gpperfmon --enable-pxf \ --with-includes=/usr/local/include/ --with-libraries=/usr/local/lib/ |
之后安装完毕后会存在文件 $GPHOME/bin/gpperfmon_install
gpperfmon_install 是个 python 脚本。
描述
gpperfmon_install工具自动执行启用数据收集代理程序所需的步骤。 gpperfmon_install 是个 python 脚本。
用户必须是Greenplum数据库系统用户(gpadmin)才能运行此工具。 --port选项是必须的。使用--enable选项时, 还需要--password选项。使用--port选项来 提供Greenplum数据库的Master实例的端口。如果使用--enable选项, 必须在工具完成后重新启动Greenplum数据库。
在没有--enable选项时,此工具只创建gpperfmon 数据库(用于存储由数据收集代理收集的系统度量的数据库)。在使用--enable 选项运行时,该工具还会运行启用性能监视器数据收集代理所需的以下附加任务:
在Greenplum数据库中创建gpmon超级用户角色。 数据收集代理需要连接到数据库并写入数据。gpmon超级用户角色默认 使用MD5加密口令认证。 使用--password选项来设置gpmon 超级用户的口令。
更新$MASTER_DATA_DIRECTORY/pg_hba.conf文件。 该工具将这些行添加到基于主机的认证文件(pg_hba.conf)中:
123local gpperfmon gpmon md5host all gpmon 127.0.0.1/28 md5host all gpmon ::1/128 md5第二和第三行的host项,让gpmon能访问 所有Greenplum数据库。
Note: 可能有必要在运行gpperfmon_install工具以限制 gpmon角色访问数据库或更改身份验证方法之后再编辑 pg_hba.conf文件中的行。运行gpstop -u重新加载 Greenplum数据库的pg_hba.conf文件。
要将gpmon的访问限制为仅访问gpperfmon数据库, 编辑pg_hba.conf文件中host项。对于 gpmon用户,将第二个字段从all更改为 gpperfmon:
123local gpperfmon gpmon md5host gpperfmon gpmon 127.0.0.1/28 md5host gpperfmon gpmon ::1/128 md5gpperfmon_install工具采用默认的MD5认证方法。Greenplum数据库可以 选择性地配置为使用SHA-256哈希算法来计算保存在系统目录中的口令哈希值。这与MD5认证方法 不兼容,MD5认证方法在系统目录中需要MD5哈希或明文口令。 因此,如果在数据库中启用了SHA-256哈希算法,则必须在运行gpperfmon_install 工具后编辑pg_hba.conf文件。对于host项,将 gpmon角色的身份认证从md5改为 password:
123local gpperfmon gpmon md5host all gpmon 127.0.0.1/28 passwordhost all gpmon ::1/128 passwordpassword认证方法提交用户的明文口令进行验证,不应在不可信的网络上使用。 请参阅Greenplum数据库管理员指南中的“保护Greenplum数据库中的密码”。
更新口令文件(.pgpass)。为了允许数据收集代理作为 gpmon角色进行连接而无需口令提示,用户必须拥有一个包含gpmon 用户项的口令文件。该工具将以下项添加到用户的口令文件(如果该文件不存在,该工具将创建它):
1*:5432:gpperfmon:gpmon:gpmon_password如果用户的口令文件不在默认位置(~/.pgpass),使用--pgpass 选项指定文件位置。
设置Greenplum Command Center的服务器配置参数。数据收集代理必须启用 以下参数才能开始收集数据。该工具在Greenplum数据库的postgresql.conf 配置文件中设置以下参数:
- gp_enable_gpperfmon=on (在集群中所有的postgresql.conf 文件中)
- gpperfmon_port=8888 (在集群中所有的postgresql.conf文件中)
- gp_external_enable_exec=on (在Master的 postgresql.conf文件中)
数据收集代理可以通过在gpperfmon.conf配置文件中设置参数进行配置。 参阅数据收集代理配置获取更多详细信息。
选项
--enable
除了创建gpperfmon数据库外,还执行启用数据收集代理所需的附加步骤。 指定--enable时,工具还将创建并配置gpmon超级用户帐户, 并在postgresql.conf文件中设置Command Center服务器配置参数。
--password gpmon_password
如果必须指定了--enable。设置gpmon超级用户的口令。 如果未指定--enable则不允许使用。
--port gpdb_port
必需。指定Greenplum数据库Master的连接端口。
--pgpass path_to_file
在--enable选项被指定时可选。如果口令文件不在~/.pgpass 的默认位置,则这个选项指定口令文件的位置。
--verbose
将日志记录级别设置为详细。
--help | -h | -?
显示在线帮助。
数据收集代理配置
$MASTER_DATA_DIRECTORY/gpperfmon/conf/gpperfmon.conf文件存储数据收集代理的配置 参数。要使这些选项的配置更改生效,必须保存gpperfmon.conf然后重新启动Greenplum数据库 服务器(gpstop -r)。
gpperfmon.conf文件包含以下配置参数。
参数 | 描述 |
---|---|
loglocation | 指定gpperfmon日志文件的目录位置。默认是$MASTER_DATA_DIRECTORY/gpperfmon/logs。 |
min_query_time | 指定统计信息收集的最短查询运行时间(秒)。所有运行时间超过此值的查询都将记录在queries_history 表中。对于运行时间较短的查询,不收集历史数据。默认为20秒。如果用户知道要为所有查询收集数据,则可以将此参数设置为较低值。但是,如果将最小查询运行时间设置为零, 即使对于Greenplum Command Center运行的大量查询也会收集数据,从而创建大量可能无用的数据。 |
max_log_size | 这个参数不包含在gpperfmon.conf中,但是它可能被添加到这个文件中。为防止日志文件增长过大,可以将max_log_size参数添加到gpperfmon.conf 中。该参数的值以字节为单位。例如:max_log_size = 10485760 使用此设置,日志文件将在系统转到新的日志文件之前增长到10MB。 |
partition_age | gperfmon统计数据将被保留的月数。它的默认值是0,这意味着我们不会丢失任何数据。 |
quantum | 指定所有Segment上的数据收集代理更新之间的时间(以秒为单位)。有效值为10、15、20、30和60。 缺省值为15秒。如果用户偏好较低粒度的性能视图,或者想要收集和分析系统度量的最小量,请选择较高的quantum。 要更频繁地收集数据,请选择一个较低的值。 |
harvest_interval | 数据捕获时间段,以秒为单位。一次数据捕获会将gpperfmon外部表 (_tail)的近期数据移动到对应的历史文件。默认为120。最小值为30。 |
ignore_qexec_packet | (弃用)。设置为true时,数据收集代理不会收集gpperfmon数据库的 queries*表中的性能数据: rows_out、cpu_elapsed、cpu_currpct、 skew_cpu和skew_rows 缺省设置true可以减少gpmmon进程所消耗的内存量。如果用户需要这些额外的性能数据, 请将此参数设置为false。 |
smdw_aliases | 此参数允许用户为后备Master指定额外的主机名。例如,如果后备Master有两个NIC,则可以输入:smdw_aliases=smdw-1,smdw-2 如果Greenplum Command Center失去与后备Master的连接,则这个可选的容错参数非常有用。 它不会持续重试连接到主机smdw,而是尝试连接到基于NIC的别名smdw-1或 smdw-2。这确保了Command Center控制台可以持续调查和监控后备Master。 |
注解
gpperfmon数据库和Greenplum Command Center需要gpmon角色。 在创建gpperfmon数据库和gpmon角色后,用户可以更改 gpmon角色的口令并更新Greenplum Command Center信息用来连接到gpperfmon 数据库:
以超级用户身份登录到Greenplum数据库,并使用ALTER ROLE命令更改 gpmon的口令。
1# ALTER ROLE gpmon WITH PASSWORD 'new_password' ;更新Greenplum Command Center使用的.pgpass文件中的口令。默认文件位置是gpadmin 的主目录(~/.pgpass)。.pgpass文件包含一行gpmon口令。
1*:5432:gpperfmon:gpmon:new_password使用Command Center的gpcmdr工具重新启动Greenplum Command Center。
1$ gpcmdr --restart
gpperfmon监控系统在启动后需要一些初始化。监控信息在几分钟后出现, 而不是在安装和启动gpperfmon系统之后立即出现。
示例
只创建gpperfmon数据库:
1 2 | su - gpadmin gpperfmon_install --port 5432 |
创建gpperfmon数据库,创建gpmon超级用户, 并启用数据收集代理:
1 2 3 | su - gpadmin gpperfmon_install --enable --password lhr --port 5432 gpstop -r |
参考
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/aec5ff4173314783.md
https://www.bookstack.cn/read/greenplum-admin_guide-6.0-zh/42a7963b02d03326.md