合 GreenPlum中的gp_toolkit管理模式
Tags: GreenPlumgp_toolkit管理模式
- 简介
- 检查需要例行维护的表(表膨胀相关查询)
- gp_bloat_diag
- gp_stats_missing
- 检查锁
- gp_locks_on_relation
- gp_locks_on_resqueue
- 检查追加优化表
- __gp_aovisimap_compaction_info(oid)
- __gp_aoseg_name(‘table_name’)
- __gp_aoseg_history(oid)
- __gp_aocsseg(oid)
- __gp_aocsseg_history(oid)
- __gp_aovisimap(oid)
- __gp_aovisimap_hidden_info(oid)
- __gp_aovisimap_entry(oid)
- 查看Greenplum数据库服务器日志文件
- gp_log_command_timings
- gp_log_database
- gp_log_master_concise
- gp_log_system
- 检查服务器配置文件
- gp_param_setting(‘parameter_name’)
- 示例:
- gp_param_settings_seg_value_diffs
- 检查失败的segments
- gp_pgdatabase_invalid
- 检查资源组活动和状态(资源队列)
- gp_resgroup_config
- gp_resgroup_status
- gp_resgroup_status_per_host
- gp_resgroup_status_per_segment
- 检查资源队列活动和状态
- gp_resq_activity
- gp_resq_activity_by_queue
- gp_resq_priority_statement
- gp_resq_role
- gp_resqueue_status
- 检查查询磁盘溢出空间使用情况(用户使用的工作空间大小信息)
- gp_workfile_entries
- gp_workfile_usage_per_query
- gp_workfile_usage_per_segment
- 查看用户和组(角色)
- gp_roles_assigned
- 检查数据库对象大小和磁盘空间(查看磁盘上(database,schema,table,indexs,view)等的占用大小的相关信息)
- 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
- 检查数据分布不均(表倾斜的相关信息)
- gp_skew_coefficients
- gp_skew_idle_fractions
- 查看用户创建的信息(数据库,schema,表,索引,函数,视图)等信息
- 系统中维护的ID信息
- 系统常用的查询信息
- 系统中常用查询的函数
- 参考
简介
Greenplum数据库提供了一个名为gp_toolkit的管理模式,可用于查询系统catalog,日志文件和操作环境中的系统状态信息。 gp_toolkit模式包含许多视图,您可以使用SQL命令访问这些视图。 尽管某些对象可能需要超级用户权限,但所有数据库用户都可以访问gp_toolkit模式。 为了方便起见,您可能需要将gp_toolkit模式添加到模式搜索路径。 例如:
1 | => ALTER ROLE myrole SET search_path TO myschema,gp_toolkit; |
本文档介绍了gp_toolkit中最有用的视图。 您可能会注意到gp_toolkit模式中的其他对象(视图,函数和外部表)在本文档中未描述(这些是本节中描述的视图的支持对象)。
Warning: 不要在gp_toolkit模式中更改数据库对象。 不要在模式中创建数据库对象。 对模式对象的更改可能会影响模式对象返回的管理信息的准确性。 备份数据库,然后使用gpbackup和gprestore实用程序还原时, 在gp_toolkit模式中所做的任何更改都将丢失。
检查需要例行维护的表(表膨胀相关查询)
以下视图可以帮助您识别需要日常维护的表 (VACUUM和/或ANALYZE)。
VACUUM或VACUUM FULL命令可回收已删除或过时的行所占用的磁盘空间。 由于Greenplum数据库中使用了MVCC事务并发模型,即使任何新事务都不可见,被删除或更新的数据行仍占据磁盘上的物理空间。 过期的行会增加磁盘上的表大小,并最终减慢表的扫描速度。
ANALYZE命令收集查询优化器所需的列级统计信息。 Greenplum数据库使用依赖数据库统计信息的基于成本的查询优化器。 准确的统计信息使查询优化器可以更好地估计选择性和查询操作检索到的行数,从而选择最有效的查询计划。
1 2 3 4 5 | -- 该视图显示了那些膨胀的(在磁盘上实际的页数超过了根据表统计信息得到预期的页数)正规的堆存储的表。 select * from gp_toolkit.gp_bloat_diag; -- 所有对象的膨胀明细 select * from gp_toolkit.gp_bloat_expected_pages; |
gp_bloat_diag
此视图显示膨胀的常规堆存储表(给定表统计信息,磁盘上的实际页面数超过了预期的页面数)。 膨胀的表需要VACUUM或VACUUM FULL,才能回收已删除或过时的行所占用的磁盘空间。 所有用户都可以访问该视图,但是非超级用户将只能看到他们有权访问的表。
Note: 有关返回追加优化表信息的诊断函数,请参阅检查追加优化表。
列 | 描述 |
---|---|
bdirelid | 表OID。 |
bdinspname | 模式名称。 |
bdirelname | 表名。 |
bdirelpages | 磁盘上实际页的数量。 |
bdiexppages | 给定表数据的预期页数。 |
bdidiag | 膨胀诊断消息。 |
gp_stats_missing
该视图显示的表没有统计信息,因此可能需要对该表运行ANALYZE。
列 | 描述 |
---|---|
smischema | 模式名称。 |
smitable | 表名。 |
smisize | 该表是否有统计信息? 如果该表没有在系统catalog中记录行数和行大小统计信息,则为False,这可能表明该表需要进行分析。 如果表不包含任何行,这也将为false。 例如,分区表的父表始终为空,并且始终返回false。 |
smicols | 表中的列数。 |
smirecs | 表中的行数。 |
1 | select * from gp_toolkit.gp_stats_missing; |
检查锁
当事务访问关系(例如表)时,它获取一个锁。 根据获取的锁的类型,后续事务可能必须等待才能访问相同的关系。 有关锁类型的更多信息,请参阅Greenplum数据库管理员指南中的“管理数据”。 Greenplum数据库资源队列(用于资源管理)还使用锁来控制查询进入系统的权限。
gplocks*系列视图可以帮助诊断由于锁定而正在等待访问对象的查询和会话。
1 2 3 4 5 | -- 该视图显示了当前所有表上持有锁,以及查询关联的锁的相关联的会话信息。 select * from gp_toolkit.gp_locks_on_relation; -- 该视图显示当前被一个资源队列持有的所有的锁,以及查询关联的锁的相关联的会话信息。 select * from gp_toolkit.gp_locks_on_resqueue; |
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
Note: 仅当基于资源队列的资源管理处于活动状态时,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函数输出表。
列 | 描述 |
---|---|
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 | gpxmin事务的提交分布式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 | gpxmin的文本表示形式。 |
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 | 已删除或更新的行的行号。 |
此函数返回段文件中针对追加优化表的隐藏和可见元组数。
输入参数是追加优化表的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)均保留其自己的服务器日志文件。 使用gplog*系列视图,您可以对服务器日志文件执行SQL查询,以找到感兴趣的特定条目。 这些视图的使用需要超级用户权限。
查询会报错,可以使用视图gpmetrics.gpcc_pg_log_history
只记录日志级别为FATAL、ERROR和WARNING的日志。
视图gpmetrics.gp_log_master_ext
有记录LOG级别的日志,但是时间比较短。
参考:https://www.dbaup.com/greenplumshujukurichangweihu.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -- 该视图使用一个外部表来读取来自整个Greenplum(Master、Segment、镜像)的服务器日志文件并且列出所有的日志项。 select d.logquery from gp_toolkit.gp_log_system d WHERE d.logtime >='2023-07-19' and d.loghost='hdw1' ; -- 该视图用一个外部表来读取在主机上的日志文件同时报告在数据库会话中SQL命令的执行时间 select * from gp_toolkit.gp_log_command_timings limit 1; -- 该视图使用一个外部表来读取整个Greenplum系统(主机,段,镜像)的服务器日志文件和列出与当前数据库关联的日志的入口。 select * from gp_toolkit.gp_log_database limit 1; -- 该视图使用一个外部表读取来自Master日志文件中日志域的一个子集。 select * from gp_toolkit.gp_log_master_concise d WHERE d.logtime >='2023-07-19' limit 1; |
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 | 与该消息关联的堆栈跟踪的全文。 |
检查服务器配置文件
1 2 3 4 5 | -- 所有参数 SELECT * FROM gp_toolkit.gp_param_settings(); SELECT * FROM gp_toolkit.gp_param_setting('track_activity_query_size'); |
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 | 参数值。 |
示例:
1 | 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) |
检查资源组活动和状态(资源队列)
Note: 仅当基于资源组的资源管理处于活动状态时,本节中描述的资源组活动和状态视图才有效。