本文翻译整理自:优化rebalancing

vertica rebalance的介绍内容分为两部分,其中对于rebalance的基础介绍,可参考之前的博文《vertica集群增加节点(扩容)》,该博文中的内容主要参考rebalance期间做了哪些工作。

开始rebalance过程

rebalance过程需要与正在进行的查询共享计算机资源,并且需要在短时间内独占访问资源或锁。为避免可能发生的并发问题,请在加载任务少的时候安排rebalance。

加载期间可能发生的并发问题是:

  • 如果rebalance拥有COPY操作所需的锁,则COPY操作将超时。
  • 如果COPY拥有锁,则rebalance会暂停直到COPY完成。

您可以使用Vertica文档中描述的三种方式中的任何一种来开始rebalance:

  • 使用admintools工具重分布数据
  • 使用管理控制台重分布数据
  • 使用SQL函数重分布数据

监控rebalance

监视rebalance过程,以确保其顺利进行。以下各节介绍了用于监视重新平衡过程的技术。

监视表正在运行的rebalance

要监视Vertica重分布哪些表,请运行:

SELECT * FROM rebalance_table_status;

如果任何DML或DDL操作干扰了某些表的重新平衡,您会看到以下错误消息:

ERROR 3007: DDL statement interfered with this statement
监控Vertica系统表

rebalace期间,请检查以下系统表:

  • REBALANCE_TABLE_STATUS-对于每个数据库表,包含:

    • 已分离的数据量
    • 仍需要分离的数据量
  • REBALANCE_PROJECTION_STATUS-对于每个投影,包含:

    • 已分离的数据量
    • 仍需要分离的数据量

监视群集rebalance的查询

本节提供了示例查询,可帮助您监视群集上的rebalace操作。

监视正在运行的rebalance操作

以下查询提供有关当前正在运行的rebalance操作的信息:

  • 正在运行rebalance的节点
  • rebalance操作的会话ID
  • rebalance开始的时间。这可以使您了解rebalance需要多长时间。
  • 当前正在执行rebalance任务
=> SELECT node_name, session_id, session_start_timestamp, descriptionFROM system_sessionsWHERE session_type = 'REBALANCE_CLUSTER'AND is_active;node_name |    session_id    |   session_start_timestamp     |     description
-----------+------------------+-------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------node001 | user-9956:0x2fb6 | 2016-02-11 21:36:16.045711-05 | Txn: a000000000b167 'RebalanceUnsegmentedTask'node001 | user-9956:0x2fb6 | 2016-02-11 21:36:16.045711-05 | Txn: a000000000b168 'CREATE PROJECTION public.dim7_node006 /*+basename(dim7),createtype(P)*/ ( a, b ) AS SELECT dim7.a, dim7.b FROM public.dim7 ORDER BY dim7.a, dim7.b UNSEGMENTED NODE node006; 'node001 | user-9956:0x2fc0 |  2016-02-11 21:36:16.13772-05 | Txn: a000000000b16b 'Refresh: Evaluating which projection to refresh'node001 | user-9956:0x2fc0 |  2016-02-11 21:36:16.13772-05 | Txn: a000000000b16c 'Refresh: (Table: public.dim7) (Projection: public.dim7_node006)'
监视rebalance操作的总体进度

以下查询监视每个当前正在执行的rebalance操作的进度并返回:

  • 用于rebalance当前投影的方法。可能的值为:

    • 刷新
    • 复制
    • ELASTIC_CLUSTER
  • 该方法的状态
  • 投影数
=> SELECT rebalance_method Rebalance_method, Status, COUNT(*) AS CountFROM ( SELECT rebalance_method,CASEWHEN (separated_percent = 100AND transferred_percent = 100) THEN 'Completed'WHEN (separated_percent <> 0and separated_percent <> 100)OR (transferred_percent <> 0AND transferred_percent <> 100) THEN 'In Progress'ELSE 'Queued'END AS  StatusFROM rebalance_projection_statusWHERE is_latest) AS tabGROUP BY 1, 2ORDER BY 1, 2;Rebalance_method | Status      | Count
------------------+-------------+-------ELASTIC_CLUSTER  | Completed   | 8ELASTIC_CLUSTER  | In Progress | 2ELASTIC_CLUSTER  | Queued      | 2REPLICATE        | Completed   | 50
(4 rows)
监视未分段投影的rebalance活动

以下查询返回有关当前正在刷新的未分段投影的信息:

  • 当前正在执行的rebalance操作的会话ID
  • 正在刷新的未分段投影的名称
  • 刷新操作的当前状态
  • 用于刷新投影的方法
  • 刷新进行了多长时间。可能的阶段是:
    • 当前
    • 历史的
