QianBase MPP之qb_toolkit管理模式

QianBase MPP提供了一个称为qb_toolkit的管理schema,它能用来查询系统表目录、日志文件以及操作系统环境来获取系统状态信息。qb_toolkit方案包含了一些能够通过SQL命令来访问的视图及函数。qb_toolkit能够被所有的数据库用户访问,但是一些对象需要超级用户权限。

qianbase=# set schema 'qb_toolkit';
SET
qianbase=# \dv
List of relations
Schema   |                  Name                  | Type |  Owner
------------+----------------------------------------+------+---------
qb_toolkit | __qb_fullname                          | view | qbadmin
qb_toolkit | __qb_is_append_only                    | view | qbadmin
qb_toolkit | __qb_number_of_segments                | view | qbadmin
qb_toolkit | __qb_user_data_tables_readable         | view | qbadmin
qb_toolkit | __qb_user_namespaces                   | view | qbadmin
qb_toolkit | __qb_user_tables                       | view | qbadmin
qb_toolkit | qb_bloat_diag                          | view | qbadmin
qb_toolkit | qb_bloat_expected_pages                | view | qbadmin
qb_toolkit | qb_locks_on_relation                   | view | qbadmin
qb_toolkit | qb_locks_on_resqueue                   | view | qbadmin
qb_toolkit | qb_log_command_timings                 | view | qbadmin
qb_toolkit | qb_log_database                        | view | qbadmin
qb_toolkit | qb_log_master_concise                  | view | qbadmin
qb_toolkit | qb_log_system                          | view | qbadmin
qb_toolkit | qb_param_settings_seg_value_diffs      | view | qbadmin
qb_toolkit | qb_resgroup_config                     | view | qbadmin
qb_toolkit | qb_resgroup_status                     | view | qbadmin
qb_toolkit | qb_resgroup_status_per_host            | view | qbadmin
qb_toolkit | qb_resgroup_status_per_segment         | view | qbadmin
qb_toolkit | qb_resq_activity                       | view | qbadmin
qb_toolkit | qb_resq_activity_by_queue              | view | qbadmin
qb_toolkit | qb_resq_priority_backend               | view | qbadmin
qb_toolkit | qb_resq_priority_statement             | view | qbadmin
qb_toolkit | qb_resq_role                           | view | qbadmin
qb_toolkit | qb_roles_assigned                      | view | qbadmin
qb_toolkit | qb_size_of_all_table_indexes           | view | qbadmin
qb_toolkit | qb_size_of_database                    | view | qbadmin
qb_toolkit | qb_size_of_index                       | view | qbadmin
qb_toolkit | qb_size_of_schema_disk                 | view | qbadmin
qb_toolkit | qb_size_of_table_and_indexes_disk      | view | qbadmin
qb_toolkit | qb_size_of_table_and_indexes_licensing | view | qbadmin
qb_toolkit | qb_size_of_table_disk                  | view | qbadmin
qb_toolkit | qb_size_of_table_uncompressed          | view | qbadmin
qb_toolkit | qb_skew_coefficients                   | view | qbadmin
qb_toolkit | qb_skew_idle_fractions                 | view | qbadmin
qb_toolkit | qb_stats_missing                       | view | qbadmin
qb_toolkit | qb_table_indexes                       | view | qbadmin
qb_toolkit | qb_workfile_entries                    | view | qbadmin
qb_toolkit | qb_workfile_mgr_used_diskspace         | view | qbadmin
qb_toolkit | qb_workfile_usage_per_query            | view | qbadmin
qb_toolkit | qb_workfile_usage_per_segment          | view | qbadmin
qb_toolkit | qbm_database_invalid                   | view | qbadmin
(42 rows)
qianbase=# \df
 qb_toolkit | __qb_aoblkdir                                  | TABLE(tupleid tid, segno integer, columngroup_no integer, entry_no integer, first_row_no bigint, file_offset bigint, row_count bigint)                                                               | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aocsseg                                   | TABLE(segment_id integer, segno integer, column_num smallint, physical_segno integer, tupcount bigint, eof bigint, eof_uncompressed bigint, modcount bigint, formatversion smallint, state smallint) | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aocsseg_history                           | TABLE(segment_id integer, segno integer, column_num smallint, physical_segno integer, tupcount bigint, eof bigint, eof_uncompressed bigint, modcount bigint, formatversion smallint, state smallint) | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aoseg                                     | TABLE(segment_id integer, segno integer, eof bigint, tupcount bigint, varblockcount bigint, eof_uncompressed bigint, modcount bigint, formatversion smallint, state smallint)                        | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aoseg_history                             | TABLE(segment_id integer, segno integer, tupcount bigint, eof bigint, eof_uncompressed bigint, modcount bigint, formatversion smallint, state smallint)                                              | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aovisimap                                 | TABLE(tid tid, segno integer, row_num bigint)                                                                                                                                                        | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aovisimap_compaction_info                 | SETOF record                                                                                                                                                                                         | ao_oid oid, OUT content integer, OUT datafile integer, OUT compaction_possible boolean, OUT hidden_tupcount bigint, OUT total_tupcount bigint, OUT percent_hidden numeric | func
 qb_toolkit | __qb_aovisimap_entry                           | TABLE(segno integer, first_row_num bigint, hidden_tupcount integer, bitmap text)                                                                                                                     | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aovisimap_hidden_info                     | TABLE(segno integer, hidden_tupcount bigint, total_tupcount bigint)                                                                                                                                  | regclass                                                                                                                                                                  | func
 qb_toolkit | __qb_aovisimap_hidden_typed                    | SETOF __qb_aovisimap_hidden_t                                                                                                                                                                        | oid                                                                                                                                                                       | func
 qb_toolkit | __qb_param_setting_on_master                   | SETOF qb_param_setting_t                                                                                                                                                                             | character varying                                                                                                                                                         | func
 qb_toolkit | __qb_param_setting_on_segments                 | SETOF qb_param_setting_t                                                                                                                                                                             | character varying                                                                                                                                                         | func
 qb_toolkit | __qb_skew_coefficients                         | SETOF qb_skew_analysis_t                                                                                                                                                                             |                                                                                                                                                                           | func
 qb_toolkit | __qb_skew_idle_fractions                       | SETOF qb_skew_analysis_t                                                                                                                                                                             |                                                                                                                                                                           | func
 qb_toolkit | __qb_workfile_entries_f_on_master              | SETOF record                                                                                                                                                                                         |                                                                                                                                                                           | func
 qb_toolkit | __qb_workfile_entries_f_on_segments            | SETOF record                                                                                                                                                                                         |                                                                                                                                                                           | func
 qb_toolkit | __qb_workfile_mgr_used_diskspace_f_on_master   | SETOF record                                                                                                                                                                                         |                                                                                                                                                                           | func
 qb_toolkit | __qb_workfile_mgr_used_diskspace_f_on_segments | SETOF record                                                                                                                                                                                         |                                                                                                                                                                           | func
 qb_toolkit | qb_bloat_diag                                  | record                                                                                                                                                                                               | btdrelpages integer, btdexppages numeric, aotable boolean, OUT bltidx integer, OUT bltdiag text                                                                           | func
 qb_toolkit | qb_param_setting                               | SETOF qb_param_setting_t                                                                                                                                                                             | character varying                                                                                                                                                         | func
 qb_toolkit | qb_param_settings                              | SETOF qb_param_setting_t                                                                                                                                                                             |                                                                                                                                                                           | func
 qb_toolkit | qb_skew_coefficient                            | record                                                                                                                                                                                               | targetoid oid, OUT skcoid oid, OUT skccoeff numeric                                                                                                                       | func
 qb_toolkit | qb_skew_details                                | SETOF qb_skew_details_t                                                                                                                                                                              | oid                                                                                                                                                                       | func
 qb_toolkit | qb_skew_idle_fraction                          | record                                                                                                                                                                                               | targetoid oid, OUT sifoid oid, OUT siffraction numeric

