此部分包含 Vertica 专用的存储管理函数。
存储函数
- 1: ALTER_LOCATION_LABEL
- 2: ALTER_LOCATION_USE
- 3: CLEAR_CACHES
- 4: CLEAR_OBJECT_STORAGE_POLICY
- 5: DO_TM_TASK
- 6: DROP_LOCATION
- 7: ENFORCE_OBJECT_STORAGE_POLICY
- 8: MEASURE_LOCATION_PERFORMANCE
- 9: MOVE_RETIRED_LOCATION_DATA
- 10: RESTORE_LOCATION
- 11: RETIRE_LOCATION
- 12: SET_LOCATION_PERFORMANCE
- 13: SET_OBJECT_STORAGE_POLICY
1 - ALTER_LOCATION_LABEL
将标签添加到存储位置,或者更改或移除现有标签。如果任何存储策略未指定位置标签,则可进行更改。
当心
如果为已包含数据的现有存储位置添加标签,然后在一个或多个存储策略中包含带标签的位置,则现有数据可能会被移动。如果 Tuple Mover 确定存储在带标签的位置中的数据不符合存储策略,则它会将数据移动到其他位置。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
ALTER_LOCATION_LABEL ( 'path' , '[node]' , '[location‑label]' )
参数
- 路径
- 存储位置路径。
- 节点
- 应用标签更改的节点。如果提供空字符串,Vertica 会将更改应用于所有群集节点。
- location‑label
- 要分配给指定存储位置的标签。如果提供空字符串,Vertica 会移除该存储位置的标签。
超级用户
限制
只有当这两个条件都为真时,您才能移除位置标签:
-
未在数据库对象的存储策略中指定标签。
-
标记的位置不是其关联对象的最后一个可用存储。
示例
以下 ALTER_LOCATION_LABEL
语句将标签 SSD
应用于存储位置 /home/dbadmin/SSD/tables
的所有群集节点:
=> SELECT ALTER_LOCATION_LABEL('/home/dbadmin/SSD/tables','', 'SSD');
ALTER_LOCATION_LABEL
---------------------------------------
/home/dbadmin/SSD/tables label changed.
(1 row)
另请参阅
2 - ALTER_LOCATION_USE
更改存储位置保存的数据类型。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
ALTER_LOCATION_USE ( 'path' , '[node]' , 'usage' )
参数
- 路径
- 挂载存储位置的位置。
- 节点
- 要更改存储位置的 Vertica 节点。要在单个事务中更改所有群集节点的位置,请使用空字符串 (
''
)。如果 usage 为 SHARED TEMP 或 SHARED USER,则必须在所有节点上进行更改。 - usage
- 以下几项之一:
-
DATA
:该存储位置仅存储数据文件。 -
TEMP
:该位置仅存储加载或查询期间创建的临时文件。 -
DATA,TEMP
:该位置可同时存储两种类型的文件。
-
超级用户
您不能更改 USER 使用类型的存储位置(如果存储位置是以这种方式创建的),也不能将存储位置更改为 USER 类型(如果存储位置不是以这种方式创建的)。可以更改 USER 存储位置以指定 DATA(不支持存储 TEMP 文件)。但是,这样做不会影响 USER 存储位置的主要目标可由具有已分配权限的非 dbadmin 用户访问。
您不能将存储位置从 SHARED TEMP 或 SHARED USER 更改为 SHARED DATA,反之亦然。
有关每个节点使用的磁盘存储信息,请查询
DISK_STORAGE
系统表。
示例
以下示例将跨所有群集节点将存储位置更改为仅存储数据:
=> SELECT ALTER_LOCATION_USE ('/thirdSL/' , '' , 'DATA');
另请参阅
3 - CLEAR_CACHES
清除 Vertica 内部缓存文件。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAR_CACHES ( )
超级用户
注意
如果要为查询运行基准测试,除清除内部 Vertica 缓存文件之外,还要清除 Linux 文件系统缓存。内核使用未分配的内存作为缓存以保持磁盘块纯净。如果运行的是 Linux 2.6.16 或更高版本且具有 root 访问权限,则可清除内核文件系统缓存,如下所示:
-
确保缓存中的所有数据均已写入磁盘:
# sync
-
写入
drop_caches
文件会导致内核从内存中删除干净缓存、条目和 iNode,使该内存进入空闲状态,如下所示:-
要清除页面缓存,请执行以下操作:
# echo 1 > /proc/sys/vm/drop_caches
-
要清除条目和 iNode,请执行以下操作:
# echo 2 > /proc/sys/vm/drop_caches
-
要清除页面缓存、条目和 iNode,请执行以下操作:
# echo 3 > /proc/sys/vm/drop_caches
-
示例
以下示例清除 Vertica 内部缓存文件:
=> SELECT CLEAR_CACHES();
CLEAR_CACHES
--------------
Cleared
(1 row)
4 - CLEAR_OBJECT_STORAGE_POLICY
从指定的数据库、架构或表中移除用户定义的存储策略。先前策略标记位置的存储容器将移动到默认位置。默认情况下,此移动发生在所有挂起的合并任务返回之后。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CLEAR_OBJECT_STORAGE_POLICY ( 'object‑name' [,'key‑min', 'key‑max'] [, 'enforce‑storage‑move' ] )
参数
- object‑name
- 要清除的对象,为以下之一:
-
database:清除存储策略的 database。
-
[database.]schema
: 清除存储策略的 schema。 -
[[database.]schema.]table
: 清除存储策略的 table。如果 table 位于除public
以外的任何架构中,则必须提供架构名称。
在所有情况下,database 必须为当前数据库的名称。
-
- key‑min
key‑max - 仅当 object‑name 为表时有效,指定存储在标记位置的表分区键值的范围。
- enforce‑storage‑move
- 指定 Tuple Mover 将指定对象的所有现有存储容器移动到其默认存储位置的时间:
-
false
(默认值):仅在所有待定合并任务返回后移动存储容器。 -
true
:立即将所有存储容器移动到新位置。
提示
您也可以通过调用 Vertica 元函数ENFORCE_OBJECT_STORAGE_POLICY
立即强制执行所有存储策略。 -
超级用户
示例
以下语句可清除表 store.store_orders_fact
的存储策略。true
实参指定立即实施移动策略:
=> SELECT CLEAR_OBJECT_STORAGE_POLICY ('store.store_orders_fact', 'true');
CLEAR_OBJECT_STORAGE_POLICY
-----------------------------------------------------------------------------
Object storage policy cleared.
Task: moving storages
(Table: store.store_orders_fact) (Projection: store.store_orders_fact_b0)
(Table: store.store_orders_fact) (Projection: store.store_orders_fact_b1)
(1 row)
另请参阅
5 - DO_TM_TASK
运行 Tuple Mover (TM) 操作并提交当前事务。您可以将此操作限定于特定表或投影。开始使用此函数时,TM 会使用 GENERAL 资源池而不是 TM 资源池。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
DO_TM_TASK('task'[, '[[database.]schema.]{ table | projection}]' )
参数
-
task
- 指定以下 Tuple Mover 操作之一:
-
reshardmergeout
:重新调整存储容器,使其符合通过 RESHARD_DATABASE 调用创建的分片定义。指定表或投影以及分区值范围,限制reshardmergeout
操作的范围。 -
analyze_row_count
:收集一组最少的统计信息并聚合指定投影的行计数,然后将其保存在数据库编录中。收集指定投影中的行数。如果指定一个表名,DO_TM_TASK 会返回该表所有投影的行计数。有关详细信息,请参阅分析行计数。 -
update_storage_catalog
(仅推荐用于 Eon 模式):使用捆绑表数据的元数据更新编录。有关详细信息,请参阅将捆绑包元数据写入编录。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
table | projection
- 将 task 应用到指定表或投影。如果指定了投影,但未查找到该投影,则 DO_TM_TASK 会查找具有该名称的表,如果能够找到,则会将任务应用至该表及与该表相关联的所有投影。
如果未指定表或投影,则会将该任务应用于所有数据库表及其投影。
特权
-
架构:USAGE
-
表:INSERT、UPDATE 或 DELETE 之一
示例
以下示例对表中的所有投影执行合并:
=> SELECT DO_TM_TASK('mergeout', 't1');
您可以对表的一系列分区执行重新分片合并任务:
=> SELECT DO_TM_TASK('reshardmergeout', 'store_orders', '2001', '2005');
6 - DROP_LOCATION
永久移除已停用的存储位置。此操作无法撤消。必须先使用 RETIRE_LOCATION 停用存储位置,然后再将其删除;不能删除正在使用的存储位置。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
DROP_LOCATION ( 'path', 'node' )
参数
- 路径
- 要删除的存储位置所挂载的位置。
- 节点
- 要在其上删除位置的 Vertica 节点。要在所有节点上执行此操作,请使用空字符串 (
''
)。如果存储位置为 SHARED,则必须在所有节点上执行此操作。
超级用户
带有临时文件和数据文件的存储位置
如果使用某存储位置来存储数据,之后将其更改为仅存储临时文件,则该位置仍会包含数据文件。Vertica 不允许删除含数据文件的存储位置。您可以使用 MOVE_RETIRED_LOCATION_DATA 函数手动合并存储位置中的数据文件,或者您也可以删除分区。删除数据文件操作无效。
示例
下列示例展示如何删除 v_vmart_node0003
上之前停用的存储位置:
=> SELECT DROP_LOCATION('/data', 'v_vmart_node0003');
另请参阅
7 - ENFORCE_OBJECT_STORAGE_POLICY
仅限企业模式
立即应用指定对象的存储策略。默认情况下,Tuple Mover 在所有挂起的合并操作完成后强制执行对象存储策略。调用此函数相当于在使用 RETIRE_LOCATION 时设置 enforce 实参。此函数通常用作删除存储位置前的最后一步。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
ENFORCE_OBJECT_STORAGE_POLICY ( 'object‑name' [,'key‑min', 'key‑max'] )
参数
- object‑name
- 要应用其存储策略的数据库对象,为以下之一:
-
database:应用 database 存储策略。
-
[database.]schema
: 应用 schema 存储策略。 -
[[database.]schema.]table
: 应用 table存储策略。如果 table 位于除public
以外的任何架构中,则必须提供架构名称。
在所有情况下,database 必须为当前数据库的名称。
-
- key‑min, key‑max
- 仅当 object‑name 为表时有效,指定要执行移动的表分区键值的范围。
特权
以下几项之一:
-
超级用户
-
对象所有者及对其存储位置的访问权限。
示例
将存储策略更新应用于 test
表:
=> SELECT ENFORCE_OBJECT_STORAGE_POLICY ('test');
另请参阅
8 - MEASURE_LOCATION_PERFORMANCE
测量存储位置的磁盘性能。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
MEASURE_LOCATION_PERFORMANCE ( 'path', 'node' )
参数
- 路径
- 指定测量的存储位置。
- 节点
- 测量位置可用的 Vertica 节点。要获取群集上所有节点名称的列表,请查询系统表 DISK_STORAGE。
超级用户
注意
-
如果您试图基于预测或测量访问模式,创建将投影、列和分区存储在不同磁盘的磁盘分层结构,您需要对每一个存放数据的存储位置的性能进行测量。您无需测量临时数据存储位置的性能,因为临时文件基于可用空间进行存储。
-
测量存储位置性能的方法仅适用于已配置的群集。如果您想在配置群集以前测量磁盘,请参阅 测量存储性能。
-
存储位置性能等同于从磁盘读取写入 1MB 数据所耗费的时长。这个时间等同于:
IO‑time = (time‑to‑read‑write‑1MB + time‑to‑seek) = (1/throughput + 1/latency)
吞吐量为顺序读写的平均吞吐量(以每秒兆字节表示)。
延迟适用于随机读取(仅在查找中,单位为每秒查找次数)。
注意
较快的存储位置的 I/O 时间要比较慢的存储位置的 I/O 时间短。
示例
下面的例子测量 v_vmartdb_node0004 上的一个存储位置的性能:
=> SELECT MEASURE_LOCATION_PERFORMANCE('/secondVerticaStorageLocation/' , 'v_vmartdb_node0004');
WARNING: measure_location_performance can take a long time. Please check logs for progress
measure_location_performance
--------------------------------------------------
Throughput : 122 MB/sec. Latency : 140 seeks/sec
另请参阅
9 - MOVE_RETIRED_LOCATION_DATA
从数据库中指定的停用存储位置或从全部停用存储位置移出全部数据。 MOVE_RETIRED_LOCATION_DATA
根据存储数据对象的存储策略,将数据移动至非停用存储位置。此函数仅在完成所有受影响的存储位置数据的迁移后才返回。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
MOVE_RETIRED_LOCATION_DATA( ['location‑path'] [, 'node'] )
参数
- location‑path
- 系统表
STORAGE_LOCATIONS
的LOCATION_PATH
列所指定的存储位置的路径。此存储位置必须标记为已停用。如果忽略此参数,
MOVE_RETIRED_LOCATION_DATA
将从所有停用的存储位置移出数据。 - 节点
- 要在其上移动停用存储位置的数据的节点。如果 node 上未定义 location-path,则此函数返回错误。
如果忽略此参数,
MOVE_RETIRED_LOCATION_DATA
将从所有节点的 location-path 移出数据。
超级用户
示例
-
查询系统表
STORAGE_LOCATIONS
,显示停用的存储位置:=> SELECT node_name, location_path, location_label, is_retired FROM STORAGE_LOCATIONS WHERE is_retired = 't'; node_name | location_path | location_label | is_retired ------------------+----------------------+----------------+------------ v_vmart_node0001 | /home/dbadmin/SSDLoc | ssd | t v_vmart_node0002 | /home/dbadmin/SSDLoc | ssd | t v_vmart_node0003 | /home/dbadmin/SSDLoc | ssd | t (3 rows)
-
查询系统表
STORAGE_LOCATIONS
获取消息表的位置,消息表目前存储在停用存储位置ssd
:=> SELECT node_name, total_row_count, location_label FROM STORAGE_CONTAINERS WHERE projection_name ILIKE 'messages%'; node_name | total_row_count | location_label ------------------+-----------------+---------------- v_vmart_node0001 | 333514 | ssd v_vmart_node0001 | 333255 | ssd v_vmart_node0002 | 333255 | ssd v_vmart_node0002 | 333231 | ssd v_vmart_node0003 | 333231 | ssd v_vmart_node0003 | 333514 | ssd (6 rows)
-
调用
MOVE_RETIRED_LOCATION_DATA
,将数据移出ssd
存储位置。=> SELECT MOVE_RETIRED_LOCATION_DATA('/home/dbadmin/SSDLoc'); MOVE_RETIRED_LOCATION_DATA ----------------------------------------------- Move data off retired storage locations done (1 row)
-
重复前述查询,验证消息表的存储位置:
=> SELECT node_name, total_row_count, storage_type, location_label FROM storage_containers WHERE projection_name ILIKE 'messages%'; node_name | total_row_count | location_label ------------------+-----------------+---------------- v_vmart_node0001 | 333255 | base v_vmart_node0001 | 333514 | base v_vmart_node0003 | 333514 | base v_vmart_node0003 | 333231 | base v_vmart_node0002 | 333231 | base v_vmart_node0002 | 333255 | base (6 rows)
另请参阅
10 - RESTORE_LOCATION
恢复之前使用 RETIRE_LOCATION 停用的存储位置。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
RESTORE_LOCATION ( 'path', 'node' )
参数
- 路径
- 挂载停用的存储位置的位置。
- 节点
- 要在其上还原位置的 Vertica 节点。要在所有节点上执行此操作,请使用空字符串 (
''
)。如果存储位置为 SHARED,则必须在所有节点上执行此操作。如果删除任何位置,该操作将会失败。
超级用户
还原之前停用的位置的影响
在还原存储位置之后,Vertica 会对所有群集存储位置重新排名。它将使用新恢复的位置来处理根据其排名确定的查询。
有关每个节点使用的磁盘存储信息,请查询
DISK_STORAGE
系统表。
示例
在 node4
上还原停用的存储位置:
=> SELECT RESTORE_LOCATION ('/thirdSL/' , 'v_vmartdb_node0004');
另请参阅
11 - RETIRE_LOCATION
停用指定的存储位置。要获取所有现有存储位置的列表,请查询 STORAGE_LOCATIONS 系统表。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
RETIRE_LOCATION ( 'path', 'node' [, enforce ] )
参数
- 路径
- 要停用的存储位置所挂载的位置。
- 节点
- 要在其上停用位置的 Vertica 节点。要在所有节点上执行此操作,请使用空字符串 (
''
)。如果存储位置为 SHARED,则必须在所有节点上执行此操作。 - enforce
- 如果为
true
,位置标签将设为空字符串,并且将数据移到其他位置。然后可以删除该位置,而不会出现错误或警告。使用此实参加快删除位置。
超级用户
停用存储位置的影响
RETIRE_LOCATION 检查确认该位置不是唯一的数据和临时文件存储。每个节点上必须至少存在一个用于存储数据和临时文件的位置。但可以将这两种文件存储在同一位置或单独的位置。
如果某个位置是最后一个可用于存储其关联对象的位置,则只有将 enforce 设置为 true
才能将其停用。
在停用存储位置时:
-
停用的位置不会存储任何新数据,除非首先使用 RESTORE_LOCATION 对其进行还原。
-
默认情况下,如果当前停用的存储位置包含存储的数据,该数据将不会移动。因此不能删除该存储位置。相反,Vertica 将通过一次或多次合并来移除存储的数据。要在停用位置后立即将其删除,请将 enforce 设置为 true。
-
如果当前停用的存储位置仅用于临时文件,或者使用了 enforce,则可以删除该位置。请参阅 删除存储位置 和 DROP_LOCATION。
有关每个节点使用的磁盘存储信息,请查询
DISK_STORAGE
系统表。
示例
以下示例显示了停用存储位置的两种方法:
您可以停用存储位置,未来将自动移出其数据:
=> SELECT RETIRE_LOCATION ('/data' , 'v_vmartdb_node0004');
您可以指定存储位置中要立即移动的数据,这样无需等待即可删除该位置:
=> SELECT RETIRE_LOCATION ('/data' , 'v_vmartdb_node0004', true);
另请参阅
12 - SET_LOCATION_PERFORMANCE
设置存储位置的磁盘性能。
注意
调用此函数之前,先调用 MEASURE_LOCATION_PERFORMANCE 获取位置的吞吐量和平均延迟。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SET_LOCATION_PERFORMANCE ( 'path', 'node' , 'throughput', 'average‑latency')
参数
- 路径
- 指定要设置的存储位置的装载位置。
- 节点
- 指定存在要设置的位置的 Vertica 节点。
- throughput
- 指定位置的吞吐量,设置为值 ≥1。
- average‑latency
- 指定位置的平均延迟,设置为值 ≥1。
超级用户
示例
以下示例将 node2 上的存储位置性能设置为每秒吞吐 122 MB 和每秒延迟 140 次寻道。
=> SELECT SET_LOCATION_PERFORMANCE('/secondVerticaStorageLocation/','node2','122','140');
另请参阅
13 - SET_OBJECT_STORAGE_POLICY
通过为数据库对象分配一个标记存储位置来创建或更改其存储策略。Tuple Mover 使用此位置存储此对象的新数据和现有数据。如果对象已具有活动存储策略,调用 SET_OBJECT_STORAGE_POLICY
会将此对象的默认存储设置为新的标记位置。对象的现有数据将移动到新位置。
注意
您无法在 USER 类型的存储位置上创建存储策略。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SET_OBJECT_STORAGE_POLICY (
'[[database.]schema.]object‑name', 'location‑label'
[,'key‑min', 'key‑max'] [, 'enforce‑storage‑move' ] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- object‑name
- 识别分配到标记存储位置的数据库对象。object‑name 可以解析为数据库、架构或表。
- location‑label
- object-name 的存储位置的标签。
- key‑min
key‑max - 仅当 object‑name 为表时有效,指定存储在标记位置的表分区键值的范围。
- enforce‑storage‑move
- 指定 Tuple Mover 将 object‑name 的所有现有存储容器移动到标记存储位置的时间:
-
false
(默认值):仅在所有待定合并任务返回后移动存储容器。 -
true
:立即将所有存储容器移动到新位置。
提示
您也可以通过调用 Vertica 元函数ENFORCE_OBJECT_STORAGE_POLICY
立即强制执行所有存储策略 -
特权
以下几项之一:
-
超级用户
-
对象所有者及对其存储位置的访问权限。
示例
请参阅 清除存储策略