=> SELECT session_id, projection_name, refresh_status, refresh_method, refresh_phaseFROM projection_refreshesWHERE refresh_method = 'rebalance'AND is_executing; session_id       | projection_name | refresh_status | refresh_method | refresh_phase
------------------+-----------------+----------------+----------------+---------------user-9956:0x8cf0 | dim2_node004    | refreshing     | rebalance      | currentuser-9956:0x8d24 | dim2_node005    | refreshing     | rebalance      | historicaluser-9956:0x8d25 | dim2_node006    | refreshing     | rebalance      | historical
(3 rows)
监视分段投影的rebalance活动

以下查询返回有关当前正在刷新的分段投影的信息:

  • 投影名称
  • 用于刷新投影的方法
  • 分离的ROS容器百分比
  • 转移到目标节点的ROS容器的百分比
=> SELECT projection_name, rebalance_method, separated_percent, transferred_percentFROM rebalance_projection_statusWHERE rebalance_method = 'ELASTIC_CLUSTER'AND (separated_percent <> 0AND separated_percent <> 100)OR (transferred_percent <> 0AND transferred_percent <> 100)AND is_latest;projection_name | rebalance_method | separated_percent | transferred_percent
-----------------+------------------+-------------------+---------------------fact5_b1 |  ELASTIC_CLUSTER |            100.00 | 13.23fact4_b1 |  ELASTIC_CLUSTER |             78.77 | 0.00fact5_b0 |  ELASTIC_CLUSTER |            100.00 | 13.63
(3 rows)
监视rebalance完成的投影所花费的时间

以下查询为您提供了rebalance每个投影所花费的时间的信息:

  • 运行rebalance的节点
  • schema名称
  • 投影名称
  • rebalance操作的开始时间
  • rebalance该投影所花费的时间(以秒为单位)

rebalance和锁定竞争

如果在ETL作业运行时重新平衡群集,则可能存在争用锁的情况。此争用可能导致加载作业或重新平衡操作失败。

减少竞争

在重新平衡期间可能导致与元组移动器发生锁争用的数据库操作是:

  • delete
  • update
  • DROP_PARTION
  • SWAP_PARTITION_BETWEEN_TABLES
  • MOVE_PARTITION_TO_TABLE

以下各节介绍了三种诊断,计划和管理重新平衡操作以最小化竞争的方式:

  • 增加锁超时时间
  • 优先考虑重新平衡和元组移动器操作
  • 手动重新平衡表
增加锁超时时间

以下查询返回哪些特定事务持有锁定超过五分钟:

=> SELECT DISTINCT query_requests.transaction_id, statement_id, request
FROM dc_lock_releases JOIN query_requests USING (session_id)
WHERE time - grant_time > '5 min'
AND mode IN ('X','S')
AND object_name NOT LIKE 'ElasticCluster'
ORDER BY statement_id;
-[ RECORD 1 ]--+-----------------------------------------
transaction_id | 45035996273756069
statement_id   | 1
request        | UPDATE /*+label(UPDATE_u1), DIRECT*/ u1 SET c200 = c200 - 1 where C200 < 100;
-[ RECORD 2 ]--+-----------------------------------------
transaction_id | 45035996273756069
statement_id   | 2
request        | commit;
(2 rows)

为了避免竞争这些事务,您可以执行以下操作之一:

  • 在与ETL作业不冲突的时间重新安排rebalance。
  • 增加LockTimeout参数,以便在rebalance集群时ETL作业不会超时:
