1 - ALTER_LOCATION_LABEL

将标签添加到存储位置,或者更改或移除现有标签。如果任何存储策略未指定位置标签,则可进行更改。

这是元函数。您必须在顶级 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 访问权限,则可清除内核文件系统缓存,如下所示:

  1. 确保缓存中的所有数据均已写入磁盘:

    # sync
    
  2. 写入 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:立即将所有存储容器移动到新位置。

超级用户

示例

以下语句可清除表 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 操作之一:
  • mergeout:合并 ROS 容器并清除删除的记录。有关详细信息,请参阅合并

  • 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)
    

    吞吐量为顺序读写的平均吞吐量(以每秒兆字节表示)。

    延迟适用于随机读取(仅在查找中,单位为每秒查找次数)。

示例

下面的例子测量 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_LOCATIONSLOCATION_PATH 列所指定的存储位置的路径。此存储位置必须标记为已停用。

如果忽略此参数,MOVE_RETIRED_LOCATION_DATA 将从所有停用的存储位置移出数据。

节点
要在其上移动停用存储位置的数据的节点。如果 node 上未定义 location-path,则此函数返回错误。

如果忽略此参数,MOVE_RETIRED_LOCATION_DATA 将从所有节点的 location-path 移出数据。

超级用户

示例

  1. 查询系统表 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)
    
  2. 查询系统表 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)
    
  3. 调用 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)
    
  4. 重复前述查询,验证消息表的存储位置:

    
    => 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

设置存储位置的磁盘性能。

这是元函数。您必须在顶级 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 会将此对象的默认存储设置为新的标记位置。对象的现有数据将移动到新位置。

这是元函数。您必须在顶级 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:立即将所有存储容器移动到新位置。

特权

以下几项之一:

  • 超级用户

  • 对象所有者及对其存储位置的访问权限。

示例

请参阅 清除存储策略

另请参阅