gp_toolkit管理模式

gp_toolkit管理模式

Greenplum数据库提供了一个名为gp_toolkit的管理模式,可用于查询系统catalog,日志文件和操作环境中的系统状态信息。 gp_toolkit模式包含许多视图,您可以使用SQL命令访问这些视图。 尽管某些对象可能需要超级用户权限,但所有数据库用户都可以访问gp_toolkit模式。 为了方便起见,您可能需要将gp_toolkit模式添加到模式搜索路径。 例如:

=> ALTER ROLE myrole SET search_path TO myschema,gp_toolkit;

本文档介绍了gp_toolkit中最有用的视图。 您可能会注意到gp_toolkit模式中的其他对象(视图,函数和外部表)在本文档中未描述(这些是本节中描述的视图的支持对象)。

Warning: 不要在gp_toolkit模式中更改数据库对象。 不要在模式中创建数据库对象。 对模式对象的更改可能会影响模式对象返回的管理信息的准确性。 备份数据库,然后使用gpbackupgprestore实用程序还原时, 在gp_toolkit模式中所做的任何更改都将丢失。

检查需要例行维护的表

以下视图可以帮助您识别需要日常维护的表 (VACUUM和/或ANALYZE)。

VACUUMVACUUM FULL命令可回收已删除或过时的行所占用的磁盘空间。 由于Greenplum数据库中使用了MVCC事务并发模型,即使任何新事务都不可见,被删除或更新的数据行仍占据磁盘上的物理空间。 过期的行会增加磁盘上的表大小,并最终减慢表的扫描速度。

ANALYZE命令收集查询优化器所需的列级统计信息。 Greenplum数据库使用依赖数据库统计信息的基于成本的查询优化器。 准确的统计信息使查询优化器可以更好地估计选择性和查询操作检索到的行数,从而选择最有效的查询计划。

gp_bloat_diag

此视图显示膨胀的常规堆存储表(给定表统计信息,磁盘上的实际页面数超过了预期的页面数)。 膨胀的表需要VACUUMVACUUM FULL,才能回收已删除或过时的行所占用的磁盘空间。 所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的表。
Note: 有关返回追加优化表信息的诊断函数,请参阅检查追加优化表
Table 1. gp_bloat_diag视图
描述
bdirelid 表OID。
bdinspname 模式名称。
bdirelname 表名。
bdirelpages 磁盘上实际页的数量。
bdiexppages 给定表数据的预期页数。
bdidiag 膨胀诊断消息。

gp_stats_missing

该视图显示的表没有统计信息,因此可能需要对该表运行ANALYZE

Table 2. gp_stats_missing view
描述
smischema 模式名称。
smitable 表名。
smisize 该表是否有统计信息? 如果该表没有在系统catalog中记录行数和行大小统计信息,则为False,这可能表明该表需要进行分析。 如果表不包含任何行,这也将为false。 例如,分区表的父表始终为空,并且始终返回false。
smicols 表中的列数。
smirecs 表中的行数。

检查锁

当事务访问关系(例如表)时,它获取一个锁。 根据获取的锁的类型,后续事务可能必须等待才能访问相同的关系。 有关锁类型的更多信息,请参阅Greenplum数据库管理员指南中的“管理数据”。 Greenplum数据库资源队列(用于资源管理)还使用锁来控制查询进入系统的权限。

gp_locks_*系列视图可以帮助诊断由于锁定而正在等待访问对象的查询和会话。

gp_locks_on_relation

此视图显示当前在某个关系上持有的所有锁,以及有关与该锁关联的查询的关联会话信息。 有关锁类型的更多信息,请参阅Greenplum数据库管理员指南中的“管理数据”。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系的锁。

Table 3. gp_locks_on_relation视图
描述
lorlocktype 可锁定对象的类型:relation, extend, page, tuple, transactionid, object, userlock, resource queue, 或 advisory
lordatabase 对象所在的数据库的对象ID,如果该对象是共享对象,则为零。
lorrelname 关系的名称。
lorrelation 关系的OID。
lortransaction 受锁影响的事务ID。
lorpid 持有或正在等待此锁定的服务器进程的进程ID。 如果锁由准备好的事务持有,则为NULL。
lormode 此进程持有或需要的锁定模式的名称。
lorgranted 显示是授予锁(true)还是不授予锁(false)。
lorcurrentquery 会话中的当前查询。

gp_locks_on_resqueue

Note: 仅当基于资源队列的资源管理处于活动状态时,gp_locks_on_resqueue视图才有效。

该视图显示了资源队列中当前持有的所有锁,以及与该锁关联的查询的关联会话信息。 所有用户都可以访问此视图,但是非超级用户将只能看到与其自己的会话相关联的锁。

Table 4. gp_locks_on_resqueue视图
描述
lorusename 执行会话的用户名。
lorrsqname 资源队列名称。
lorlocktype 可锁定对象的类型:资源队列
lorobjid 锁定事务的ID。
lortransaction 受锁影响的事务的ID。
lorpid 受锁影响的事务的进程ID。
lormode 此进程持有或需要的锁定模式的名称。
lorgranted 显示是授予锁(true)还是不授予锁(false)。
lorwaiting 显示会话是否正在等待。

