这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

升级后

完成群集上 Vertica 服务器软件包的升级后,仍有许多任务。

必需任务

可选任务

1 - 使用预聚合数据重新构建分区投影

如果您在早期版本(10.0.x 之前的版本)中已使用预聚合数据创建投影(例如,LAP 和 TopK 投影),并且已使用 GROUP BY 子句对锚表进行了分区,则它们的 ROS 容器很容易被各种 DML 和 ILM 操作损坏。在这种情况下,必须重新构建投影:

  1. 在数据库上运行元函数 REFRESH。如果 REFRESH 检测到投影存在问题,将返回故障消息。例如:

    => SELECT REFRESH();
                                                   REFRESH
    -----------------------------------------------------------------------------------------------------
    Refresh completed with the following outcomes:
    Projection Name: [Anchor Table] [Status] [ Refresh Method] [Error Count]
    "public"."store_sales_udt_sum": [store_sales] [failed: Drop and recreate projection] [] [1]
    "public"."product_sales_largest": [store_sales] [failed: Drop and recreate projection] [] [1]
    "public"."store_sales_recent": [store_sales] [failed: Drop and recreate projection] [] [1]
    
    (1 row)
    

    Vertica 还会将消息记录到 vertica.log

    2020-07-07 11:28:41.618 Init Session:ox7fabbbfff700-aoo000000oosbs [Txnl <INFO> Be in Txn: aoooooooooo5b5 'Refresh: Evaluating which projection to refresh'
    2020-07-07 11:28:41.640 Init Session:ex7fabbbfff7oe-aooooeeeeoosbs [Refresh] <INFO> Storage issues detected, unable to refresh projection 'store_sales_recent'. Drop and recreate this projection, then refresh.
    2020-07-07 11:28:41.641 Init Session:Ox7fabbbfff700-aooooeooooosbs [Refresh] <INFO> Storage issues detected, unable to refresh projection 'product_sales_largest'. Drop and recreate this projection, then refresh.
    2020-07-07 11:28:41.641 Init Session:Ox7fabbbfff700-aeoeeeaeeeosbs [Refresh] <INFO> Storage issues detected, unable to refresh projection 'store_sales_udt_sum'. Drop and recreate this projection, then refresh.
    
  2. 使用 EXPORT_OBJECTSEXPORT_TABLES 导出这些投影的 DDL。

  3. 丢弃这些投影,然后按照导出的 DDL 中的定义重新创建它们。

  4. 运行 REFRESH。Vertica 将使用新的存储容器重新构建这些投影。

2 - 验证编录内存消耗

Vertica 9.2 及更高版本显著降低了数据库编录消耗的内存量。升级后,检查每个节点上的编录内存消耗情况,以验证升级后重构的编录是否正确。如果给定编录的内存消耗与早期数据库中的内存消耗一样大或更大,请重新启动主机节点。

已知问题

某些操作可能会显著增加编录内存消耗。例如:

  • 在 9.1.1 数据库上创建了备份,并将对象从备份还原到 9.2 或更高版本的新数据库。

  • 已从 9.1.1 数据库复制对象到版本 9.2 或更高版本的数据库。

要重构数据库编录并减少其内存占用,请重新启动数据库。

3 - 重新安装软件包

在大多数情况下,当您在运行升级脚本后首次重新启动数据库时,Vertica 会自动重新安装所有默认软件包。但是,一个或多个软件包有时可能会无法正确重新安装。

要验证 Vertica 是否已成功重新安装所有软件包:

  1. 在升级后重新安装数据库。

  2. 输入正确的密码。

如果任何软件包未能重新安装,Vertica 会发出一条消息,指明未安装的软件包。在这种情况下,请使用选项 --force-reinstall 运行 admintools 命令 install_package

$ admintools -t install_package -d db-name -p password -P pkg-spec --force-reinstall

选项

示例

强制重新安装默认软件包:


$ admintools -t install_package -d VMart -p 'password' -P default --force-reinstall

强制重新安装一个软件包,flextable

$ admintools -t install_package -d VMart -p 'password' -P flextable --force-reinstall

4 - 将捆绑包元数据写入编录

Vertica 在内部将物理表数据与捆绑包内容的元数据一起存储在捆绑包中。查询优化器使用捆绑包元数据来查找和提取给定查询所需的数据。

Vertica 将捆绑包元数据存储在数据库编录中。这在 Eon 模式中特别有用:优化器可以在本地编录中找到此元数据,而不是从远程 (S3) 存储中提取它。这最大限度地减少了 S3 读取,并促进了更快的查询计划和整体执行。

Vertica 在以下两种情况下将捆绑包元数据写入编录:

  • 更改表内容的任何 DML 操作,例如 INSERTUPDATECOPY。Vertica 将捆绑包元数据写入新的或已更改的表数据的编录中。DML 操作对现有表数据的捆绑包元数据没有影响。

  • 对现有数据,作为 Vertica 元函数 DO_TM_TASK 的实参调用函数 UPDATE_STORAGE_CATALOG。您可以将编录更新操作的范围缩小到特定的投影或表。如果未指定范围,则该操作将应用于整个数据库。

例如,以下 DO_TM_TASK 调用将捆绑包元数据写入表 store.store_sales_fact 中的所有投影上:

=> SELECT DO_TM_TASK ('update_storage_catalog', 'store.store_sales_fact');
                                  do_tm_task
-------------------------------------------------------------------------------
 Task: update_storage_catalog
(Table: store.store_sales_fact) (Projection: store.store_sales_fact_b0)
(Table: store.store_sales_fact) (Projection: store.store_sales_fact_b1)
(1 row)

验证捆绑包元数据

您可以查询系统表 STORAGE_BUNDLE_INFO_STATISTICS 以确定哪些投影在数据库编录中具有无效捆绑包元数据。例如,以下查询的结果显示,数据库编录中的投影 inventory_fact_b0inventory_fact_b1 元数据无效:

=> SELECT node_name, projection_name, total_ros_count, ros_without_bundle_info_count
    FROM v_monitor.storage_bundle_info_statistics where ros_without_bundle_info_count > 0
    ORDER BY projection_name, node_name;
    node_name     |  projection_name  | total_ros_count | ros_without_bundle_info_count
------------------+-------------------+-----------------+-------------------------------
 v_vmart_node0001 | inventory_fact_b0 |               1 |                             1
 v_vmart_node0002 | inventory_fact_b0 |               1 |                             1
 v_vmart_node0003 | inventory_fact_b0 |               1 |                             1
 v_vmart_node0001 | inventory_fact_b1 |               1 |                             1
 v_vmart_node0002 | inventory_fact_b1 |               1 |                             1
 v_vmart_node0003 | inventory_fact_b1 |               1 |                             1
(6 rows)

最佳实践

仅建议 Eon 用户使用 UPDATE_STORAGE_CATALOG 更新数据库编录。企业用户不太可能从该更新中看到明显的性能改进。

调用 UPDATE_STORAGE_CATALOG 可能会产生相当大的开销,因为更新过程通常需要大量代价高昂的 S3 读取。Vertica 建议不要对整个数据库运行此操作,而是考虑采用增量方法:

  • 对单个大型事实表调用 UPDATE_STORAGE_CATALOG。您可以使用性能度量来估计更新其他文件需要多少时间。

  • 确定哪些表会受到频繁查询并相应地优先安排编录更新。

5 - 升级流式数据传输调度程序实用程序

如果您已将 Vertica 与流式数据传输应用程序(例如 Apache Kafka)集成在一起,则必须在更新 Vertica 后更新流式数据传输调度程序实用程序。

在命令提示符下输入以下命令:

/opt/vertica/packages/kafka/bin/vkconfig scheduler --upgrade --upgrade-to-schema schema_name

多次运行升级任务没有效果。

有关调度程序实用程序的详细信息,请参考调度程序工具选项