=> SELECT GET_CONFIG_PARAMETER('locktimeout');
GET_CONFIG_PARAMETER
----------------------300
(1 row)
=> SELECT SET_CONFIG_PARAMETER('LockTimeOut, 600)
SET_CONFIG_PARAMETER
----------------------------
Parameter set successfully
(1 row)

重新平衡完成后,请记住将LockTimeout参数重置为其先前的值。

优先考虑重新平衡和元组移动器操作

假设DML作业尝试访问重新平衡已锁定的表。默认情况下,DML操作获取到锁,取消再平衡。五分钟后,重新平衡将继续尝试访问表并完成重新平衡。

如果希望重新平衡不间断运行,请通过将DMLCancelTM配置参数设置为false来优先考虑重新平衡过程。使用此设置,DML作业无法获得正在进行的重新平衡的锁定。

要设置DMLCancelTM并开始重新平衡,请执行以下操作:

=> SELECT SET_CONFiG_PARAMETER('DMLCancelTM',false);
....
=> SELECT REBALANCE_CLUSTER();
....

如果您的DML任务很重要,请不要将DMLCancelTM的值更​​改为false以进行重新平衡。将DMLCancelTM设置为true可以运行DML作业。

考虑在与关键DML作业不冲突的时候运行重新平衡。重新平衡完成后,请始终将DMLCancelTM设置为true。

=> SELECT SET_CONFiG_PARAMETER('DMLCancelTM', true);
手动重新平衡表

如果您有很多表并且需要几个晚上或周末来重新平衡群集,则可以在每个晚上或周末手动重新平衡固定数量的表。

您可以一次手动重新平衡一个或多个表。为避免在手动重新平衡期间发生争用,请确保没有ETL作业正在运行。

要重新平衡表,请调用REBALANCE_TABLE函数:

=> SELECT REBALANCE_TABLE('t0');

要找出哪些表已重新平衡,正在处理中的平衡表或尚未重新平衡的表,请运行以下查询:

=> SELECT table_name,CASEWHEN separated_percent + transferred_percent = 200 THEN 'REBALANCED'WHEN (separated_percent + transferred_percent) < 200AND (separated_percent + transferred_percent) > 0THEN 'REBALANCING' ELSE 'NOT REBALANCED YET'END statusFROM rebalance_table_status WHERE is_latest;table_name | case
------------+----------------t0 | REBALANCEDt1 | NOT REBALANCED YETt2 | REBALANCING
(3 rows)
重新平衡期间的竞争错误

重新平衡期间可能会发生几种争用错误,其中包括以下内容,以下各节将对此进行讨论:

  • DDL statement interfered with this statement. Unavailable: lock table for query - Locking failure
  • Staging table and target table do not match: Projections definition mismatch
  • Unavailable: [Txn 0xa0000000010113] S lock table - timeout error Timed out
更改架构

重新平衡过程中,其他作业可能执行以下操作:

  • 添加或删除列
  • 添加或删除投影
  • 交换或移动分区

重新平衡时,您可能会看到锁定错误。当另一个作业尝试锁定已由重新平衡操作锁定的表时,将发生此错误:

ERROR 3007: DDL statement interfered with this statement
ERROR 5157: Unavailable: lock table for query - Locking failure: Timed out X locking
Table:public.t0. T held by [user condor (RebalanceElasticTask)]. Your current transaction isolation
level is SERIALIZABLE
交换分区

如果您尝试在两个表之间交换分区,一个已经重新平衡,另一个没有重新平衡,则会看到以下错误:

=> SELECT SWAP_PARTITIONS_BETWEEN_TABLES('t0', 1, 1, 't1');
ERROR 7121: Staging table and target table do not match: Projections definition mismatch

您只能在两个都已重新平衡或都没有重新平衡的表之间交换分区。

获取有关争用错误的信息

如果由于错误或锁争用导致重新平衡失败,则要获取有关错误的信息,请运行以下查询:

=> SELECT time, session_id, error_level, node_name, log_messageFROM dc_errors WHERE session_id IN(SELECT DISTINCT session_idFROM dc_session_startsWHERE session_type = 'REBALANCE_CLUSTER') ORDER BY time DESC;
-[RECORD 1]-------------------------------
time        | 2016-03-05 10:47:08.517557-05
session_id  | eng-g9-046.verticac-2421955:0xad43
error_level | 20
node_name   | node001
log_message | Unavailable: [Txn 0xa0000000010113] S lock table - timeout error Timed out S locking
Table:public.t1. I held
重新平衡错误后重新启动

如果重新平衡由于错误而失败或被DML操作取消,Vertica将尝试在300秒(5分钟)后重新运行重新平衡。这意味着Vertica等待5分钟,然后尝试重新启动重新平衡。

=> SELECT LIST_SERVICES('TM');list_services
------------------------------------------------------------------------------------
Service: 'RebalanceCluster' is enabled , interval 300 second(s)

重新平衡后

重新平衡完成后,请检查以下内容:

  • 重新平衡是否成功完成?
  • K-safety正确吗?
  • 基准性能是多少?
成功或失败

如果在重新平衡数据库时发生故障,则可以再次重新平衡。如果故障原因已解决,则重新平衡操作将从失败的地方继续。但是,失败的数据重新平衡可能导致Vertica无法自动删除过时的投影。
要找到任何此类投影,请查询V_CATALOG.PROJECTIONS系统表,如下所示:

=> SELECT projection_name, anchor_table_name, is_prejoin, is_up_to_dateFROM projections WHERE is_up_to_date = FALSE;

要删除过时的投影,请使用DROP PROJECTION SQL命令。

使用Vertica工具监控系统性能

Vertica提供了两种工具来监视系统性能。但是,它们会严重影响系统性能,因此不要在重新平衡期间运行它们:

  • vioperf:测量硬盘驱动器的速度和一致性。
  • vnetperf:测量节点之间的网络延迟和吞吐量。
    添加节点后,请使用这些工具验证新扩展的群集的性能。

vertica rebalance优化相关推荐

  1. Vertica DBD 分析优化设计

    DBD = Database Designer,是Vertica数据库优化中最主要的原生工具. 首先运行admintools工具,按下面步骤依次执行: 1.选择"6 Configuratio ...

  2. Vertica, MPP Database and Use Cases

    本文转载自:http://wenda.chinahadoop.cn/question/1029 是一篇演讲文,而且时间比较早,2015年,当时vertica的最新版本是7.2,现在(2019年)已经出 ...

  3. 面向服务的大数据分析平台解决方案

    近年来, 大数据处理与分析已经成为全球性问题,引起欧美各国政府和产业界高度重视,美国政府于2012年3月率先发布了<大数据研究与发展计划>, Google, Amazon. Faceboo ...

  4. Vertica系列:数仓优化

    最近才开始接触数仓性能优化,好像走进迷宫,头上永远顶着两句话: 这个是啥,那个是啥 因为数仓好像没啥性能优化的,可能这是小白的一种自我良好认知 根据我们的业务,优化工具经常用到的有以下两个 1.和my ...

  5. Elasticsearch性能优化实战指南

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 0.背景 在当今世界,各行各业每天都有海量数据产生,为了从这些海量数据中获取想要的分析结果,需 ...

  6. 高并发系列:架构优化之从BAT实际案例看消息中间件的妙用

    包含原理+BAT案例实践,看完需要5分钟 本文内容预览: 是什么?为什么? 1.1 什么是消息队列 1.2 为什么要使用消息队列 1.3 引入消息队列的带来了哪些问题 怎么样? 2.1 支撑七年双11 ...

  7. 京东Flink优化与技术实践

    分享嘉宾:付海涛 京东 高级技术专家 编辑整理:赵明明 出品平台:DataFunTalk 导读:Flink是目前流式处理领域的热门引擎,具备高吞吐.低延迟的特点,在实时数仓.实时风控.实时推荐等多个场 ...

  8. Vertica数据库

    Vertica是一款基于列存储的MPP(massively parallel processing)架构的数据库. [2] 它可以支持存放多至PB(Petabyte)级别的结构化数据.Vertica是 ...

  9. Vertica集群扩容实验过程记录

    需求: 将3个节点的Vertica集群扩容,额外增加3个节点,即扩展到6个节点的Vertica集群. 实验环境: RHEL 6.5 + Vertica 7.2.2-2 步骤: 1.三节点Vertica ...

最新文章

  1. Web开发的历史发展技术演变
  2. POJ1204 Word Puzzles
  3. 《汇编语言》课程设计
  4. linux进程作为服务,将一个监视进程做成linux系统服务
  5. Bouncy Castle Crypto API c# port
  6. 让组件悬浮所有页面之上
  7. MATLAB常用三角函数
  8. Linux chapter 5
  9. GWR模型报错汇总(arcgis与GWR4)
  10. 松下plc编程线usb驱动
  11. SDL游戏开发之七-虚拟摇杆
  12. LEADBBS 不要验证码
  13. win10:为U盘设计图标
  14. Canvas: trying to draw too large bitmap 红米 k30 奔溃
  15. 2018年大连海事大学校赛(ACM竞赛高校联盟训练赛 第11场)题解
  16. [导读]7 Steps to Mastering Machine Learning With Python
  17. 制作 docker 精简 jre8 基础镜像
  18. 智联招聘数据Hbase数据分析+可视化
  19. Angular self study 4 - data entered by end user
  20. 畸变校正与极线校正(具体原理+Matlab代码)

热门文章

  1. java 协方差矩阵_协方差矩阵概念(易理解)
  2. Proximity sensor---Px318J
  3. Briarcliff Entertainment 购买了关于开创性的非裔美国 NBA 球员的电视剧“Sweetwater”(独家)
  4. Android 网络获取图片处理
  5. Hangfire Pro 2022-08-31 update
  6. 【因缘际会】知乎APP的简单的产品体验报告
  7. java.io.IOException: Attempted read from closed stream.
  8. 嵌入式学习的几种线路图
  9. 重磅!Waymo首席执行官离职,自动驾驶商业化打上“问号”
  10. 欣赏 Pianissimo!!! 钢琴演奏会