下面对相关的视图依次讲解其用途。

检查需要日常维护的表(需要VACUUM或ANALYZE的表)

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

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

  • qb_bloat_diag
    这个视图显示了有膨胀的常规堆存储表(根据表统计信息,磁盘上的实际页面数超过了预期的页面数)。膨胀的表需要VACUUM或VACUUM FULL来回收被删除或过时的行所占用的磁盘空间。所有用户都可以访问这个视图,但是非超级用户只能看到他们有权访问的表。

  • qb_stats_missing
    这个视图显示了没有统计信息的表,因此可能需要在表上运行ANALYZE

检查锁

当一个事务访问一个关系(比如一个表)时,它会获得一个锁。根据所获取的锁的类型,后续事务可能必须等待才能访问相同的关系。QianBase数据库资源队列(用于资源管理)也使用锁来控制查询进入系统的许可。

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

  • qb_locks_on_relation
    这个视图显示当前在一个关系上持有的所有锁,以及与该锁关联的查询的相关会话信息。所有用户都可以访问这个视图,但是非超级用户只能看到他们有权访问的关系的锁。

  • qb_locks_on_resqueue
    此视图显示资源队列上当前持有的所有锁,以及与锁关联的查询的相关会话信息。所有用户都可以访问这个视图,但是非超级用户只能看到与他们自己的会话相关联的锁。