检查追加优化表

gp_toolkit模式包含一组诊断功能,可用于调查追加优化表的状态。

创建追加优化表(或面向列的追加优化表)时,将隐式创建另一个表,其中包含有关该表当前状态的元数据。 元数据包括诸如表的每个segment中的记录数之类的信息。

追加优化表可能包含不可见的行,这些行已被更新或删除, 但是保留在存储中,直到使用VACUUM压缩表为止。 使用辅助可见性映射表或visimap跟踪隐藏的行。

通过以下函数,您可以访问针对追加优化和面向列的表的元数据,并查看不可见的行。 其中一些函数具有两个版本:一个采用表的oid,而另一个采用表的名称。 后一种版本在函数名称后附加了“ _name”。

__gp_aovisimap_compaction_info(oid)

此函数显示追加优化表的压缩信息。 该信息适用于Greenplum数据库segment中存储表数据的磁盘上数据文件。 您可以使用该信息来确定将通过VACUUM操作对追加优化表进行压缩的数据文件。

Note:VACUUM操作从数据文件中删除该行之前,已删除或已更新的数据行将占据磁盘上的物理空间,即使它们已被新事务隐藏。 配置参数gp_appendonly_compaction控制VACUUM命令的功能。

下表描述了__gp_aovisimap_compaction_info函数输出表。

Table 5. __gp_aovisimap_compaction_info输出表
描述
content Greenplum数据库segment ID。
datafile segment上数据文件的ID。
compaction_possible 该值为tf。 值t表示执行VACUUM操作时压缩数据文件中的数据。

服务器配置参数gp_appendonly_compaction_threshold会影响此值。

hidden_tupcount 在数据文件中,隐藏(删除或更新)的行数。
total_tupcount 在数据文件中,总行数。
percent_hidden 在数据文件中,隐藏(已删除或更新)行与总行的比率(百分比)。

__gp_aoseg_name('table_name')

此函数返回追加优化表的磁盘段文件中包含的元数据信息。

Table 6. __gp_aoseg_name输出表
描述
segno 文件段号。
eof 该文件段的文件有效结尾。
tupcount 段中的元组总数,包括不可见的元组。
varblockcount 文件段中的varblocks总数。
eof_uncompressed 文件末尾(如果文件段未压缩)。
modcount 数据修改操作的数量。
state 文件段的状态。 指示段是活动的还是压缩后可以删除的。

__gp_aoseg_history(oid)

此函数返回追加优化表的磁盘段文件中包含的元数据信息。 它显示aoseg元信息的所有不同版本(堆元组)。 数据很复杂,但是对系统有深入了解的用户可能会发现它对于调试很有用。

输入参数是追加优化表的oid。

调用__gp_aoseg_history_name('table_name')可获得与表名参数相同的结果。

Table 7. __gp_aoseg_history输出表
描述
gp_tid 元组的id。
gp_xmin 最早事务的id。
gp_xmin_status gp_xmin事务的状态。
gp_xmin_commit_ gp_xmin事务的提交分布式id。
gp_xmax 最晚的事务id。
gp_xmax_status 最晚的事务的状态。
gp_xmax_commit_ gp_xmax事务的提交分布式id。
gp_command_id 查询命令的id。
gp_infomask 包含状态信息的位图。
gp_update_tid 更新的元组的ID(如果该行已更新)。
gp_visibility 元组可见性状态。
segno 段文件中的段号。
tupcount 元组数量,包括隐藏元组。
eof 段的文件的有效结尾。
eof_uncompressed 该段的文件末尾,如果数据未压缩。
modcount 数据修改计数。
state 段的状态。

__gp_aocsseg(oid)

此函数返回包含在面向列的追加优化表的磁盘段文件中的元数据信息,不包括不可见的行。 每行描述表中一列的段。

输入参数是面向列的追加优化表的oid。 以表名作为参数调用__gp_aocsseg_name('table_name')获得相同的结果。

Table 8. __gp_aocsseg(oid)输出表
描述
gp_tid 表的ID。
segno 段号。
column_num 列号。
physical_segno 段文件中段的编号。
tupcount 段中的行数,不包括隐藏的元组。
eof 段的文件的有效结尾。
eof_uncompressed 该段文件的末尾(如果数据未压缩)。
modcount 段的数据修改操作计数。
state 段的状态。

__gp_aocsseg_history(oid)

此函数返回包含在面向列的追加优化表的磁盘段文件中的元数据信息。 每行描述表中一列的段。 数据很复杂,但是对系统有深入了解的用户可能会发现它对于调试很有用。

输入参数是面向列的追加优化表的oid。 以表名称作为参数调用__gp_aocsseg_history_name('table_name')获得相同的结果。

