使用 gp_toolkit Schema 查看系统信息
Apache Cloudberry 提供了一个名为 gp_toolkit
的管理 Schema,你可以用它查询系统目录、日志文件和操作环境中的系统状态信息。gp_toolkit
Schema 包含多个视图,可以通过 SQL 命令访问这些视图。所有数据库用户都能访问 gp_toolkit
Schema,虽然某些对象可能需要超级用户权限。为了方便使用,你可以将 gp_toolkit
Schema 添加到你的 Schema 搜索路径中。例如:
=> ALTER ROLE myrole SET search_path TO myschema,gp_toolkit;
本文档描述了 gp_toolkit
中一些最有用的视图和用户定义函数(UDF)。你可能会发现 gp_toolkit
Schema 中还有其他对象(视图、函数和外部表),这些对象是为了支持本节中描述的视图而存在,本文件中未具体描述它们。
请勿更改 gp_toolkit
Schema 中的数据库对象,也不要在该 Schema 中创建新的数据库对象,否则可能会影响这些对象所返回信息的准确性。通过 gpbackup
和 gprestore
工具进行数据库备份和恢复时,对 gp_toolkit
Schema 所做的任何更改都会丢失。
gp_toolkit
Schema 中的视图可以分为以下几类:
检查 需要例行维护的表 检查锁 检查 ao 表 查看 apache cloudberry 服务器日志文件 检查服务器配置文件 检查下线的 segment 检查资源组活动和状态 检查资源队列活动和状态 查询磁盘溢出空间使用情况 查看用户和角色 检查数据库对象大小和磁盘空间 检查缺失和孤立数据文件 移动孤立数据文件 检查不均匀的数据分布 维护分区
关于扩展
gp_toolkit
是在 Apache Cloudberry 中作为扩展实现的。因为此扩展在 template1
数据库中注册,所以你在创建的每个 Apache Cloudberry 数据库中都可以立即使用它。
升级扩展
安装或升级 Apache Cloudberry 时,gp_toolkit
扩展会自动安装。即使升级了 Apache Cloudberry,之前版本的扩展仍可在现有数据库中使用。要将扩展升级到最新版本,你需要在每个使用该扩展的数据库中执行以下命令:
ALTER EXTENSION gp_toolkit UPDATE TO '1.4';
检查需要例行维护的表
以下视图可以帮助识别需要进行例行维护的表(如 VACUUM
和/或 ANALYZE
)。
VACUUM
或 VACUUM FULL
命令用于回收被删除或过期行占用的磁盘空间。由于 Apache Cloudberry 使用的是 MVCC 事务并发模型,被删除或更新的数据行虽然对新事务不可见,但仍然占用磁盘空间。过期的行会增加表在磁盘上的体积,进而降低表的扫描速度。
ANALYZE
命令用于收集查询优化器所需的列级统计信息。Apache Cloudberry 使用基于成本的查询优化器,依赖于数据库统计信息。准确的统计信息有助于查询优化器更好地估计选择性和查询操作将检索的行数,从而选择最有效的查询计划。
gp_bloat_diag
该视图显示了存在膨胀问题的常规堆存储表(即实际磁盘页数超过表统计信息中预期的页数)。这些膨胀的表需要执行 VACUUM
或 VACUUM FULL
操作,以回收被删除或过期行占用的磁盘空间。所有用户都可以访问该视图,但非超级用户只能查看他们有权限访问的表。
有关返回更多表优化信息的诊断功能,请参见检查 AO 表视图。
该视图的列说明如下:
bdirelid
:表对象 ID。bdinspname
:Schema 名称。bdirelname
:表名称。bdirelpages
:磁盘上的实际页数。bdiexppages
:表数据预期的页数。bdidiag
:膨胀诊断信息。
gp_stats_missing
该视图显示了没有统计信息的表,这些表可能需要执行 ANALYZE
操作。
该视图的列说明如下:
smischema
:Schema 名称。smitable
:表名称。smisize
:该表是否具有统计信息?如果表没有记录行计数和行大小统计信息,则此值为假,表明该表可能需要分析。如果表中没有任何行,这个值也会为假。例如,分区表的父表始终是空的,因此始终返回假值。smicols
:表中的列数。smirecs
:表中记录了统计信息的列数。
检查锁
当事务访问某个关系(如表)时,会获取一个锁。根据获取的锁类型,后续事务可能需要等待才能访问相同的关系。有关锁类型的更多信息,请参见事务中的并发控制的多版本并发控制机制。Apache Cloudberry 的资源队列(用于资源管理)也使用锁来控制查询进入系统。
gp_locks_*
系列视图可以帮助诊断由于锁而导致查询和会话等待访问对象的情况。
gp_locks_on_relation
该视图显示当前在关系上持有的任何锁,以及与该锁相关的查询的会话信息。有关锁类型的更多信息,请参见事务中的并发控制。所有用户都可以访问该视图,但非超级用户只能看到他们有权限访问的关系的锁。
该视图的列说明如下:
lorlocktype
:可锁对象的类型:relation
、extend
、page
、tuple
、transactionid
、object
、userlock
、resource queue
或advisory
。lordatabase
:对象所在数据库的对象 ID,如果对象是共享对象,则为零。lorrelname
:关系名称。lorrelation
:关系对象 ID。lortransaction
:受锁影响的事务 ID。lorpid
:持有或等待此锁的服务器进程的进程 ID。如果锁被准备事务持有,则为NULL
。lormode
:当前进程持有或期望的锁模式名称。lorgranted
:显示锁是否已授予(true
)或未授予(false
)。lorcurrentquery
:当前会话中的查询。
gp_locks_on_resqueue
gp_locks_on_resqueue
视图只有在基于资源队列的资源管理启用时才有效。
该视图显示当前在资源队列上持有的锁及相关查询会话的信息。所有用户都可以访问该视图,但非超级用户只能看到与自己会话相关的锁。
该视图的列描述如下:
lorusename
:运行会话的用户名称。lorrsqname
:资源队列名称。lorlocktype
:锁对象的类型:resource queue
。lorobjid
:锁定事务的 ID。lortransaction
:受锁影响的事务 ID。lorpid
:受锁影响事务的进程 ID。lormode
:该进程持有或期望的锁模式名称。lorgranted
:显示锁是否被授予(true
)或未被授予(false
)。lorwaiteventtype
:等待事件的类别(例如 I/O、锁定、网络等)。lorwaitevent
:具体等待事件的名称或描述(例如某个文件的 I/O 操作或锁的对象)。
检查 AO 表
gp_toolkit
Schema 包含一组诊断函数,用于检查 AO 表(即 Append-Optimized 表)的状态。
创建 AO 表(或列式 AO 表)时,会自动创建一张表来存储该表的元数据信息。元数据包括每个表 Segment 中的记录数量等信息。
AO 表中可能包含不可见行——这些是已更新或删除的行,在表执行 VACUUM
压缩前,这些行仍保留在存储中。隐藏行通过辅助的可见性映射表(visimap)进行跟踪。
以下函数可以让你访问 AO 表和列式表的元数据,并查看其中的不可见行。
大多数函数的输入参数是 regclass
,可以是表的 name
或表的 oid
。