检查AO表

qb_toolkit模式包括一组诊断函数,可用于调查追加优化表的状态。

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

追加优化的表可能有不可见的行——这些行已被更新或删除,但在使用VACUUM压缩表之前仍保留在存储中。使用辅助可见性映射表(visimap)跟踪隐藏行。

下面的函数允许您访问附加优化和面向列的表的元数据,并查看不可见的行。

对于大多数函数,输入参数是regclass,表名或表的oid。

  • __qb_aovisimap_compaction_info(oid)
    此函数显示附加优化表的压缩信息。该信息适用于存储表数据对应的磁盘数据文件。您可以使用这些信息来确定将通过对附加优化表进行VACUUM操作来压缩的数据文件。

  • __qb_aoseg(regclass)
    这个函数返回包含在追加优化表的磁盘段文件中的元数据信息。
    输入参数是经过追加优化的表的名称或oid。

  • __qb_aoseg_history(regclass)
    这个函数返回包含在追加优化表的磁盘段文件中的元数据信息。它显示aoseg元信息的所有不同版本(堆元组)。数据很复杂,但对系统有深入了解的用户可能会发现它对调试很有用。
    输入参数是经过追加优化的表的名称或oid。

  • __qb_aocsseg(regclass)
    此函数返回包含在面向列的追加优化表的磁盘段文件中的元数据信息,不包括不可见的行。每一行描述表中一列的一个段。
    输入参数是面向列的追加优化表的名称或oid。

  • __qb_aocsseg_history(regclass)
    这个函数返回包含在面向列的追加优化表的磁盘段文件中的元数据信息。每一行描述表中一列的一个段。数据很复杂,但对系统有深入了解的用户可能会发现它对调试很有用。
    输入参数是面向列的追加优化表的名称或oid。

  • __qb_aovisimap(regclass)
    该函数根据可见性映射返回元组ID、段文件和每个不可见元组的行号。
    输入参数是经过追加优化的表的名称或oid。

  • __qb_aovisimap_hidden_info(regclass)
    这个函数返回一个追加优化表的段文件中隐藏和可见元组的数量。
    输入参数是经过追加优化的表的名称或oid。

  • __qb_aovisimap_entry(regclass)
    这个函数返回关于该表的每个可见性映射项的信息。
    输入参数是经过追加优化的表的名称或oid。

  • __qb_aoblkdir(regclass)
    对于给定的有索引或有索引的AO/AOCO表,该函数为块目录关系中记录的每个块目录条目返回一行;它将块目录关系的mini页列扁平化,并为每个mini页条目返回一行。
    输入参数是经过追加优化的表的名称或oid。
    你必须在实用模式下对每个段执行这个函数,或者使用gp_dist_random(),如下所示:
    SELECT (qb_toolkit.__qb_aoblkdir(‘<table_name>’)).* FROM qb_dist_random(‘qb_id’);

  • get_column_size(oid)
    对于给定的AOCO表,该函数返回表中所有列的列大小和压缩比。
    输入参数是面向列的追加优化表的对象标识符。

  • qb_column_size
    该视图收集所有段中面向列的追加优化表的列大小和压缩比。

  • qb_column_size_summary
    这个视图显示了qb_column_size视图的摘要。它从所有段中聚合每个面向列的追加优化表中每个列的列大小和压缩比。

