使用系统表
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)
注意
如果数据库群集处于正在恢复状态,则无法查询系统表。数据库会拒绝连接请求,无法对其进行监控。此外,Vertica 也不支持对系统表执行 DDL 和 DML 操作。系统表位置
系统表可分为以下两个架构:
-
V_CATALOG 架构:提供有关编录中永久对象的信息
-
V_MONITOR 架构:提供有关瞬时系统状态的信息
这些架构驻留在默认搜索路径中。除非您更改搜索路径以排除 V_MONITOR
和/或 V_CATALOG
,否则查询可以指定不包含表架构的系统表名。
您可以在 SYSTEM_TABLES 表中查询所有 Vertica 系统表及其架构。例如:
SELECT * FROM system_tables ORDER BY table_schema, table_name;
系统表类别
Vertica 系统表可分为以下区域:
-
系统信息
-
系统资源
-
后台进程
-
工作负载和性能
Vertica 会保留一些内存以帮助监控繁忙的系统。使用简单的系统表查询可以更轻松地排除问题。另请参阅 SYSQUERY。
注意
可使用外部监控工具或脚本来查询系统表并根据需要对信息执行操作。例如,当主机故障导致
K-safety 级别低于所需级别时,工具或脚本通常会将此变化以电子邮件形式通知数据库管理员和/或相应的 IT 人员。
权限
您可以授予和撤销对系统表的权限,但有以下限制:
-
您不能向 SYSMONITOR 或 PSEUDOSUPERUSER 角色授予对系统表的权限。
-
您不能授予对系统架构的权限。
区分大小写的系统表数据
一些系统表数据可能以大小写混合的形式存储。例如,Vertica 会按照您在 CREATE 语句中所指定的那样来存储混合大小写的标识符名称,即使在查询中引用它们时忽略大小写。当这些对象名称作为数据出现在系统表中时,如果使用等于 (=
) 运算符查询它们将会遇到错误,因为大小写必须与存储的标识符完全匹配。特别是,系统表 TABLES 中的列 TABLE_SCHEMA
和 TABLE_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)