Table 9. __gp_aocsseg_history输出表
描述
gp_tid 元组的oid。
gp_xmin 最早的事务。
gp_xmin_status gp_xmin事务的状态。
gp_xmin_ gp_xmin的文本表示形式。
gp_xmax 最近的事务。
gp_xmax_status gp_xmax事务的状态。
gp_xmax_ gp_max的文本表示形式。
gp_command_id 在元组上运行的命令的ID。
gp_infomask 包含状态信息的位图。
gp_update_tid 新的元组的ID(如果该行已更新)。
gp_visibility 元组可见性状态。
segno 段文件中的段号。
column_num 列号。
physical_segno 包含列数据的段。
tupcount 段中的元组总数。
eof 段的文件的有效结尾。
eof_uncompressed 该段文件的末尾(如果数据未压缩)。
modcount 数据修改操作的计数。
state 段的状态。

__gp_aovisimap(oid)

此函数根据可见性映射返回元组id,段文件和每个不可见元组的行号。

输入参数是追加优化表的oid。

使用__gp_aovisimap_name('table_name')获得与表名作为参数相同的结果。

描述
tid 元组ID。
segno 段文件的编号。
row_num 已删除或更新的行的行号。

__gp_aovisimap_hidden_info(oid)

此函数返回段文件中针对追加优化表的隐藏和可见元组数。

输入参数是追加优化表的oid。

调用__gp_aovisimap_hidden_info_name('table_name')可获得与表名参数相同的结果。

描述
segno 段文件的编号。
hidden_tupcount 段文件中隐藏元组的数量。
total_tupcount 段文件中的元组总数。

__gp_aovisimap_entry(oid)

此函数返回有关表的每个可见性映射条目的信息。

输入参数是追加优化表的oid。

调用__gp_aovisimap_entry_name('table_name')可获得与表名参数相同的结果。

Table 10. __gp_aovisimap_entry输出表
描述
segno 可见性映射条目的段号。
first_row_num 条目的第一行号。
hidden_tupcount 条目中的隐藏元组数。
bitmap 可见性位图的文本表示。

查看Greenplum数据库服务器日志文件

Greenplum数据库系统的每个组件(master,standby,primary和mirror)均保留其自己的服务器日志文件。 使用gp_log_*系列视图,您可以对服务器日志文件执行SQL查询,以找到感兴趣的特定条目。 这些视图的使用需要超级用户权限。

gp_log_command_timings

该视图使用外部表来读取主数据库上的日志文件,并报告在数据库会话中执行的SQL命令的执行时间。 使用此视图需要超级用户权限。

Table 11. gp_log_command_timings视图
描述
logsession 会话标识符(以"con"为前缀)。
logcmdcount 会话中的命令号(以"cmd"为前缀)。
logdatabase 数据库的名称。
loguser 数据库用户的名称。
logpid 进程ID(前缀为"p")。
logtimemin 此命令的第一条日志消息的时间。
logtimemax 该命令的最后一条日志消息的时间。
logduration 语句从开始到结束时间的持续时间。

gp_log_database

该视图使用外部表读取整个Greenplum系统的服务器日志文件(master,primary和mirror), 并列出与当前数据库关联的日志条目。 可以通过会话ID(logsession)和命令ID(logcmdcount)标识关联的日志条目。 使用此视图需要超级用户权限。

Table 12. gp_log_database视图
描述
logtime 日志消息的时间戳。
loguser 数据库用户的名称。
logdatabase 数据库的名称。
logpid 关联的进程ID(前缀为"p")。
logthread 关联的线程数(以"th"为前缀)。
loghost segment或master主机名。
logport segment或master端口号。
logsessiontime 会话连接打开时间。
logtransaction 全局事务ID。
logsession 会话标识符(以"con"为前缀)。
logcmdcount 会话中的命令号(以"cmd"为前缀)。
logsegment segment内容标识符 (对于primary标识符,前缀为"seg",对于mirror,前缀为"mir"。master服务器的内容ID始终为-1)。
logslice 切片ID(正在执行的查询计划的一部分)。
logdistxact 分布式事务ID。
loglocalxact 本地事务ID。
logsubxact 子事务ID。
logseverity LOG, ERROR, FATAL, PANIC, DEBUG1或DEBUG2。
logstate 与日志消息关联的SQL状态代码。
logmessage 日志或错误消息文本。
logdetail 与错误消息关联的详细消息文本。
loghint 与错误消息关联的提示消息文本。
logquery 内部生成的查询文本。
logquerypos 游标索引到内部生成的查询文本中。
logcontext 生成此消息的上下文。
logdebug 用于调试的带有详细信息的查询字符串。
logcursorpos 查询字符串中的游标索引。
logfunction 生成此消息的函数。
logfile 生成此消息的日志文件。
logline 日志文件中生成此消息的行。
logstack 与该消息关联的堆栈跟踪的全文。

gp_log_master_concise

该视图使用外部表从master日志文件读取日志字段的子集。 使用此视图需要超级用户权限。

Table 13. gp_log_master_concise视图
描述
logtime 日志消息的时间戳。
logdatabase 数据库的名称。
logsession 会话标识符(以"con"为前缀)。
logcmdcount 会话中的命令号(以"cmd"为前缀)。
logmessage 日志或错误消息文本。