查看数据库服务端日志文件

QianBase系统的每个组件(管理节点、备用管理节点、主实例和镜像实例)都保留自己的服务器日志文件。qb_log_*系列视图允许您对服务器日志文件发出SQL查询,以查找感兴趣的特定条目。使用这些视图需要超级用户权限。

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

  • qb_log_database
    该视图使用外部表读取整个QianBase系统(协调器、实例和镜像)的服务器日志文件,并列出与当前数据库关联的日志项。关联的日志项可以通过会话id (logsession)和命令id (logcmdcount)来标识。使用此视图需要超级用户权限。

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

  • qb_log_system
    这个视图使用一个外部表来读取整个QianBase系统(协调器、段和镜像)的服务器日志文件,并列出所有日志条目。关联的日志项可以通过会话id (logsession)和命令id (logcmdcount)来标识。使用此视图需要超级用户权限。

查看服务端配置文件

QianBase数据库系统的每个组件(管理节点、备用管理节点、主实例和镜像实例)都有自己的服务器配置文件(postgresql.conf)。下面的qb_toolkit对象可以用来检查系统中所有主postgresql.conf文件的参数设置:

  • qb_param_setting(‘parameter_name’)
    该函数接受服务器配置参数的名称,并返回协调器和每个活动实例的postgresql.conf值。此功能可供所有用户访问。

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

检查失效的segments

  • qbm_database_invalid
    这个视图显示了关于在系统编目中被标记为向下的段的信息。所有用户都可以访问该视图。

检查资源组状态

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

可以使用qb_resgroup_config视图查看每个资源组的配置信息。qb_resgroup_status*视图可以显示每个资源组的当前事务状态和资源使用情况。

  • qb_resgroup_config
    此视图允许管理员查看资源组的当前CPU、内存和并发性限制。
    所有用户都可以访问该视图。

  • qb_resgroup_status
    此视图允许管理员查看资源组的状态和活动。它显示每个资源组有多少查询正在等待运行,以及系统中当前有多少查询处于活动状态。该视图还显示资源组的当前内存和CPU使用情况。

  • qb_resgroup_status_per_host
    此视图显示每个资源组在每个主机上的实时CPU和内存使用情况(mb)。该视图还显示主机上每个资源组的可用内存和授予的组固定内存和共享内存。

  • qb_resgroup_status_per_segment
    显示每个segment上的CPU和内存使用情况。

检查资源队列状态

资源队列的目的是在任何给定时间限制系统中活动查询的数量,以避免耗尽系统资源,如内存、CPU和磁盘I/O。所有数据库用户都被分配到一个资源队列,用户提交的每个语句在运行之前首先根据资源队列限制进行评估。qb_resq_*系列视图可用于检查当前通过各自的资源队列提交给系统的语句的状态。注意,超级用户发出的语句不受资源排队的影响。

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

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

  • qb_resq_priority_statement
    该视图显示当前在QianBase系统中运行的所有语句的资源队列优先级、会话ID和其他信息。所有用户都可以访问该视图。

  • qb_resq_role
    此视图显示与角色关联的资源队列。所有用户都可以访问该视图。

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

