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模式中的其他对象(视图,函数和外部表)在本文档中未描述(这些是本节中描述的视图的支持对象)。
检查需要例行维护的表
以下视图可以帮助您识别需要日常维护的表 (VACUUM和/或ANALYZE)。
VACUUM或VACUUM FULL命令可回收已删除或过时的行所占用的磁盘空间。 由于Greenplum数据库中使用了MVCC事务并发模型,即使任何新事务都不可见,被删除或更新的数据行仍占据磁盘上的物理空间。 过期的行会增加磁盘上的表大小,并最终减慢表的扫描速度。
ANALYZE命令收集查询优化器所需的列级统计信息。 Greenplum数据库使用依赖数据库统计信息的基于成本的查询优化器。 准确的统计信息使查询优化器可以更好地估计选择性和查询操作检索到的行数,从而选择最有效的查询计划。
gp_bloat_diag
列 | 描述 |
---|---|
bdirelid | 表OID。 |
bdinspname | 模式名称。 |
bdirelname | 表名。 |
bdirelpages | 磁盘上实际页的数量。 |
bdiexppages | 给定表数据的预期页数。 |
bdidiag | 膨胀诊断消息。 |
gp_stats_missing
该视图显示的表没有统计信息,因此可能需要对该表运行ANALYZE。
列 | 描述 |
---|---|
smischema | 模式名称。 |
smitable | 表名。 |
smisize | 该表是否有统计信息? 如果该表没有在系统catalog中记录行数和行大小统计信息,则为False,这可能表明该表需要进行分析。 如果表不包含任何行,这也将为false。 例如,分区表的父表始终为空,并且始终返回false。 |
smicols | 表中的列数。 |
smirecs | 表中的行数。 |
检查锁
当事务访问关系(例如表)时,它获取一个锁。 根据获取的锁的类型,后续事务可能必须等待才能访问相同的关系。 有关锁类型的更多信息,请参阅Greenplum数据库管理员指南中的“管理数据”。 Greenplum数据库资源队列(用于资源管理)还使用锁来控制查询进入系统的权限。
gp_locks_*系列视图可以帮助诊断由于锁定而正在等待访问对象的查询和会话。
gp_locks_on_relation
此视图显示当前在某个关系上持有的所有锁,以及有关与该锁关联的查询的关联会话信息。 有关锁类型的更多信息,请参阅Greenplum数据库管理员指南中的“管理数据”。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系的锁。
列 | 描述 |
---|---|
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
该视图显示了资源队列中当前持有的所有锁,以及与该锁关联的查询的关联会话信息。 所有用户都可以访问此视图,但是非超级用户将只能看到与其自己的会话相关联的锁。
列 | 描述 |
---|---|
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操作对追加优化表进行压缩的数据文件。
下表描述了__gp_aovisimap_compaction_info函数输出表。
列 | 描述 |
---|---|
content | Greenplum数据库segment ID。 |
datafile | segment上数据文件的ID。 |
compaction_possible | 该值为t或f。
值t表示执行VACUUM操作时压缩数据文件中的数据。
服务器配置参数gp_appendonly_compaction_threshold会影响此值。 |
hidden_tupcount | 在数据文件中,隐藏(删除或更新)的行数。 |
total_tupcount | 在数据文件中,总行数。 |
percent_hidden | 在数据文件中,隐藏(已删除或更新)行与总行的比率(百分比)。 |
__gp_aoseg_name('table_name')
此函数返回追加优化表的磁盘段文件中包含的元数据信息。
列 | 描述 |
---|---|
segno | 文件段号。 |
eof | 该文件段的文件有效结尾。 |
tupcount | 段中的元组总数,包括不可见的元组。 |
varblockcount | 文件段中的varblocks总数。 |
eof_uncompressed | 文件末尾(如果文件段未压缩)。 |
modcount | 数据修改操作的数量。 |
state | 文件段的状态。 指示段是活动的还是压缩后可以删除的。 |
__gp_aoseg_history(oid)
此函数返回追加优化表的磁盘段文件中包含的元数据信息。 它显示aoseg元信息的所有不同版本(堆元组)。 数据很复杂,但是对系统有深入了解的用户可能会发现它对于调试很有用。
输入参数是追加优化表的oid。
调用__gp_aoseg_history_name('table_name')可获得与表名参数相同的结果。
列 | 描述 |
---|---|
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')获得相同的结果。
列 | 描述 |
---|---|
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')获得相同的结果。
列 | 描述 |
---|---|
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')可获得与表名参数相同的结果。
列 | 描述 |
---|---|
segno | 可见性映射条目的段号。 |
first_row_num | 条目的第一行号。 |
hidden_tupcount | 条目中的隐藏元组数。 |
bitmap | 可见性位图的文本表示。 |
查看Greenplum数据库服务器日志文件
Greenplum数据库系统的每个组件(master,standby,primary和mirror)均保留其自己的服务器日志文件。 使用gp_log_*系列视图,您可以对服务器日志文件执行SQL查询,以找到感兴趣的特定条目。 这些视图的使用需要超级用户权限。
gp_log_command_timings
该视图使用外部表来读取主数据库上的日志文件,并报告在数据库会话中执行的SQL命令的执行时间。 使用此视图需要超级用户权限。
列 | 描述 |
---|---|
logsession | 会话标识符(以"con"为前缀)。 |
logcmdcount | 会话中的命令号(以"cmd"为前缀)。 |
logdatabase | 数据库的名称。 |
loguser | 数据库用户的名称。 |
logpid | 进程ID(前缀为"p")。 |
logtimemin | 此命令的第一条日志消息的时间。 |
logtimemax | 该命令的最后一条日志消息的时间。 |
logduration | 语句从开始到结束时间的持续时间。 |
gp_log_database
该视图使用外部表读取整个Greenplum系统的服务器日志文件(master,primary和mirror), 并列出与当前数据库关联的日志条目。 可以通过会话ID(logsession)和命令ID(logcmdcount)标识关联的日志条目。 使用此视图需要超级用户权限。
列 | 描述 |
---|---|
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日志文件读取日志字段的子集。 使用此视图需要超级用户权限。
列 | 描述 |
---|---|
logtime | 日志消息的时间戳。 |
logdatabase | 数据库的名称。 |
logsession | 会话标识符(以"con"为前缀)。 |
logcmdcount | 会话中的命令号(以"cmd"为前缀)。 |
logmessage | 日志或错误消息文本。 |
gp_log_system
该视图使用一个外部表来读取整个Greenplum系统(master,segment和mirror)的服务器日志文件,并列出所有日志条目。 可以通过会话ID(logsession)和命令ID(logcmdcount)标识关联的日志条目。 使用此视图需要超级用户权限。
列 | 描述 |
---|---|
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值。 所有用户均可使用此函数。
列 | 描述 |
---|---|
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)。 所有用户均可访问此视图。
列 | 描述 |
---|---|
psdname | 参数的名称。 |
psdvalue | 参数的值。 |
psdcount | 具有此值的segment数。 |
检查失败的segments
gp_pgdatabase_invalid视图可用于检查宕机的segment。
gp_pgdatabase_invalid
此视图显示有关在系统目录中标记为宕机的segment的信息。 所有用户均可访问此视图。
列 | 描述 |
---|---|
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) |
检查资源组活动和状态
资源组管理事务,以避免耗尽系统CPU和内存资源。 每个数据库用户都被分配了一个资源组。 在运行事务之前,Greenplum数据库会根据为用户资源组配置的限制评估用户提交的每个事务。
您可以使用gp_resgroup_config视图检查每个资源组的配置。 您可以使用gp_resgroup_status*视图显示当前事务状态和每个资源组的资源使用情况。
gp_resgroup_config
使用gp_resgroup_config视图,管理员可以查看资源组的当前CPU,内存和并发限制。 该视图还显示建议的限制设置。 更改限制后,建议的限制将不同于当前限制,但是无法立即应用新值。
This view is accessible to all users.
列 | 描述 |
---|---|
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使用率。
所有用户均可访问此视图。
列 | 描述 |
---|---|
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主机上资源组的实时内存使用情况。 |
{"-1":0.01, "0":0.31, "1":0.31}
在此示例中,segment 0和segment 1在同一主机上运行;它们的CPU使用率是相同的。
"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}
gp_resgroup_status_per_host
gp_resgroup_status_per_host视图以主机为单位显示每个资源组的实时CPU和内存使用率(MB)。 该视图还显示主机上每个资源组的可用和已授予组的固定和共享内存。
列 | 描述 |
---|---|
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_granted和memory_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实例组合的可用和已授予组的固定和共享内存。
列 | 描述 |
---|---|
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和内存(已使用和可用)。
检查资源队列活动和状态
资源队列的目的是在任何给定时间限制系统中活动查询的数量,以避免耗尽内存,CPU和磁盘I/O等系统资源。 所有数据库用户都分配给一个资源队列,并且在运行该用户之前,将首先针对资源队列限制评估用户提交的每个语句。 gp_resq_*系列视图可用于检查通过它们各自的资源队列当前提交给系统的语句的状态。 请注意,超级用户执行的语句免于资源排队。
gp_resq_activity
对于具有活动工作负载的资源队列,此视图为通过资源队列提交的每个活动语句显示一行。 所有用户均可访问此视图。
列 | 描述 |
---|---|
resqprocpid | 分配给该语句的进程ID(在master上)。 |
resqrole | 用户名。 |
resqoid | 资源队列对象标识。 |
resqname | 资源队列名称。 |
resqstart | 已向系统发布时间声明。 |
resqstatus | 语句状态:running,waiting或cancelled。 |
gp_resq_activity_by_queue
对于具有活动工作负载的资源队列,此视图显示队列活动的摘要。 所有用户均可访问此视图。
列 | 描述 |
---|---|
resqoid | 资源队列对象标识。 |
resqname | 资源队列名称。 |
resqlast | 发布到队列的最后一条语句的时间。 |
resqstatus | 最后一条语句的状态:running,waiting或cancelled。 |
resqtotal | 此队列中的语句总数。 |
gp_resq_priority_statement
该视图显示了Greenplum数据库系统中当前正在运行的所有语句的资源队列优先级,会话ID和其他信息。 所有用户均可访问此视图。
列 | 描述 |
---|---|
rqpdatname | 会话连接到的数据库名称。 |
rqpusename | 执行语句的用户。 |
rqpsession | 会话ID。 |
rqpcommand | 该会话中的语句编号(命令ID和会话ID唯一标识一条语句)。 |
rqppriority | 此语句的资源队列优先级(MAX,HIGH,MEDIUM,LOW)。 |
rqpweight | 与该语句的优先级关联的整数值。 |
rqpquery | 语句的查询文本。 |
gp_resq_role
此视图显示与角色关联的资源队列。 所有用户均可访问此视图。
列 | 描述 |
---|---|
rrrolname | 角色(用户)名称。 |
rrrsqname | 分配给此角色的资源队列名称。 如果尚未将角色明确分配给资源队列,则它将位于默认资源队列(pg_default)中。 |
gp_resqueue_status
该视图使管理员可以查看资源队列的状态和活动。 它显示了特定资源队列中有多少查询正在等待运行以及当前系统中有多少查询处于活动状态。
列 | 描述 |
---|---|
queueid | 资源队列的ID。 |
rsqname | 资源队列的名称。 |
rsqcountlimit | 资源队列的活动查询阈值。 值-1表示没有限制。 |
rsqcountvalue | 资源队列中当前正在使用的活动查询槽的数量。 |
rsqcostlimit | 资源队列的查询成本阈值。 值-1表示没有限制。 |
rsqcostvalue | 资源队列中当前所有语句的总成本。 |
rsqmemorylimit | 资源队列的内存限制。 |
rsqmemoryvalue | 资源队列中当前所有语句使用的总内存。 |
rsqwaiters | 资源队列中当前正在等待的语句数。 |
rsqholders | 此资源队列中当前在系统上运行的语句数。 |
检查查询磁盘溢出空间使用情况
gp_workfile_*视图显示有关当前正在使用磁盘溢出空间的所有查询的信息。 如果Greenplum数据库没有足够的内存来在内存中执行查询,则会在磁盘上创建工作文件。 此信息可用于故障排除和优化查询。 视图中的信息还可用于指定Greenplum数据库配置参数gp_workfile_limit_per_query和gp_workfile_limit_per_segment的值。
gp_workfile_entries
该视图为每个运算符在当前时间使用一个磁盘空间来存储segment上工作文件的每一行。 所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
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上使用工作文件的磁盘空间的每个查询,此视图都包含一行。 所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
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上用于工作文件的磁盘空间总量。 所有用户均可访问该视图,但是非超级用户只能查看其有权访问的数据库信息。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
content | smallint | segment实例的内容标识符。 | |
size | bigint | segment上工作文件的总大小。 | |
numfiles | bigint | 创建的文件数。 |
查看用户和组(角色)
将用户(角色)分组在一起以简化对象特权的管理通常很方便:通过这种方式,可以将特权授予或撤消整个组。 在Greenplum数据库中,这是通过创建代表组的角色,然后将组角色的成员身份授予各个用户角色来完成的。
gp_roles_assigned视图可用于查看系统中的所有角色及其分配的成员(如果角色也是组角色)。
gp_roles_assigned
此视图显示系统中的所有角色及其分配的成员(如果角色也是组角色)。 所有用户均可访问此视图。
列 | 描述 |
---|---|
raroleid | 角色对象ID。 如果此角色具有成员(用户),则将其视为组角色。 |
rarolename | 角色(用户或组)名称。 |
ramemberid | 属于此角色成员的角色的角色对象ID。 |
ramembername | 属于此角色的角色的名称。 |
检查数据库对象大小和磁盘空间
gp_size_*系列视图可用于确定分布式Greenplum数据库,模式,表或索引的磁盘空间使用情况。 以下视图计算了所有primary中对象的总大小(大小计算中不包括mirror)。
- gp_size_of_all_table_indexes
- gp_size_of_database
- gp_size_of_index
- gp_size_of_partition_and_indexes_disk
- gp_size_of_schema_disk
- gp_size_of_table_and_indexes_disk
- gp_size_of_table_and_indexes_licensing
- gp_size_of_table_disk
- gp_size_of_table_uncompressed
- gp_disk_free
表和索引大小视图按对象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
此视图显示表的所有索引的总大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
soatioid | 表的对象ID |
soatisize | 所有表索引的总大小(以字节为单位) |
soatischemaname | 模式名称 |
soatitablename | 表名 |
gp_size_of_database
此视图显示数据库的总大小。 所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的数据库。
列 | 描述 |
---|---|
sodddatname | 数据库名称 |
sodddatsize | 数据库大小(以字节为单位) |
gp_size_of_index
此视图显示索引的总大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
soioid | 索引的对象ID |
soitableoid | 索引所属表的对象ID |
soisize | 索引大小(以字节为单位) |
soiindexschemaname | 索引模式的名称 |
soiindexname | 索引名称 |
soitableschemaname | 表模式的名称 |
soitablename | 表名称 |
gp_size_of_partition_and_indexes_disk
此视图显示分区子表及其索引在磁盘上的大小。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
sopaidparentoid | 父表的对象ID |
sopaidpartitionoid | 分区表的对象ID |
sopaidpartitiontablesize | 分区表大小(以字节为单位) |
sopaidpartitionindexessize | 该分区上所有索引的总大小 |
Sopaidparentschemaname | 父模式的名称 |
Sopaidparenttablename | 父表的名称 |
Sopaidpartitionschemaname | 分区模式的名称 |
sopaidpartitiontablename | 分区表的名称 |
gp_size_of_schema_disk
此视图显示当前数据库中公共模式和用户创建的模式的模式大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的架构。
列 | 描述 |
---|---|
sosdnsp | 模式名称 |
sosdschematablesize | 模式中表的总大小(以字节为单位) |
sosdschemaidxsize | 模式中索引的总大小(以字节为单位) |
gp_size_of_table_and_indexes_disk
此视图显示表及其索引在磁盘上的大小。 所有用户都可以访问此视图,但是非超级用户将只能看到他们有权访问的关系。
列 | 描述 |
---|---|
sotaidoid | 父表的对象ID |
sotaidtablesize | 表的磁盘大小 |
sotaididxsize | 表上所有索引的总大小 |
sotaidschemaname | 模式名称 |
sotaidtablename | 表名 |
gp_size_of_table_and_indexes_licensing
此视图显示用于许可目的的表及其索引的总大小。 使用此视图需要超级用户权限。
列 | 描述 |
---|---|
sotailoid | 表的对象ID |
sotailtablesizedisk | 表的总磁盘大小 |
sotailtablesizeuncompressed | 如果该表是压缩的追加优化表,则以字节为单位显示未压缩的表大小。 |
sotailindexessize | 表中所有索引的总大小 |
sotailschemaname | 模式名称 |
sotailtablename | 表名 |
gp_size_of_table_disk
此视图显示磁盘上表的大小。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表
列 | 描述 |
---|---|
sotdoid | 表的对象ID |
sotdsize | 表的大小(以字节为单位)。 该大小仅是主表的大小。 该大小不包括辅助对象(例如,超大(toast)属性)或AO表的其他存储对象。 |
sotdtoastsize | TOAST表的大小(超大属性存储)(如果有)。 |
sotdadditionalsize | 反映追加优化(AO)表的段和块目录表的大小。 |
sotdschemaname | 模式名称 |
sotdtablename | 表名 |
gp_size_of_table_uncompressed
此视图显示追加优化(AO)表的未压缩表大小。 否则,将显示磁盘上的表大小。 使用此视图需要超级用户权限。
列 | 描述 |
---|---|
sotuoid | 表的对象ID |
sotusize | 如果表是压缩的AO表,则表示表的未压缩大小(以字节为单位)。 否则,为磁盘上表的大小。 |
sotuschemaname | 模式名称 |
sotutablename | 表名 |
gp_disk_free
该外部表在活动segment主机上运行df(disk free)命令,并报告结果。 非活动mirror不包括在计算中。 使用此外部表需要超级用户权限。
列 | 描述 |
---|---|
dfsegment | segment的内容ID(仅显示活动segment) |
dfhostname | segment主机的主机名 |
dfdevice | 设备名称 |
dfspace | segment文件系统中的可用磁盘空间(以千字节为单位) |
检查数据分布不均
Greenplum数据库中的所有表都是分布式的,这意味着它们的数据被划分到系统中的所有segment中。 如果数据分布不均匀,则查询处理性能可能会受到影响。 以下视图可以帮助诊断表是否具有不均匀的数据分布:
gp_skew_coefficients
该视图通过计算存储在每个segment上的数据的变异系数(CV)来显示数据分布偏斜。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表
列 | 描述 |
---|---|
skcoid | 表的对象ID。 |
skcnamespace | 定义表的命名空间。 |
skcrelname | 表名。 |
skccoeff | 变异系数(CV)计算为标准偏差除以平均值。 它同时考虑了平均值和围绕数据序列平均值的变异性。 值越低越好。 较高的值表示较大的数据偏斜。 |
gp_skew_idle_fractions
该视图通过计算表扫描期间空闲系统的百分比来显示数据分布偏差,这是处理数据偏差的指标。 所有用户均可访问此视图,但是非超级用户将只能看到他们有权访问的表
列 | 描述 |
---|---|
sifoid | 表的对象ID。 |
sifnamespace | 定义表的名称空间。 |
sifrelname | 表名。 |
siffraction | 在表扫描期间空闲的系统百分比,这表示数据分布不均匀或查询处理偏斜。 例如,值0.1表示10%的歪斜,值0.5表示50%的歪斜,依此类推。 歪斜率超过10%的表应评估其分配策略。 |