gp_log_system

该视图使用一个外部表来读取整个Greenplum系统(master,segment和mirror)的服务器日志文件,并列出所有日志条目。 可以通过会话ID(logsession)和命令ID(logcmdcount)标识关联的日志条目。 使用此视图需要超级用户权限。

Table 14. gp_log_system视图
描述
logtime 日志消息的时间戳。
loguser 数据库用户的名称。
logdatabase 数据库的名称。
logpid 关联的进程ID(前缀为"p")。
logthread 关联的线程数(以"th"为前缀)。
loghost segment或master主机名。
logport segment或master端口号。
logsessiontime 会话连接打开时间。
logtransaction 全局事务ID。
logsession 会话标识符(以"con"为前缀)。
logcmdcount 会话中的命令号(以"cmd"为前缀)。
logsegment segment内容标识符 (对于primary标识符,前缀为"seg",对于mirror,前缀为"mir"。master服务器的内容ID始终为-1)。
logslice 切片ID(正在执行的查询计划的一部分)。
logdistxact 分布式事务ID。
loglocalxact 本地事务ID。
logsubxact 子事务ID。
logseverity LOG, ERROR, FATAL, PANIC, DEBUG1或DEBUG2。
logstate 与日志消息关联的SQL状态代码。
logmessage 日志或错误消息文本。
logdetail 与错误消息关联的详细消息文本。
loghint 与错误消息关联的提示消息文本。
logquery 内部生成的查询文本。
logquerypos 游标索引到内部生成的查询文本中。
logcontext 生成此消息的上下文。
logdebug 用于调试的带有详细信息的查询字符串。
logcursorpos 查询字符串中的游标索引。
logfunction 生成此消息的函数。
logfile 生成此消息的日志文件。
logline 日志文件中生成此消息的行。
logstack 与该消息关联的堆栈跟踪的全文。

检查服务器配置文件

Greenplum数据库系统的每个组件(master,standby,primary和mirror)都有其自己的服务器配置文件(postgresql.conf)。 以下gp_toolkit对象可用于检查系统中所有primary的postgresql.conf文件的参数设置:

gp_param_setting('parameter_name')

此函数采用服务器配置参数的名称,并返回master和每个活动segment的postgresql.conf值。 所有用户均可使用此函数。

Table 15. gp_param_setting('parameter_name')函数
描述
paramsegment segment内容ID(仅显示活动segment)。 master内容ID始终为-1。
paramname 参数名称。
paramvalue 参数值。

示例:

SELECT * FROM gp_param_setting('max_connections');

gp_param_settings_seg_value_diffs

分类为本地参数的服务器配置参数(意味着每个segment都从其自己的postgresql.conf文件获取参数值), 应在所有segment上进行相同的设置。 该视图显示的本地参数设置不一致。 不包括应该具有不同值的参数(例如port)。 所有用户均可访问此视图。

Table 16. gp_param_settings_seg_value_diffs视图
描述
psdname 参数的名称。
psdvalue 参数的值。
psdcount 具有此值的segment数。

检查失败的segments

gp_pgdatabase_invalid视图可用于检查宕机的segment。

gp_pgdatabase_invalid

此视图显示有关在系统目录中标记为宕机的segment的信息。 所有用户均可访问此视图。

Table 17. gp_pgdatabase_invalid视图
描述
pgdbidbid segment的dbid。 每个segment都有唯一的dbid。
pgdbiisprimary segment的角色是否是primary?(t或f)
pgdbicontent 该segment的内容ID。 primary和mirror将具有相同的内容ID。
pgdbivalid segment是否在线有效?(t或f)
pgdbidefinedprimary 在系统初始化时,此segment是否分配为primary?(t或f)

检查资源组活动和状态

Note: 仅当基于资源组的资源管理处于活动状态时,本节中描述的资源组活动和状态视图才有效。

资源组管理事务,以避免耗尽系统CPU和内存资源。 每个数据库用户都被分配了一个资源组。 在运行事务之前,Greenplum数据库会根据为用户资源组配置的限制评估用户提交的每个事务。

您可以使用gp_resgroup_config视图检查每个资源组的配置。 您可以使用gp_resgroup_status*视图显示当前事务状态和每个资源组的资源使用情况。

gp_resgroup_config

使用gp_resgroup_config视图,管理员可以查看资源组的当前CPU,内存和并发限制。 该视图还显示建议的限制设置。 更改限制后,建议的限制将不同于当前限制,但是无法立即应用新值。

This view is accessible to all users.

