使用系统表

Vertica 系统表提供有关系统资源、后台进程、工作负载和性能的信息,例如加载流、查询配置文件和 Tuple Mover 操作。Vertica 自动收集并刷新此信息。

可使用表达式、谓词、聚合、分析、子查询和联接来查询系统表。也可以将系统表查询结果保存到用户表中,以供将来进行分析。例如,以下查询将创建一个名为 mynode 的表,并从 NODES 系统表中选择三个与节点相关的列:

=> CREATE TABLE mynode AS SELECT node_name, node_state, node_address FROM nodes;
CREATE TABLE
=> SELECT * FROM mynode;
    node_name     | node_state |  node_address
------------------+------------+----------------
 v_vmart_node0001 | UP         | 192.168.223.11
(1 row)

系统表位置

系统表可分为以下两个架构:

这些架构驻留在默认搜索路径中。除非您更改搜索路径以排除 V_MONITOR 和/或 V_CATALOG,否则查询可以指定不包含表架构的系统表名。

您可以在 SYSTEM_TABLES 表中查询所有 Vertica 系统表及其架构。例如:

SELECT * FROM system_tables ORDER BY table_schema, table_name;

系统表类别

Vertica 系统表可分为以下区域:

  • 系统信息

  • 系统资源

  • 后台进程

  • 工作负载和性能

Vertica 会保留一些内存以帮助监控繁忙的系统。使用简单的系统表查询可以更轻松地排除问题。另请参阅 SYSQUERY

权限

您可以授予和撤销对系统表的权限,但有以下限制:

  • 您不能向 SYSMONITOR 或 PSEUDOSUPERUSER 角色授予对系统表的权限。

  • 您不能授予对系统架构的权限。

区分大小写的系统表数据

一些系统表数据可能以大小写混合的形式存储。例如,Vertica 会按照您在 CREATE 语句中所指定的那样来存储混合大小写的标识符名称,即使在查询中引用它们时忽略大小写。当这些对象名称作为数据出现在系统表中时,如果使用等于 (=) 运算符查询它们将会遇到错误,因为大小写必须与存储的标识符完全匹配。特别是,系统表 TABLES 中的列 TABLE_SCHEMATABLE_NAME 中的数据区分大小写。

如果您不知道标识符的存储方式,可使用不区分大小写的运算符 ILIKE。例如,给定以下架构:

=> CREATE SCHEMA SS;
=> CREATE TABLE SS.TT (c1 int);
=> CREATE PROJECTION SS.TTP1 AS SELECT * FROM ss.tt UNSEGMENTED ALL NODES;
=> INSERT INTO ss.tt VALUES (1);

使用 = 运算符的查询返回 0 行:

=> SELECT table_schema, table_name FROM v_catalog.tables WHERE table_schema ='ss';
table_schema | table_name
--------------+------------
(0 rows)

使用不区分大小写的 ILIKE 的查询返回预期结果:

=> SELECT table_schema, table_name FROM v_catalog.tables WHERE table_schema ILIKE 'ss';
table_schema | table_name
--------------+------------
 SS           | TT
(1 row)

示例

以下示例将展示在查询中使用系统表的简单方法。


=> SELECT current_epoch, designed_fault_tolerance, current_fault_tolerance FROM SYSTEM;
 current_epoch | designed_fault_tolerance | current_fault_tolerance
---------------+--------------------------+-------------------------
           492 |                        1 |                       1
(1 row)

=> SELECT node_name, total_user_session_count, executed_query_count FROM query_metrics;
    node_name     | total_user_session_count | executed_query_count
------------------+--------------------------+----------------------
 v_vmart_node0001 |                      115 |                  353
 v_vmart_node0002 |                      114 |                   35
 v_vmart_node0003 |                      116 |                   34
(3 rows)

=> SELECT DISTINCT(schema_name), schema_owner FROM schemata;
 schema_name  | schema_owner
--------------+--------------
 v_catalog    | dbadmin
 v_txtindex   | dbadmin
 v_func       | dbadmin
 TOPSCHEMA    | dbadmin
 online_sales | dbadmin
 v_internal   | dbadmin
 v_monitor    | dbadmin
 structs      | dbadmin
 public       | dbadmin
 store        | dbadmin
(10 rows)