以下函数适用于 Eon 模式。
Eon 模式函数
- 1: ALTER_LOCATION_SIZE
- 2: BACKGROUND_DEPOT_WARMING
- 3: CANCEL_DEPOT_WARMING
- 4: CANCEL_DRAIN_SUBCLUSTER
- 5: CLEAN_COMMUNAL_STORAGE
- 6: CLEAR_DATA_DEPOT
- 7: CLEAR_DEPOT_PIN_POLICY_PARTITION
- 8: CLEAR_DEPOT_PIN_POLICY_PROJECTION
- 9: CLEAR_DEPOT_PIN_POLICY_TABLE
- 10: CLEAR_FETCH_QUEUE
- 11: DEMOTE_SUBCLUSTER_TO_SECONDARY
- 12: FINISH_FETCHING_FILES
- 13: FLUSH_REAPER_QUEUE
- 14: MIGRATE_ENTERPRISE_TO_EON
- 15: PROMOTE_SUBCLUSTER_TO_PRIMARY
- 16: REBALANCE_SHARDS
- 17: RESHARD_DATABASE
- 18: SET_DEPOT_PIN_POLICY_PARTITION
- 19: SET_DEPOT_PIN_POLICY_PROJECTION
- 20: SET_DEPOT_PIN_POLICY_TABLE
- 21: SHUTDOWN_SUBCLUSTER
- 22: SHUTDOWN_WITH_DRAIN
- 23: START_DRAIN_SUBCLUSTER
- 24: START_REAPING_FILES
- 25: SYNC_CATALOG
1 - ALTER_LOCATION_SIZE
仅限 Eon 模式
调整子群集中一个节点或所有节点或者数据库中所有节点的 存储库大小。
重要
减小存储库的大小可能会增加对存储库的争用,并且需要进行频繁的逐出操作。此行为可能会增加路由到公共存储以进行处理的查询和加载操作的数量,这可能会导致性能下降和访问费用增加。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
不可变语法
ALTER_LOCATION_SIZE( 'location', '[target]', 'size')
参数
-
location
- 指定要调整大小的位置,为以下之一:
-
depot
:调整节点当前存储库的大小。 -
存储库在 Linux 文件系统中的绝对路径。如果更改多个节点上的存储库大小并指定路径,则所有受影响节点上的路径必须相同。默认情况下,并非如此,因为节点的名称通常是此路径。例如,
verticadb
数据库中节点 1 的默认存储库路径为/vertica/data/verticadb/v_verticadb_node0001_depot
。
-
-
目标值
- 要更改存储库的一个或多个节点,为以下之一:
-
节点名称:调整指定节点的大小。
-
子群集名称:调整指定子群集中所有节点的存储库大小。
-
空字符串:调整数据库中所有存储库的大小。
-
-
size
仅当存储位置使用类型设置为
DEPOT
时才有效,指定存储库可以从存储位置的文件系统中分配的最大磁盘空间量。您可以通过两种方式指定 size:
-
integer%
:存储位置的磁盘大小所占的百分比。 -
integer{K|M|G|T}
:以千字节、兆字节、千兆字节或太字节为单位的存储位置的磁盘大小。
重要
存储库大小不能超过其所在文件系统磁盘空间的 80%。如果指定的值太大,Vertica 会发出警告并自动将该值更改为文件系统大小的 80%。-
特权
超级用户示例
将所有节点的存储库大小增加到文件系统的 80%:
=> SELECT node_name, location_label, location_path, max_size, disk_percent FROM storage_locations WHERE location_usage = 'DEPOT' ORDER BY node_name;
node_name | location_label | location_path | max_size | disk_percent
------------------+-----------------+-------------------------+-------------+--------------
v_vmart_node0001 | auto-data-depot | /home/dbadmin/verticadb | 36060108800 | 70%
v_vmart_node0002 | auto-data-depot | /home/dbadmin/verticadb | 36059377664 | 70%
v_vmart_node0003 | auto-data-depot | /home/dbadmin/verticadb | 36060108800 | 70%
(3 rows)
=> SELECT alter_location_size('depot', '','80%');
alter_location_size
---------------------
depotSize changed.
(1 row)
=> SELECT node_name, location_label, location_path, max_size, disk_percent FROM storage_locations WHERE location_usage = 'DEPOT' ORDER BY node_name;
node_name | location_label | location_path | max_size | disk_percent
------------------+-----------------+-------------------------+-------------+--------------
v_vmart_node0001 | auto-data-depot | /home/dbadmin/verticadb | 41211552768 | 80%
v_vmart_node0002 | auto-data-depot | /home/dbadmin/verticadb | 41210717184 | 80%
v_vmart_node0003 | auto-data-depot | /home/dbadmin/verticadb | 41211552768 | 80%
(3 rows)
将 analytics 子群集中所有节点的存储库大小更改为文件系统大小的 75%:
=> SELECT subcluster_name, subclusters.node_name, storage_locations.max_size, storage_locations.disk_percent FROM subclusters INNER JOIN storage_locations ON subclusters.node_name = storage_locations.node_name WHERE storage_locations.location_usage='DEPOT';
subcluster_name | node_name | max_size | disk_percent
--------------------+----------------------+----------------------------
default_subcluster | v_verticadb_node0001 | 25264737485 | 60%
default_subcluster | v_verticadb_node0002 | 25264737485 | 60%
default_subcluster | v_verticadb_node0003 | 25264737485 | 60%
analytics | v_verticadb_node0004 | 25264737485 | 60%
analytics | v_verticadb_node0005 | 25264737485 | 60%
analytics | v_verticadb_node0006 | 25264737485 | 60%
analytics | v_verticadb_node0007 | 25264737485 | 60%
analytics | v_verticadb_node0008 | 25264737485 | 60%
analytics | v_verticadb_node0009 | 25264737485 | 60%
(9 rows)
=> SELECT ALTER_LOCATION_SIZE('depot','analytics','75%');
ALTER_LOCATION_SIZE
---------------------
depotSize changed.
(1 row)
=> SELECT subcluster_name, subclusters.node_name, storage_locations.max_size, storage_locations.disk_percent FROM subclusters INNER JOIN storage_locations ON subclusters.node_name = storage_locations.node_name WHERE storage_locations.location_usage='DEPOT';
subcluster_name | node_name | max_size | disk_percent
--------------------+----------------------+----------------------------
default_subcluster | v_verticadb_node0001 | 25264737485 | 60%
default_subcluster | v_verticadb_node0002 | 25264737485 | 60%
default_subcluster | v_verticadb_node0003 | 25264737485 | 60%
analytics | v_verticadb_node0004 | 31580921856 | 75%
analytics | v_verticadb_node0005 | 31580921856 | 75%
analytics | v_verticadb_node0006 | 31580921856 | 75%
analytics | v_verticadb_node0007 | 31580921856 | 75%
analytics | v_verticadb_node0008 | 31580921856 | 75%
analytics | v_verticadb_node0009 | 31580921856 | 75%
(9 rows)
另请参阅
Eon 模式体系结构2 - BACKGROUND_DEPOT_WARMING
仅限 Eon 模式
已弃用
Vertica 10.0.0 版移除了对前台存储库预热的支持。启用后,存储库预热始终在后台发生。由于前台存储库预热不再存在,因此此函数没有任何用途且已被弃用。调用它没有任何效果。强制正在预热其存储库的节点开始处理查询,同时继续在后台预热其存储库。仅当节点正在加入数据库并激活其订阅时,才会进行存储库预热。此函数仅在以下情况下有效:
-
数据库在 Eon 模式下运行。
-
节点当前正在预热其存储库。
-
该节点正在从公共存储中预热其存储库。当 UseCommunalStorageForBatchDepotWarming 配置参数设置为默认值 1 时就是这种情况。有关此参数的详细信息,请参阅 Eon 模式参数。
调用此函数后,节点在参与查询时将在后台对其存储库进行预热。
此函数对未预热其存储库的节点没有影响。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
BACKGROUND_DEPOT_WARMING('node-name' [, 'subscription-name'])
参数
-
node-name
- 您要在后台预热其存储库的节点的名称。
-
订购名称
- 节点订购的分片的名称,您希望节点在后台预热。您可以在 NODE_SUBSCRIPTIONS 系统表的 SHARD_NAME 列中找到节点订阅的分片的名称。
注意
当您在后台提供特定分片订购的名称时,该节点可能不会立即开始处理查询。如果它们尚未预热,它将继续预热前台中的任何其他分片订购。该节点在完成对其他订购的预热之前不会开始参与查询。
返回值
指示节点预热将在后台继续的消息。
特权
用户必须是 超级用户。
示例
以下示例演示了 verticadb 数据库的节点 6 在后台对其存储库进行预热:
=> SELECT BACKGROUND_DEPOT_WARMING('v_verticadb_node0006');
BACKGROUND_DEPOT_WARMING
----------------------------------------------------------------------------
Depot warming running in background. Check monitoring tables for progress.
(1 row)
另请参阅
3 - CANCEL_DEPOT_WARMING
仅限 Eon 模式
取消节点上的存储库预热。仅当节点正在加入数据库并激活其订阅时,才会进行存储库预热。您可以选择取消节点上的所有预热,或者取消特定分片订阅的预热。节点将结束其当前执行的任何数据传输,以对其存储库进行预热,并从其队列中移除与预热相关的待执行传输。它将保留已加载到其存储库中的所有数据。当取消对特定订阅的预热时,如果所有其他订阅都已预热,则将停止预热存储库。如果其他订阅未预热,节点会继续预热其他订阅。
此函数仅在以下情况下有效:
-
数据库在 Eon 模式下运行。
-
节点当前正在预热其存储库。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CANCEL_DEPOT_WARMING('node-name' [, 'subscription-name'])
参数
-
'node-name'
- 要取消其存储库预热的节点的名称。
-
'subscription-name'
- 希望节点停止预热的节点订阅的分片的名称。您可以在 NODE_SUBSCRIPTIONS 系统表的 SHARD_NAME 列中找到节点订阅的分片的名称。
返回值
返回一条消息,表明预热已被取消。
特权
用户必须是 超级用户。
用法注意事项
取消存储库预热会对查询的性能产生负面影响。具有冷存储库的节点可能需要从公共存储中检索其大部分数据,这比访问存储库要慢。
示例
下面演示了如何取消节点 7 上的存储库预热:
=> SELECT CANCEL_DEPOT_WARMING('v_verticadb_node0007');
CANCEL_DEPOT_WARMING
--------------------------
Depot warming cancelled.
(1 row)
另请参阅
4 - CANCEL_DRAIN_SUBCLUSTER
仅限 Eon 模式
取消一个或多个子群集的排空操作。此函数可以取消由 START_DRAIN_SUBCLUSTER 或 SHUTDOWN_WITH_DRAIN 函数的排空部分启动的排空操作。CANCEL_DRAIN_SUBCLUSTER 将指定子群集中的所有节点标记为未排空。先前排空的节点再次接受新的客户端连接以及从负载均衡重定向的连接。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CANCEL_DRAIN_SUBCLUSTER( 'subcluster-name' )
参数
- subcluster-name
- 要取消排空操作的子群集的名称。输入空字符串可取消对所有子群集的排空操作。
特权
超级用户
示例
以下示例演示了如何取消对子群集的排空操作。
首先,您可以查询 DRAINING_STATUS 系统表以查看当前正在排空哪些子群集:
=> SELECT node_name, subcluster_name, is_draining FROM draining_status ORDER BY 1;
node_name | subcluster_name | is_draining
-------------------+--------------------+-------
verticadb_node0001 | default_subcluster | f
verticadb_node0002 | default_subcluster | f
verticadb_node0003 | default_subcluster | f
verticadb_node0004 | analytics | t
verticadb_node0005 | analytics | t
verticadb_node0006 | analytics | t
以下函数调用将取消 analytics
子群集的排空操作:
=> SELECT CANCEL_DRAIN_SUBCLUSTER('analytics');
CANCEL_DRAIN_SUBCLUSTER
--------------------------------------------------------
Targeted subcluster: 'analytics'
Action: CANCEL DRAIN
(1 row)
要确认子群集不再进行排空,您可以再次查询 DRAINING_STATUS 系统表:
=> SELECT node_name, subcluster_name, is_draining FROM draining_status ORDER BY 1;
node_name | subcluster_name | is_draining
-------------------+--------------------+-------
verticadb_node0001 | default_subcluster | f
verticadb_node0002 | default_subcluster | f
verticadb_node0003 | default_subcluster | f
verticadb_node0004 | analytics | f
verticadb_node0005 | analytics | f
verticadb_node0006 | analytics | f
(6 rows)
另请参阅
5 - CLEAN_COMMUNAL_STORAGE
仅限 Eon 模式
将公共存储中的无效数据标记为待删除,通常是由于 Vertica 清理机制失败而泄露的数据。需要调用此函数的事件包括:
-
节点故障
-
从 Enterprise 数据库到 Eon 数据库的迁移中断
-
从备份中恢复对象
提示
一般来说,在完成 Enterprise-to-Eon 迁移并恢复迁移的 Eon 数据库后立即调用 CLEAN_COMMUNAL_STORAGE 是一种很好的做法。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAN_COMMUNAL_STORAGE ( ['actually‑delete'] )
参数
- actually‑delete
- BOOLEAN,指定是否将数据文件添加到删除队列中:
-
true
(默认值):将文件添加到 reaper 队列中并立即返回。排队的文件将通过 reaper 服务自动移除,或者可以通过调用 FLUSH_REAPER_QUEUE 手动移除。 -
false
:报告有关额外文件的信息,但不会将其添加到删除排队中。
-
特权
超级用户
示例
=> SELECT CLEAN_COMMUNAL_STORAGE('true')
CLEAN_COMMUNAL_STORAGE
------------------------------------------------------------------
CLEAN COMMUNAL STORAGE
Task was canceled.
Total leaked files: 9265
Total size: 4236501526
Files have been queued for deletion.
Check communal_cleanup_records for more information.
(1 row)
6 - CLEAR_DATA_DEPOT
仅限 Eon 模式
删除指定的存储库数据。您可以从一个子群集、单个节点或整个数据库群集中清除单个表或所有表的存储库数据。清除存储库数据不会影响公共存储。
注意
对于需要使用该数据,且目前必须从公共存储中获取该数据的任何后续查询,清除存储库数据可能会导致处理时间变长。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAR_DATA_DEPOT( [ '[table‑name]' [, '[target-depots]'] ] )
参数
注意
要清除数据库群集中的所有存储库数据,请在不使用实参的情况下调用此函数。-
table‑name
- 要从目标存储库中删除的表的名称。如果忽略表名称或提供空字符串,则会从目标库中删除所有表的数据。
-
target-depots
- 指定此实参以清除指定存储库中的所有数据,为以下之一:
-
subcluster‑name:清除指定子群集中的存储库数据。
-
node-name:清除指定节点中的存储库数据。同一子群集中其他节点上的存储库数据不受影响。
(可选)此实参限定 table-name 的实参。如果忽略此实参或提供空字符串,Vertica 将清除数据库群集中的所有存储库数据。
-
特权
超级用户
示例
从子群集 subcluster_1
的存储库中清除表 t1
的所有存储库数据:
=> SELECT CLEAR_DATA_DEPOT('t1', 'subcluster_1');
clear_data_depot
------------------
Depot cleared
(1 row)
清除子群集 subcluster_1
中的所有存储库数据:
=> SELECT CLEAR_DATA_DEPOT('', 'subcluster_1');
clear_data_depot
------------------
Depot cleared
(1 row)
清除单个节点的所有存储库数据:
=> select clear_data_depot('','v_vmart_node0001');
clear_data_depot
------------------
Depot cleared
(1 row)
清除数据库群集中表 t1
的所有存储库数据:
=> SELECT CLEAR_DATA_DEPOT('t1');
clear_data_depot
------------------
Depot cleared
(1 row)
清除数据库群集中的所有存储库数据:
=> SELECT CLEAR_DATA_DEPOT();
clear_data_depot
------------------
Depot cleared
(1 row)
7 - CLEAR_DEPOT_PIN_POLICY_PARTITION
仅限 Eon 模式
从指定的表或投影分区中清除存储库固定策略。 对象取消固定后,可以被任何未固定或固定的对象从存储库中逐出。.
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAR_DEPOT_PIN_POLICY_PARTITION( '[[database.]schema.]object‑name', 'min‑range‑value', 'max‑range‑value' [, subcluster ] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
object‑name
- 具有要清除的分区固定策略的表或投影。
-
min‑range‑value max‑range‑value
- 从 table 中指定的分区键范围内清除固定策略,其中 min-range-value 必须 ≤ max‑range‑value。如果策略适用于单个分区,则 min‑range‑value 和 max‑range‑value 必须相等。
-
subcluster
- 从 subcluster 存储库中清除指定的固定策略。如果省略此参数,系统将从所有数据库存储库中清除该策略。
特权
超级用户
另请参阅
8 - CLEAR_DEPOT_PIN_POLICY_PROJECTION
仅限 Eon 模式
从指定的投影中清除存储库固定策略。 对象取消固定后,可以被任何未固定或固定的对象从存储库中逐出。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAR_DEPOT_PIN_POLICY_PROJECTION( '[[database.]schema.]projection' [, 'subcluster' ] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
projection
- 具有要清除的固定策略的投影。
-
subcluster
- 从 subcluster 存储库中清除指定的固定策略。如果省略此参数,系统将从所有数据库存储库中清除该策略。
特权
超级用户
另请参阅
9 - CLEAR_DEPOT_PIN_POLICY_TABLE
仅限 Eon 模式
从指定的表中清除存储库固定策略。 对象取消固定后,可以被任何未固定或固定的对象从存储库中逐出。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAR_DEPOT_PIN_POLICY_TABLE( '[[database.]schema.]table' [, 'subcluster' ] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
表
- 具有要清除的固定策略的表。
-
subcluster
- 从 subcluster 存储库中清除指定的固定策略。如果省略此参数,系统将从所有数据库存储库中清除该策略。
特权
超级用户
另请参阅
10 - CLEAR_FETCH_QUEUE
仅限 Eon 模式
从公共存储中移除所有条目或数据获取请求队列中特定事务的条目。您可以通过查询 DEPOT_FETCH_QUEUE 系统表来查看提取队列。此函数会同步移除所有排队的请求。并会在所有提取都从队列中移除后返回。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAR_FETCH_QUEUE([transaction_id])
参数
- transaction_id
- 将从队列中清除其提取的事务的 ID。如果未指定此值,则从提取队列中移除所有提取。
示例
此示例将清除所有事务的提取队列。
=> SELECT CLEAR_FETCH_QUEUE();
CLEAR_FETCH_QUEUE
--------------------------
Cleared the fetch queue.
(1 row)
此示例将清除特定事务的提取队列。
=> SELECT node_name,transaction_id FROM depot_fetch_queue;
node_name | transaction_id
----------------------+-------------------
v_verticadb_node0001 | 45035996273719510
v_verticadb_node0003 | 45035996273719510
v_verticadb_node0002 | 45035996273719510
v_verticadb_node0001 | 45035996273719777
v_verticadb_node0003 | 45035996273719777
v_verticadb_node0002 | 45035996273719777
(6 rows)
=> SELECT clear_fetch_queue(45035996273719510);
clear_fetch_queue
--------------------------
Cleared the fetch queue.
(1 row)
=> SELECT node_name,transaction_id from depot_fetch_queue;
node_name | transaction_id
----------------------+-------------------
v_verticadb_node0001 | 45035996273719777
v_verticadb_node0003 | 45035996273719777
v_verticadb_node0002 | 45035996273719777
(3 rows)
11 - DEMOTE_SUBCLUSTER_TO_SECONDARY
仅限 Eon 模式
如果以下任一情况为真,Vertica 将不允许对主子群集降级:
-
子群集包含一个 关键节点。
-
子群集是数据库中唯一的主子群集。您必须至少有一个主子群集。
-
启动程序节点是指您尝试降级的子群集的成员。您必须从另一个子群集调用 DEMOTE_SUBCLUSTER_TO_SECONDARY。
重要
此函数调用可能需要很长时间才能完成,因为您要Set Snippet Variable Value in Topic的子群集中的所有节点都将采用全局编录锁定,编写检查点,然后提交。此全局编录锁可能会导致其他数据库任务失败并显示错误。
计划在其他数据库活动较少时调用此函数。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
DEMOTE_SUBCLUSTER_TO_SECONDARY('subcluster-name')
参数
- subcluster‑name
- 要降级为辅助子群集的主子群集的名称。
特权
超级用户
示例
以下示例将子群集 analytics_cluster
降级为辅助子群集:
=> SELECT DISTINCT subcluster_name, is_primary from subclusters;
subcluster_name | is_primary
-------------------+------------
analytics_cluster | t
load_subcluster | t
(2 rows)
=> SELECT DEMOTE_SUBCLUSTER_TO_SECONDARY('analytics_cluster');
DEMOTE_SUBCLUSTER_TO_SECONDARY
--------------------------------
DEMOTE SUBCLUSTER TO SECONDARY
(1 row)
=> SELECT DISTINCT subcluster_name, is_primary from subclusters;
subcluster_name | is_primary
-------------------+------------
analytics_cluster | f
load_subcluster | t
(2 rows)
尝试将包含启动程序节点的子群集降级会导致错误:
=> SELECT node_name FROM sessions WHERE user_name = 'dbadmin'
AND client_type = 'vsql';
node_name
----------------------
v_verticadb_node0004
(1 row)
=> SELECT node_name, is_primary FROM subclusters WHERE subcluster_name = 'analytics';
node_name | is_primary
----------------------+------------
v_verticadb_node0004 | t
v_verticadb_node0005 | t
v_verticadb_node0006 | t
(3 rows)
=> SELECT DEMOTE_SUBCLUSTER_TO_SECONDARY('analytics');
ERROR 9204: Cannot promote or demote subcluster including the initiator node
HINT: Run this command on another subcluster
另请参阅
12 - FINISH_FETCHING_FILES
仅限 Eon 模式
将排队等待从公共存储下载的所有文件提取到存储库。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
FINISH_FETCHING_FILES()
特权
超级用户
示例
获取所有排队下载的文件:
=> SELECT FINISH_FETCHING_FILES();
FINISH_FETCHING_FILES
---------------------------------
Finished fetching all the files
(1 row)
另请参阅
Eon 模式概念13 - FLUSH_REAPER_QUEUE
仅限 Eon 模式
删除数据库中所有标记为待删除的数据。使用此函数可在 reaper 服务删除磁盘文件之前移除所有标记为待删除的数据。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
FLUSH_REAPER_QUEUE( [sync‑catalog] )
参数
- sync‑catalog
- 指定在函数执行之前在所有节点的数据库编录中同步元数据:
-
true
(默认值):同步数据库编录 -
false
:在未同步的情况下运行。
-
特权
超级用户
示例
移除所有标记为待删除的文件:
=> SELECT FLUSH_REAPER_QUEUE();
FLUSH_REAPER_QUEUE
-----------------------------------------------------
Sync'd catalog and deleted all files in the reaper queue.
(1 row)
另请参阅
CLEAN_COMMUNAL_STORAGE14 - MIGRATE_ENTERPRISE_TO_EON
仅限企业模式
将 Enterprise 数据库迁移到 Eon 模式数据库。MIGRATE_ENTERPRISE_TO_EON 在返回之前在前台运行;无论其返回成功或错误,它都会阻止源 Enterprise 数据库中同一会话中的所有操作。如果成功,MIGRATE_ENTERPRISE_TO_EON 将返回并显示迁移数据库中的节点列表。
如果迁移在元函数返回之前被中断,例如,客户端断开连接,或者发生网络中断,则迁移将返回错误。在这种情况下,请再次调用 MIGRATE_ENTERPRISE_TO_EON 以重新开始迁移。有关详细信息,请参阅处理中断迁移。
您可以多次重复迁移到同一个公共存储位置,以捕获上一次迁移期间源数据库中的更改。有关详细信息,请参阅重复迁移。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
MIGRATE_ENTERPRISE_TO_EON ( 'communal‑storage‑location', 'depot‑location' [, is‑dry‑run] )
-
communal‑storage‑location
- 公共存储位置的 URI。有关每个受支持架构的 URI 语法示例,请参阅文件系统和对象存储。
-
depot‑location
- Eon 存储库位置的路径,通常为:
/vertica/depot
重要
管理控制台需要此约定来启用对存储库数据和活动的访问权限。 -
catalog‑location
- /*pushed out to as yet unspecified release (http://jira.verticacorp.com:8080/jira/browse/VER-72507) */
Vertica 编录位置的完整路径。默认设置为:
communal‑storage‑location/metadata/database‑name/nodes/node‑name/Catalog/
-
is‑dry‑run
- Boolean。如果设置为 true,MIGRATE_ENTERPRISE_TO_EON 将仅检查 Enterprise 源数据库是否符合所有迁移先决条件。如果元函数发现任何合规性问题,它会将这些问题写入数据库目录中的迁移错误日志
migrate_enterprise_to_eon_error.log
中。默认值:false
特权
超级用户
示例
将 Enterprise 数据库迁移到 AWS 的 Eon 模式:
=> SELECT MIGRATE_ENTERPRISE_TO_EON ('s3://verticadbbucket', '/vertica/depot');
migrate_enterprise_to_eon
---------------------------------------------------------------------
v_vmart_node0001,v_vmart_node0002,v_vmart_node0003,v_vmart_node0004
(1 row)
另请参阅
将企业数据库迁移到 Eon 模式15 - PROMOTE_SUBCLUSTER_TO_PRIMARY
仅限 Eon 模式
将辅助子群集转换为 主子群集。不能使用此函数来提升包含 启动程序节点的子群集。必须在连接到另一个子群集中的节点时调用此函数。
重要
此函数调用可能需要很长时间才能完成,因为您要Set Snippet Variable Value in Topic的子群集中的所有节点都将采用全局编录锁定,编写检查点,然后提交。此全局编录锁可能会导致其他数据库任务失败并显示错误。
计划在其他数据库活动较少时调用此函数。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
PROMOTE_SUBCLUSTER_TO_PRIMARY('subcluster-name')
参数
- subcluster‑name
- 要提升为主子群集的辅助群集的名称。
特权
超级用户
示例
以下示例将名为 analytics_cluster 的子群集提升为主群集:
=> SELECT DISTINCT subcluster_name, is_primary from subclusters;
subcluster_name | is_primary
-------------------+------------
analytics_cluster | f
load_subcluster | t
(2 rows)
=> SELECT PROMOTE_SUBCLUSTER_TO_PRIMARY('analytics_cluster');
PROMOTE_SUBCLUSTER_TO_PRIMARY
-------------------------------
PROMOTE SUBCLUSTER TO PRIMARY
(1 row)
=> SELECT DISTINCT subcluster_name, is_primary from subclusters;
subcluster_name | is_primary
-------------------+------------
analytics_cluster | t
load_subcluster | t
(2 rows)
另请参阅
16 - REBALANCE_SHARDS
仅限 Eon 模式
在 Eon 模式下重新平衡子群集或整个群集中的分片分配。如果当前会话结束,则操作立即中止。根据数据库中对象的数量,重新平衡分片所需的时间以大致线性的方式增加。
在使用 ALTER NODE 修改群集或将节点添加到子群集后运行 REBALANCE_SHARDS。
注意
在您执行以下操作后,Vertica 会自动重新平衡子群集中的分片:
-
从子群集中移除某个节点。
-
使用 admintools 命令
db_add_subcluster
,结合-s
选项(后跟主机列表)添加一个新的子群集。
重新平衡分片后,您将无法再从重新平衡之前的备份中还原对象。(始终可以执行完整备份。)重新平衡后,执行完整备份,以便将来能够从中还原对象。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
REBALANCE_SHARDS(['subcluster-name'])
参数
- subcluster‑name
- 将重新平衡分片的子群集的名称。如果您未提供此参数,则数据库中的所有子群集均会重新平衡其分片。
特权
超级用户
示例
以下示例显示新添加的 analytics 子群集中的节点尚未有分片订阅。然后它将调用 REBALANCE_SHARDS 来更新节点的订阅:
=> SELECT subcluster_name, n.node_name, shard_name, subscription_state FROM
v_catalog.nodes n LEFT JOIN v_catalog.node_subscriptions ns ON (n.node_name
= ns.node_name) ORDER BY 1,2,3;
subcluster_name | node_name | shard_name | subscription_state
----------------------+----------------------+-------------+--------------------
analytics_subcluster | v_verticadb_node0004 | |
analytics_subcluster | v_verticadb_node0005 | |
analytics_subcluster | v_verticadb_node0006 | |
default_subcluster | v_verticadb_node0001 | replica | ACTIVE
default_subcluster | v_verticadb_node0001 | segment0001 | ACTIVE
default_subcluster | v_verticadb_node0001 | segment0003 | ACTIVE
default_subcluster | v_verticadb_node0002 | replica | ACTIVE
default_subcluster | v_verticadb_node0002 | segment0001 | ACTIVE
default_subcluster | v_verticadb_node0002 | segment0002 | ACTIVE
default_subcluster | v_verticadb_node0003 | replica | ACTIVE
default_subcluster | v_verticadb_node0003 | segment0002 | ACTIVE
default_subcluster | v_verticadb_node0003 | segment0003 | ACTIVE
(12 rows)
=> SELECT REBALANCE_SHARDS('analytics_subcluster');
REBALANCE_SHARDS
-------------------
REBALANCED SHARDS
(1 row)
=> SELECT subcluster_name, n.node_name, shard_name, subscription_state FROM
v_catalog.nodes n LEFT JOIN v_catalog.node_subscriptions ns ON (n.node_name
= ns.node_name) ORDER BY 1,2,3;
subcluster_name | node_name | shard_name | subscription_state
----------------------+----------------------+-------------+--------------------
analytics_subcluster | v_verticadb_node0004 | replica | ACTIVE
analytics_subcluster | v_verticadb_node0004 | segment0001 | ACTIVE
analytics_subcluster | v_verticadb_node0004 | segment0003 | ACTIVE
analytics_subcluster | v_verticadb_node0005 | replica | ACTIVE
analytics_subcluster | v_verticadb_node0005 | segment0001 | ACTIVE
analytics_subcluster | v_verticadb_node0005 | segment0002 | ACTIVE
analytics_subcluster | v_verticadb_node0006 | replica | ACTIVE
analytics_subcluster | v_verticadb_node0006 | segment0002 | ACTIVE
analytics_subcluster | v_verticadb_node0006 | segment0003 | ACTIVE
default_subcluster | v_verticadb_node0001 | replica | ACTIVE
default_subcluster | v_verticadb_node0001 | segment0001 | ACTIVE
default_subcluster | v_verticadb_node0001 | segment0003 | ACTIVE
default_subcluster | v_verticadb_node0002 | replica | ACTIVE
default_subcluster | v_verticadb_node0002 | segment0001 | ACTIVE
default_subcluster | v_verticadb_node0002 | segment0002 | ACTIVE
default_subcluster | v_verticadb_node0003 | replica | ACTIVE
default_subcluster | v_verticadb_node0003 | segment0002 | ACTIVE
default_subcluster | v_verticadb_node0003 | segment0003 | ACTIVE
(18 rows)
另请参阅
17 - RESHARD_DATABASE
仅限 Eon 模式
更改数据库中分片的数量。此函数在运行时需要使用全局编录锁 (GCLX)。运行时取决于编录的大小。
RESHARD_DATABASE 不会立即影响公共存储中的存储容器。重新分片后,新的分片仍然指向现有容器。如果增加数据库中分片的数量,多个分片将指向同一个存储容器。最终,Tuple Mover (TM) 合并任务会将存储容器与新的分片分段边界重新对齐。如果希望 TM 立即重新对齐存储容器,请调用 DO_TM_TASK 来运行“RESHARDMERGEOUT”任务。
此函数不会中断大多数查询。但是,全局编录锁可能会影响数据加载和 DDL 语句。
重要
如果在运行时调用 REBALANCE_SHARDS,则 RESHARD_DATABASE 可能会回退。在某些情况下,回退是由于故障节点或在重新分片过程中失败的节点引起的。语法
RESHARD_DATABASE(shard-count)
参数
- shard-count
- 一个正整数,即重新分片数据库中分片的数量。有关选择合适的 shard-count 的信息,请参阅选择分片数量和初始节点计数。
特权
超级用户
示例
请参阅更改数据库中的分片数。
18 - SET_DEPOT_PIN_POLICY_PARTITION
仅限 Eon 模式
将表或投影的指定分区固定到子群集存储库或所有数据库存储库,以减少存储库逐出的风险。
仅当组内的所有分区都单独固定时,才能固定分区组。如果更改或移除表分区,Vertica 会删除该表的所有分区固定策略。表的固定策略(如有)不受影响。
有关固定策略和使用指南的详细信息,请参阅固定存储库对象。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SET_DEPOT_PIN_POLICY_PARTITION ( '[[database.]schema.]object‑name', 'min‑range‑value', 'max‑range‑value' [, 'subcluster' ] [, 'download' ] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- object-name
- 要固定的表或投影。如果指定一个投影,则该投影必须存储分区键。
注意
在将表或表的一个投影固定到子群集后,将不能再将其任何分区固定到该子群集。相反,您可以将一个或多个表分区固定到子群集,然后再将表或表的一个投影固定到该子群集。 - min‑range‑value
max‑range‑value - 要固定的 object-name 中分区键的最小值和最大值,其中 min-range-value 必须 ≤ max‑range‑value。要指定单个分区,min‑range‑value 和 max‑range‑value 必须相等。
注意
如果同一表上的分区固定策略指定的键范围重叠,则 Vertica 将对分区范围进行排序。例如,如果您创建了两个分区策略,其键范围分别为 1-3 和 2-4,则 Vertica 将创建一个键范围为 1-4 的固定策略。 - subcluster
- 在 subcluster 存储库上设置此固定策略。要在默认子群集上设置此策略,请指定
default_subcluster
。如果省略此参数,系统将在所有数据库存储库上设置该策略。 - download
- 布尔值,如果设置为 true,SET_DEPOT_PIN_POLICY_PARTITION 会立即将指定的分区添加到从公共存储下载的队列中。
默认值:false
特权
超级用户
固定策略的优先级
一般来说,涉及两个分区表的分区管理函数的优先级高于目标表的固定策略,如下所示:
例如,以下语句将分区从表 foo
复制到表 bar
:
=> SELECT COPY_PARTITIONS_TO_TABLE('foo', '1', '5', 'bar');
在这种情况下,将应用以下逻辑:
-
如果两个表具有不同的分区固定策略,则应用目标表
bar
的分区键 1-5 的固定策略。 -
如果表
bar
不存在,Vertica 将基于表foo
进行创建,并复制foo
的分区键 1- 5 的策略。随后,如果从任一表中清除分区固定策略,该固定策略也会从另一个表中清除。
另请参阅
19 - SET_DEPOT_PIN_POLICY_PROJECTION
仅限 Eon 模式
将投影固定到子群集存储库或所有数据库存储库,以减少其面临的存储库逐出风险。有关固定策略和使用指南的详细信息,请参阅固定存储库对象。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SET_DEPOT_PIN_POLICY_PROJECTION ( '[[database.]schema.]projection' [, 'subcluster' ] [, download ] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- projection
- 要固定的投影。
注意
将表固定到某个子群集后,随后不能将表的任何投影固定到该子群集。相反,您可以将表的一个或多个投影固定到某个子群集,然后将表固定到该子群集。 - subcluster
- 在 subcluster 存储库上设置此固定策略。要在默认子群集上设置此策略,请指定
default_subcluster
。如果省略此参数,系统将在所有数据库存储库上设置该策略。 - download
- 布尔值,如果设置为 true,SET_DEPOT_PIN_POLICY_PROJECTION 会立即将指定的投影添加到从公共存储下载的队列中。
默认值:false
特权
超级用户
另请参阅
20 - SET_DEPOT_PIN_POLICY_TABLE
仅限 Eon 模式
将表固定到子群集存储库或所有数据库存储库,以减少其面临的存储库逐出风险。有关固定策略和使用指南的详细信息,请参阅固定存储库对象。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SET_DEPOT_PIN_POLICY_TABLE ( '[[database.]schema.]table' [, 'subcluster' ] [, download ] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 表
- 要固定的表。
注意
将表固定到某个子群集后,随后不能将表的任何分区或投影固定到该子群集。相反,您可以将表的一个或多个分区或投影固定到某个子群集,然后将表固定到该子群集。 - subcluster
- 在 subcluster 存储库上设置此固定策略。要在默认子群集上设置此策略,请指定
default_subcluster
。如果省略此参数,系统将在所有数据库存储库上设置该策略。 - download
- 布尔值,如果设置为 true,SET_DEPOT_PIN_POLICY_TABLE 会立即将指定的表添加到从公共存储下载的队列中。
默认值:false
特权
超级用户
另请参阅
21 - SHUTDOWN_SUBCLUSTER
仅限 Eon 模式
关闭子群集。此函数将同步关闭子群集,并在关闭完成后返回子群集已关闭消息。如果子群集已关闭,此函数将不返回错误。
如果有活动用户会话连接到子群集,则停止子群集不会发出警告。此行为与停止单个节点相同。在停止子群集之前,确认没有用户连接到它。
如果想在关闭子群集之前排空客户端连接,则可以使用 SHUTDOWN_WITH_DRAIN 优雅地关闭子群集。
当心
此函数不测试目标子群集是否为关键子群集(丢失会导致数据库关闭的子群集)。使用此函数关闭关键子群集会导致数据库关闭。在调用此函数之前,请始终查询 CRITICAL_SUBCLUSTERS 系统表,以确认要关闭的子群集不是关键子群集。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SHUTDOWN_SUBCLUSTER('subcluster‑name')
参数
- subcluster‑name
- 要关闭的子群集的名称。
特权
超级用户
示例
以下示例演示了如何关闭子群集 analytics
:
=> SELECT subcluster_name, node_name, node_state FROM nodes order by 1,2;
subcluster_name | node_name | node_state
--------------------+----------------------+------------
analytics | v_verticadb_node0004 | UP
analytics | v_verticadb_node0005 | UP
analytics | v_verticadb_node0006 | UP
default_subcluster | v_verticadb_node0001 | UP
default_subcluster | v_verticadb_node0002 | UP
default_subcluster | v_verticadb_node0003 | UP
(6 rows)
=> SELECT SHUTDOWN_SUBCLUSTER('analytics');
WARNING 4539: Received no response from v_verticadb_node0004 in stop subcluster
WARNING 4539: Received no response from v_verticadb_node0005 in stop subcluster
WARNING 4539: Received no response from v_verticadb_node0006 in stop subcluster
SHUTDOWN_SUBCLUSTER
---------------------
Subcluster shutdown
(1 row)
=> SELECT subcluster_name, node_name, node_state FROM nodes order by 1,2;
subcluster_name | node_name | node_state
--------------------+----------------------+------------
analytics | v_verticadb_node0004 | DOWN
analytics | v_verticadb_node0005 | DOWN
analytics | v_verticadb_node0006 | DOWN
default_subcluster | v_verticadb_node0001 | UP
default_subcluster | v_verticadb_node0002 | UP
default_subcluster | v_verticadb_node0003 | UP
(6 rows)
注意
调用 SHUTDOWN_SUBCLUSTER 后将出现“WARNING 4539”消息,这是因为节点当前正在关闭。出现这些消息很正常。另请参阅
22 - SHUTDOWN_WITH_DRAIN
仅限 Eon 模式
优雅地关闭一个或多个子群集。此函数会排空子群集节点上的客户端连接,然后关闭子群集。这是关闭消息发送到子群集后返回的同步函数。
现有用户会话中的工作继续在正在清空的节点上进行,但节点拒绝新的客户端连接,并被排除在负载均衡操作之外。dbadmin 仍然可以连接到正在清空的节点。
现有连接完成其工作并关闭,或达到用户指定的超时后,将开始排空节点。一旦满足这些条件之一,此函数会立即继续关闭子群集。
有关正常关闭过程的详细信息,请参阅正常关闭。
当心
此函数不测试目标子群集是否为关键子群集(丢失会导致数据库关闭的子群集)。使用此函数关闭关键子群集会导致数据库关闭。在调用此函数之前,请始终查询 CRITICAL_SUBCLUSTERS 系统表,以确认要关闭的子群集不是关键子群集。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SHUTDOWN_WITH_DRAIN( 'subcluster-name', timeout-seconds )
参数
- subcluster-name
- 要关闭的子群集的名称。输入空字符串以关闭数据库中的所有子群集。
- timeout-seconds
- 在强制关闭 subcluster-name 的客户端连接并关闭子群集之前等待的秒数。行为取决于 timeout-seconds 的符号:
- 正整数:此函数会等到运行时达到 timeout-seconds 或客户端连接完成工作并关闭才开始运行。一旦满足这两个条件之一,此函数会立即继续关闭子群集。
- 零:此函数会立即关闭任何打开的客户端连接并关闭子群集。
- 负整数:此函数将子群集标记为排空,并无限期地等待关闭子群集,直到所有活动用户会话断开连接。
特权
超级用户
示例
在以下示例中,此函数将名为 analytics 的子群集标记为排空,然后在现有客户端连接关闭或 300 秒后立即将其关闭:
=> SELECT SHUTDOWN_WITH_DRAIN('analytics', 120);
NOTICE 0: Draining has started on subcluster (analytics)
NOTICE 0: Begin shutdown of subcluster (analytics)
SHUTDOWN_WITH_DRAIN
--------------------------------------------------------------------------------------------------------------------
Set subcluster (analytics) to draining state
Waited for 3 nodes to drain
Shutdown message sent to subcluster (analytics)
(1 row)
您可以查询 DC_DRAINING_EVENTS 表,以查看有关排空和关闭事件的详细信息,例如是否存在任何用户会话被强制关闭。开始关闭后,此子群集有一个活动用户会话,但其会在达到超时之前关闭:
=> SELECT event_type, event_type_name, event_description, event_result, event_result_name FROM dc_draining_events;
event_type | event_type_name | event_description | event_result | event_result_name
------------+------------------------------+---------------------------------------------------------------------+--------------+-------------------
0 | START_DRAIN_SUBCLUSTER | START_DRAIN for SHUTDOWN of subcluster (analytics) | 0 | SUCCESS
2 | START_WAIT_FOR_NODE_DRAIN | Wait timeout is 120 seconds | 4 | INFORMATIONAL
4 | INTERVAL_WAIT_FOR_NODE_DRAIN | 1 sessions remain after 0 seconds | 4 | INFORMATIONAL
4 | INTERVAL_WAIT_FOR_NODE_DRAIN | 1 sessions remain after 30 seconds | 4 | INFORMATIONAL
3 | END_WAIT_FOR_NODE_DRAIN | Wait for drain ended with 0 sessions remaining | 0 | SUCCESS
5 | BEGIN_SHUTDOWN_AFTER_DRAIN | Starting shutdown of subcluster (analytics) following drain | 4 | INFORMATIONAL
(6 rows)
另请参阅
23 - START_DRAIN_SUBCLUSTER
仅限 Eon 模式
排空一个或多个子群集。此函数将指定子群集中的所有节点标记为排空。现有用户会话继续在排空节点上运行,但这些节点拒绝新的客户端连接,且被排除在负载均衡操作之外。但 dbadmin 仍然可以连接到排空节点。
在优雅关闭的过程中,要排空子群集上的连接,可调用 SHUTDOWN_WITH_DRAIN。有关详细信息,请参阅优雅关闭。
要取消对子群集的排空操作,请调用 CANCEL_DRAIN_SUBCLUSTER。如果停止子群集中的所有节点排空操作,则会在重新启动时将这些节点标记为未排空。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
START_DRAIN_SUBCLUSTER( 'subcluster-name' )
参数
- subcluster-name
- 要排空的子群集的名称。输入空字符串将排空数据库中的所有子群集。
特权
超级用户
示例
以下示例演示了如何排空名为 analytics 的子群集:
=> SELECT subcluster_name, node_name, node_state FROM nodes;
subcluster_name | node_name | node_state
-------------------+--------------------+------------
default_subcluster | verticadb_node0001 | UP
default_subcluster | verticadb_node0002 | UP
default_subcluster | verticadb_node0003 | UP
analytics | verticadb_node0004 | UP
analytics | verticadb_node0005 | UP
analytics | verticadb_node0006 | UP
(6 rows)
=> SELECT START_DRAIN_SUBCLUSTER('analytics');
START_DRAIN_SUBCLUSTER
-------------------------------------------------------
Targeted subcluster: 'analytics'
Action: START DRAIN
(1 row)
您可以通过查询 DRAINING_STATUS 系统表来确认子群集正在排空:
=> SELECT node_name, subcluster_name, is_draining FROM draining_status ORDER BY 1;
node_name | subcluster_name | is_draining
-------------------+--------------------+-------
verticadb_node0001 | default_subcluster | f
verticadb_node0002 | default_subcluster | f
verticadb_node0003 | default_subcluster | f
verticadb_node0004 | analytics | t
verticadb_node0005 | analytics | t
verticadb_node0006 | analytics | t
另请参阅
24 - START_REAPING_FILES
仅限 Eon 模式
一个异步函数,在后台启动磁盘文件删除。默认情况下,此元函数会在开始删除之前同步编录。磁盘文件删除由 FLUSH_REAPER_QUEUE 在前台处理。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
START_REAPING_FILES( [sync‑catalog] )
参数
- sync‑catalog
- 指定在函数执行之前在所有节点的数据库编录中同步元数据:
-
true
(默认值):同步数据库编录 -
false
:在未同步的情况下运行。
-
特权
超级用户
示例
启动 reaper 服务:
=> SELECT START_REAPING_FILES();
启动 reaper 服务并跳过初始编录同步:
=> SELECT START_REAPING_FILES(false);
25 - SYNC_CATALOG
仅限 Eon 模式
将编录同步到公共存储,以便在编录快要崩溃时恢复当前编录版本。Vertica 将所有待处理的检查点和事务日志同步到公共存储。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SYNC_CATALOG( [ 'node‑name' ] )
参数
- node‑name
- 要同步的节点。如果忽略此实参,Vertica 会同步所有节点上的编录。
特权
超级用户
示例
同步所有节点上的编录:
=> SELECT SYNC_CATALOG();
同步一个节点上的编录:
=> SELECT SYNC_CATALOG( 'node001' );