Table 18. gp_resgroup_config
描述
groupid 资源组的ID。
groupname 资源组的名称。
concurrency 为资源组指定的并发(CONCURRENCY)值。
proposed_concurrency 资源组的待定并发值。
cpu_rate_limit 为资源组指定的CPU限制(CPU_RATE_LIMIT)值或-1。
memory_limit 为资源组指定的内存限制(MEMORY_LIMIT)值。
proposed_memory_limit 资源组的待定内存限制值。
memory_shared_quota 为资源组指定的共享内存配额(MEMORY_SHARED_QUOTA)值。
proposed_memory_shared_quota 资源组的待定共享内存配额值。
memory_spill_ratio 为资源组指定的内存溢出率(MEMORY_SPILL_RATIO)值。
proposed_memory_spill_ratio 资源组的待定内存溢出率值。
memory_auditor 资源组的内存审核。
cpuset 为资源组保留的CPU核心,或-1。

gp_resgroup_status

使用gp_resgroup_status视图,管理员可以查看资源组的状态和活动。 它显示了每个资源组正在等待运行的查询数量以及系统中当前正在活动的查询数量。 该视图还显示资源组的当前内存和CPU使用率。

Note: 资源组使用主机系统上配置的Linux控制组(cgroup)。 cgroup用于管理主机系统资源。 当资源组使用作为嵌套cgroup组的一部分的cgroup时,资源组限制是相对于父cgroup分配的。 有关嵌套cgroup和Greenplum数据库资源组限制的信息,请参阅理解角色和组件资源组

所有用户均可访问此视图。

Table 19. gp_resgroup_status视图
描述
rsgname 资源组的名称。
groupid 资源组的ID。
num_running 资源组中当前正在执行的事务数。
num_queueing 资源组当前排队的事务数。
num_queued 自上次启动Greenplum数据库集群以来,资源组的排队事务总数,不包括num_queueing。
num_executed 自Greenplum数据库集群上次启动以来,资源组中已执行事务的总数,不包括num_running。
total_queue_duration 自上次启动Greenplum数据库集群以来,所有事务排队的总时间。
cpu_usage 每个Greenplum数据库segment主机上资源组的实时CPU使用率。
memory_usage 每个Greenplum数据库segment主机上资源组的实时内存使用情况。

cpu_usage字段是JSON格式的key:value字符串, 用于为每个资源组标识每个segment的CPU使用率百分比。 key是segment ID,value是segment主机上资源组的CPU使用率百分比。 在segment主机上运行的所有segment的CPU总使用率不应超过gp_resource_group_cpu_limit。 示例cpu_usage列输出:
{"-1":0.01, "0":0.31, "1":0.31}

在此示例中,segment 0和segment 1在同一主机上运行;它们的CPU使用率是相同的。

memory_usage字段也是JSON格式的key:value字符串。 字符串内容因资源组的类型而异。 对于分配给角色的每个资源组(默认内存审核器vmtracker), 此字符串标识每个segment上已使用,可用,已授予和建议的固定和共享内存配额分配。 key是segment ID,value是以MB为单位显示的内存值。 下面的示例显示分配给角色的资源组的单个segment的memory_usage列输出:
"0":{"used":0, "available":76, "quota_used":-1, "quota_available":60, "quota_granted":60, "quota_proposed":60, "shared_used":0, "shared_available":16, "shared_granted":16, "shared_proposed":16}
对于分配给外部组件的每个资源组,memory_usage JSON格式的字符串标识了每个segment上使用的内存和内存限制。 以下示例显示单个segment的外部组件资源组的memory_usage列输出:
"1":{"used":11, "limit_granted":15}
Note: 请参阅下文所述的gp_resgroup_status_per_hostgp_resgroup_status_per_segment视图, 以更友好地显示CPU和内存使用情况。

gp_resgroup_status_per_host

gp_resgroup_status_per_host视图以主机为单位显示每个资源组的实时CPU和内存使用率(MB)。 该视图还显示主机上每个资源组的可用和已授予组的固定和共享内存。

Table 20. gp_resgroup_status_per_host视图
描述
rsgname 资源组的名称。
groupid 资源组的ID。
hostname segment主机的主机名。
cpu 主机上资源组的实时CPU使用率。
memory_used 主机上资源组的实时内存使用情况。 此总数包括资源组固定和共享内存。 它还包括资源组使用的全局共享内存。
memory_available 主机上可用的资源组的未使用的固定和共享内存。 此总数不包括可用资源组全局共享内存。
memory_quota_used 主机上资源组的实时固定内存使用情况。
memory_quota_available 主机上资源组可用的固定内存。
memory_quota_proposed Greenplum数据库已分配给主机上资源组的固定内存总量。
memory_shared_used 主机上的资源组使用的组共享内存。 如果资源组使用任何全局共享内存,则此数量也将包括在总数中。
memory_shared_available 主机上资源组可用的组共享内存量。 资源组全局共享内存不包括在此总计中。
memory_shared_granted Greenplum数据库已分配给主机上资源组的组共享内存部分。 资源组全局共享内存不包括在此值中。
memory_shared_proposed 主机上的资源组请求的组共享内存的总数。

如果群集没有足够的内存来分配,则memory_shared_granted值可能小于memory_shared_proposed。 当资源组使用全局共享内存时,它可能大于memory_shared_proposed。 随着时间的推移,memory_shared_grantedmemory_shared_proposed应该达到相同的值。