qb_workfile_*视图显示有关当前正在使用磁盘溢出空间的所有查询的信息。如果没有足够的内存在内存中运行查询,QianBase数据库将在磁盘上创建工作文件。此信息可用于故障排除和调优查询。视图中的信息还可以用于指定QianBase配置参数qb_workfile_limit_per_query和qb_workfile_limit_per_segment的值。

  • qb_workfile_entries
    此视图包含一行,用于当前时间段上为工作文件使用磁盘空间的每个操作符。所有用户都可以访问该视图,但是非超级用户只能查看他们有权访问的数据库的信息。

  • qb_workfile_usage_per_query
    此视图为当前时间段上使用磁盘空间的工作文件的每个查询包含一行。所有用户都可以访问该视图,但是非超级用户只能查看他们有权访问的数据库的信息。

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

检查用户和组(角色)

将用户(角色)分组在一起以简化对象权限的管理通常很方便:这样,可以将权限授予或从整个组中撤消。在QianBase中,这是通过创建一个代表组的角色,然后将组角色中的成员资格授予各个用户角色来完成的。

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

  • qb_roles_assigned
    这个视图显示了系统中的所有角色,以及它们分配的成员(如果角色也是一个组角色)。所有用户都可以访问该视图。

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

qb_size_*系列视图可用于确定分布式QianBase数据库、模式、表或索引的磁盘空间使用情况。下面的视图计算对象在所有主段上的总大小(镜像不包括在大小计算中)。

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

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

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

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

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

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

  • qb_size_of_table_disk
    这个视图显示了磁盘上表的大小。所有用户都可以访问这个视图,但是非超级用户只能看到他们有权访问的表。

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

  • qb_disk_free
    这个外部表在活动段主机上运行df (disk free)命令并报告结果。非活动镜像不包括在计算中。使用这个外部表需要超级用户权限。

检查丢失数据文件

QianBase认为存在于目录中但不在磁盘上的关系数据文件丢失。相反,当QianBase在磁盘上遇到未在任何关系中引用的意外数据文件时,它认为该文件是孤立的。

在扩展集群或离线维护之前检查这些条件是最佳实践。

默认情况下,PUBLIC可以使用本节中标识的视图。

  • qb_check_orphaned_files
    此视图扫描默认和用户定义的表空间,查找孤立的数据文件。QianBase数据库在此检查中考虑普通数据文件、名称中带有下划线(_)的文件和扩展编号文件(名称中包含.的文件)。qb_check_orphaned_files收集来自数据库协调器和所有段的结果。

  • qb_check_missing_files
    此视图扫描堆和追加优化的、面向列的表,查找丢失的数据文件。QianBase只考虑普通的数据文件(不包含。或者名字里有_)qb_check_missing_files收集来自数据库协调器和所有段的结果。

  • qb_check_missing_files_ext
    此视图只扫描经过附加优化的、面向列的表,以查找丢失的扩展数据文件。QianBase数据库在此检查中考虑普通数据文件和扩展编号文件(文件名中包含.的文件)。文件名中包含_的文件不被考虑。qb_check_missing_files_ext只收集数据库段的结果。

检查不均匀数据分布

QianBase数据库中的所有表都是分布式的,这意味着它们的数据分布在系统中的所有段上。如果数据分布不均匀,那么查询处理性能可能会下降。下面的视图可以帮助诊断表的数据分布是否不均匀。

  • qb_skew_coefficients
    这个视图通过计算存储在每个段上的数据的变异系数(CV)来显示数据分布的倾斜。所有用户都可以访问这个视图,但是非超级用户只能看到他们有权访问的表。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值