gp_resgroup_status_per_host视图的示例输出:

 rsgname       | groupid | hostname   | cpu  | memory_used | memory_available | memory_quota_used | memory_quota_available | memory_quota_proposed | memory_shared_used | memory_shared_available | memory_shared_granted | memory_shared_proposed 
---------------+---------+------------+------+-------------+------------------+-------------------+------------------------+-----------------------+--------------------+-------------------------+-----------------------+------------------------
 admin_group   | 6438    | my-desktop | 0.84 | 1           | 271              | 68                | 68                     | 136                   | 0                  | 136                     | 136                   | 136                    
 default_group | 6437    | my-desktop | 0.00 | 0           | 816              | 0                 | 400                    | 400                   | 0                  | 416                     | 416                   | 416                    
(2 rows)

gp_resgroup_status_per_segment

gp_resgroup_status_per_segment视图基于每个segment实例和每个主机显示每个资源组的实时CPU和内存使用率(MB)。 该视图还显示主机上每个资源组和segment实例组合的可用和已授予组的固定和共享内存。

Table 21. gp_resgroup_status_per_segment视图
描述
rsgname 资源组的名称。
groupid 资源组的ID。
hostname segment主机的主机名。
segment_id segment主机上segment实例的内容ID。
cpu 主机上的segment实例的资源组的实时CPU使用率。
memory_used 主机上的segment实例的资源组的实时内存使用情况。 此总数包括资源组固定和共享内存。 它还包括资源组使用的全局共享内存。
memory_available 主机上segment实例的资源组的未使用的固定和共享内存。
memory_quota_used 主机上segment实例的资源组的实时固定内存使用情况。
memory_quota_available 资源组可用于主机上的segment实例的固定内存。
memory_quota_proposed Greenplum数据库已为主机上的segment分配给资源组的固定内存总量。 对于主机上的所有资源组和segment实例组合,此值都相同。
memory_shared_used 资源组用于主机上的segment实例的组共享内存。
memory_shared_available 主机上的segment实例可用的组共享内存量。 资源组全局共享内存不包括在此总计中。
memory_shared_granted Greenplum数据库已为主机上的segment实例分配给资源组的组共享内存部分。 资源组全局共享内存不包括在此值中。
memory_shared_proposed 主机上的资源组请求的组共享内存的总数。 对于主机上的所有资源组和segment实例组合,此值都相同。

该视图的查询输出与gp_resgroup_status_per_host视图的查询输出相似, 并针对每个主机上的每个segment实例划分CPU和内存(已使用和可用)。

检查资源队列活动和状态

Note: 仅当基于资源队列的资源管理处于活动状态时,本节中描述的资源队列活动和状态视图才有效。

资源队列的目的是在任何给定时间限制系统中活动查询的数量,以避免耗尽内存,CPU和磁盘I/O等系统资源。 所有数据库用户都分配给一个资源队列,并且在运行该用户之前,将首先针对资源队列限制评估用户提交的每个语句。 gp_resq_*系列视图可用于检查通过它们各自的资源队列当前提交给系统的语句的状态。 请注意,超级用户执行的语句免于资源排队。

gp_resq_activity

对于具有活动工作负载的资源队列,此视图为通过资源队列提交的每个活动语句显示一行。 所有用户均可访问此视图。

Table 22. gp_resq_activity视图
描述
resqprocpid 分配给该语句的进程ID(在master上)。
resqrole 用户名。
resqoid 资源队列对象标识。
resqname 资源队列名称。
resqstart 已向系统发布时间声明。
resqstatus 语句状态:running,waiting或cancelled。

gp_resq_activity_by_queue

对于具有活动工作负载的资源队列,此视图显示队列活动的摘要。 所有用户均可访问此视图。

Table 23. gp_resq_activity_by_queue视图
描述
resqoid 资源队列对象标识。
resqname 资源队列名称。
resqlast 发布到队列的最后一条语句的时间。
resqstatus 最后一条语句的状态:running,waiting或cancelled。
resqtotal 此队列中的语句总数。

gp_resq_priority_statement

该视图显示了Greenplum数据库系统中当前正在运行的所有语句的资源队列优先级,会话ID和其他信息。 所有用户均可访问此视图。

Table 24. gp_resq_priority_statement视图
描述
rqpdatname 会话连接到的数据库名称。
rqpusename 执行语句的用户。
rqpsession 会话ID。
rqpcommand 该会话中的语句编号(命令ID和会话ID唯一标识一条语句)。
rqppriority 此语句的资源队列优先级(MAX,HIGH,MEDIUM,LOW)。
rqpweight 与该语句的优先级关联的整数值。
rqpquery 语句的查询文本。

gp_resq_role

此视图显示与角色关联的资源队列。 所有用户均可访问此视图。

Table 25. gp_resq_role视图
描述
rrrolname 角色(用户)名称。
rrrsqname 分配给此角色的资源队列名称。 如果尚未将角色明确分配给资源队列,则它将位于默认资源队列(pg_default)中。

gp_resqueue_status

该视图使管理员可以查看资源队列的状态和活动。 它显示了特定资源队列中有多少查询正在等待运行以及当前系统中有多少查询处于活动状态。

Table 26. gp_resqueue_status视图
描述
queueid 资源队列的ID。
rsqname 资源队列的名称。
rsqcountlimit 资源队列的活动查询阈值。 值-1表示没有限制。
rsqcountvalue 资源队列中当前正在使用的活动查询槽的数量。
rsqcostlimit 资源队列的查询成本阈值。 值-1表示没有限制。
rsqcostvalue 资源队列中当前所有语句的总成本。
rsqmemorylimit 资源队列的内存限制。
rsqmemoryvalue 资源队列中当前所有语句使用的总内存。
rsqwaiters 资源队列中当前正在等待的语句数。
rsqholders 此资源队列中当前在系统上运行的语句数。

检查查询磁盘溢出空间使用情况

gp_workfile_*视图显示有关当前正在使用磁盘溢出空间的所有查询的信息。 如果Greenplum数据库没有足够的内存来在内存中执行查询,则会在磁盘上创建工作文件。 此信息可用于故障排除和优化查询。 视图中的信息还可用于指定Greenplum数据库配置参数gp_workfile_limit_per_querygp_workfile_limit_per_segment的值。

gp_workfile_entries

该视图为每个运算符在当前时间使用一个磁盘空间来存储segment上工作文件的每一行。 所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。

Table 27. gp_workfile_entries
类型 参考 描述
command_cnt integer   查询的命令ID。
content smallint   segment实例的内容标识符。
current_query text   进程正在执行的查询。
datname name   Greenplum数据库名称。
directory text   工作文件的路径。
optype text   创建工作文件的查询运算符类型。
procpid integer   服务器进程的进程ID。
sess_id integer   会话ID。
size bigint   工作文件的大小(以字节为单位)。
numfiles bigint   创建的文件数。
slice smallint   查询计划切片。 查询计划中正在执行的部分。
state text   创建工作文件的查询状态。
usename name   角色名称。
workmem integer   分配给运算符的内存量,以KB为单位。

gp_workfile_usage_per_query

对于当前segment上使用工作文件的磁盘空间的每个查询,此视图都包含一行。 所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。

Table 28. gp_workfile_usage_per_query
类型 参考 描述
command_cnt integer   查询的命令ID。
content smallint   segment实例的内容标识符。
current_query text   进程正在执行的查询。
datname name   Greenplum数据库名称。
procpid integer   服务器进程的进程ID。
sess_id integer   会话ID。
size bigint   工作文件的大小(以字节为单位)。
numfiles bigint   创建的文件数。
state text   创建工作文件的查询状态。
usename name   角色名称。

gp_workfile_usage_per_segment

该视图为每个segment包含一行。 每行显示当前时间segment上用于工作文件的磁盘空间总量。 所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。

Table 29. gp_workfile_usage_per_segment
类型 参考 描述
content smallint   segment实例的内容标识符。
size bigint   segment上工作文件的总大小。
numfiles bigint   创建的文件数。

查看用户和组(角色)

将用户(角色)分组在一起以简化对象特权的管理通常很方便:通过这种方式,可以将特权授予或撤消整个组。 在Greenplum数据库中,这是通过创建代表组的角色,然后将组角色的成员身份授予各个用户角色来完成的。

gp_roles_assigned视图可用于查看系统中的所有角色及其分配的成员(如果角色也是组角色)。

gp_roles_assigned

此视图显示系统中的所有角色及其分配的成员(如果角色也是组角色)。 所有用户均可访问此视图。

Table 30. gp_roles_assigned视图
描述
raroleid 角色对象ID。 如果此角色具有成员(用户),则将其视为组角色。
rarolename 角色(用户或组)名称。
ramemberid 属于此角色成员的角色的角色对象ID。
ramembername 属于此角色的角色的名称。

检查数据库对象大小和磁盘空间

gp_size_*系列视图可用于确定分布式Greenplum数据库,模式,表或索引的磁盘空间使用情况。 以下视图计算了所有primary中对象的总大小(大小计算中不包括mirror)。

表和索引大小视图按对象ID(而不是名称)列出关系。 要按名称检查表或索引的大小, 必须在pg_class表中查找关系名称(relname)。 例如:

SELECT relname as name, sotdsize as size, sotdtoastsize as 
toast, sotdadditionalsize as other 
FROM gp_size_of_table_disk as sotd, pg_class 
WHERE sotd.sotdoid=pg_class.oid ORDER BY relname;

gp_size_of_all_table_indexes

此视图显示表的所有索引的总大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。

Table 31. gp_size_of_all_table_indexes视图
描述
soatioid 表的对象ID
soatisize 所有表索引的总大小(以字节为单位)
soatischemaname 模式名称
soatitablename 表名

gp_size_of_database

此视图显示数据库的总大小。 所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的数据库。

Table 32. gp_size_of_database视图
描述
sodddatname 数据库名称
sodddatsize 数据库大小(以字节为单位)

gp_size_of_index

此视图显示索引的总大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。

Table 33. gp_size_of_index视图
描述
soioid 索引的对象ID
soitableoid 索引所属表的对象ID
soisize 索引大小(以字节为单位)
soiindexschemaname 索引模式的名称
soiindexname 索引名称
soitableschemaname 表模式的名称
soitablename 表名称

gp_size_of_partition_and_indexes_disk

此视图显示分区子表及其索引在磁盘上的大小。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的关系。

Table 34. gp_size_of_partition_and_indexes_disk视图
描述
sopaidparentoid 父表的对象ID
sopaidpartitionoid 分区表的对象ID
sopaidpartitiontablesize 分区表大小(以字节为单位)
sopaidpartitionindexessize 该分区上所有索引的总大小
Sopaidparentschemaname 父模式的名称
Sopaidparenttablename 父表的名称
Sopaidpartitionschemaname 分区模式的名称
sopaidpartitiontablename 分区表的名称

gp_size_of_schema_disk

此视图显示当前数据库中公共模式和用户创建的模式的模式大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的架构。

Table 35. gp_size_of_schema_disk视图
描述
sosdnsp 模式名称
sosdschematablesize 模式中表的总大小(以字节为单位)
sosdschemaidxsize 模式中索引的总大小(以字节为单位)

gp_size_of_table_and_indexes_disk

此视图显示表及其索引在磁盘上的大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。

Table 36. gp_size_of_table_and_indexes_disk视图
描述
sotaidoid 父表的对象ID
sotaidtablesize 表的磁盘大小
sotaididxsize 表上所有索引的总大小
sotaidschemaname 模式名称
sotaidtablename 表名

gp_size_of_table_and_indexes_licensing

此视图显示用于许可目的的表及其索引的总大小。 使用此视图需要超级用户权限。

Table 37. gp_size_of_table_and_indexes_licensing视图
描述
sotailoid 表的对象ID
sotailtablesizedisk 表的总磁盘大小
sotailtablesizeuncompressed 如果该表是压缩的追加优化表,则以字节为单位显示未压缩的表大小。
sotailindexessize 表中所有索引的总大小
sotailschemaname 模式名称
sotailtablename 表名

gp_size_of_table_disk

此视图显示磁盘上表的大小。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表

Table 38. gp_size_of_table_disk视图
描述
sotdoid 表的对象ID
sotdsize 表的大小(以字节为单位)。 该大小仅是主表的大小。 该大小不包括辅助对象(例如,超大(toast)属性)或AO表的其他存储对象。
sotdtoastsize TOAST表的大小(超大属性存储)(如果有)。
sotdadditionalsize 反映追加优化(AO)表的段和块目录表的大小。
sotdschemaname 模式名称
sotdtablename 表名

gp_size_of_table_uncompressed

此视图显示追加优化(AO)表的未压缩表大小。 否则,将显示磁盘上的表大小。 使用此视图需要超级用户权限。

Table 39. gp_size_of_table_uncompressed视图
描述
sotuoid 表的对象ID
sotusize 如果表是压缩的AO表,则表示表的未压缩大小(以字节为单位)。 否则,为磁盘上表的大小。
sotuschemaname 模式名称
sotutablename 表名

gp_disk_free

该外部表在活动segment主机上运行df(disk free)命令,并报告结果。 非活动mirror不包括在计算中。 使用此外部表需要超级用户权限。

Table 40. gp_disk_free外部表
描述
dfsegment segment的内容ID(仅显示活动segment)
dfhostname segment主机的主机名
dfdevice 设备名称
dfspace segment文件系统中的可用磁盘空间(以千字节为单位)

检查数据分布不均

Greenplum数据库中的所有表都是分布式的,这意味着它们的数据被划分到系统中的所有segment中。 如果数据分布不均匀,则查询处理性能可能会受到影响。 以下视图可以帮助诊断表是否具有不均匀的数据分布:

gp_skew_coefficients

该视图通过计算存储在每个segment上的数据的变异系数(CV)来显示数据分布偏斜。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表

Table 41. gp_skew_coefficients视图
描述
skcoid 表的对象ID。
skcnamespace 定义表的命名空间。
skcrelname 表名。
skccoeff 变异系数(CV)计算为标准偏差除以平均值。 它同时考虑了平均值和围绕数据序列平均值的变异性。 值越低越好。 较高的值表示较大的数据偏斜。

gp_skew_idle_fractions

该视图通过计算表扫描期间空闲系统的百分比来显示数据分布偏差,这是处理数据偏差的指标。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表

Table 42. gp_skew_idle_fractions视图
描述
sifoid 表的对象ID。
sifnamespace 定义表的名称空间。
sifrelname 表名。
siffraction 在表扫描期间空闲的系统百分比,这表示数据分布不均匀或查询处理偏斜。 例如,值0.1表示10%的歪斜,值0.5表示50%的歪斜,依此类推。 歪斜率超过10%的表应评估其分配策略。