Vertica 监控最佳实践¶
原文:Best Practices for Monitoring Vertica
关联:Vertica 维护前准备 Checklist(监控发现问题后的执行动作)| K-Safety 最佳实践
概述¶
本文档帮助监控 Vertica 数据库,按查询执行类别分类,覆盖以下 10 大领域:
- 系统健康
- 资源使用
- 活跃会话
- 活跃事务/查询
- 恢复
- 重平衡
- 历史活动
- 对象统计
- 查询性能
- Data Collector 表
1. 系统健康¶
监控节点状态¶
节点处于 DOWN 状态时,不参与该时间点之后提交的任何事务。务必持续监控节点状态。
输出示例:
node_name | node_state
---------------+------------
v_demo_node0001 | UP
v_demo_node0002 | INITIALIZING
v_demo_node0003 | UP
(3 rows)
也可以通过 Management Console 查看可视化概览:

如果节点 DOWN,先尝试重启。排查参考 KB 文章「Database Node is DOWN checklist」和「Node Recovery in Vertica」。
监控 Epoch 状态¶
AHM(Ancient History Mark)指向可被物理清除的历史数据的时间点。Epoch 状态反映集群健康度。
SELECT current_epoch, ahm_epoch, last_good_epoch,
designed_fault_tolerance, current_fault_tolerance,
wos_used_bytes, ros_used_bytes
FROM system;
或简化版:
关注要点:
designed_fault_tolerance和current_fault_tolerance是否一致?ahm_epoch是否接近last_good_epoch?如果相差很远 → AHM 未推进- WOS/ROS 使用量
- 默认 AHM 尽可能靠近当前时间;如果 AHM 时间超过 14 天前,联系 Vertica 技术支持
监控 Delete Vector¶
DELETE 或 UPDATE 语句会创建 delete vector。数量过多会严重影响性能。
-- 系统级总数
SELECT COUNT(*) FROM v_monitor.delete_vectors;
-- 按投影看哪些表的删除行比例 > 5%
SELECT node_name, schema_name, projection_name,
total_row_count, deleted_row_count, delete_vector_count
FROM storage_containers
WHERE deleted_row_count > total_row_count * 0.05
ORDER BY deleted_row_count DESC;
大量 delete vector 表示集群处于异常状态。处理参考「Best Practices for Deleting Data」。
监控 ROS Container 数量¶
Vertica 每个投影的 ROS container 上限为 1024。数量过大会影响性能。
SELECT node_name, projection_schema, projection_name,
SUM(ros_count) AS ros_count
FROM v_monitor.projection_storage
GROUP BY node_name, projection_schema, projection_name
ORDER BY ros_count DESC;
超过 500 通常意味着 PARTITION BY 设计有问题,或 merge 过程未正常运作。详见「Vertica Partitions: The FAQs」。
2. 资源使用¶
监控 Resource Pool¶
SELECT sysdate AS current_time, node_name, pool_name,
memory_inuse_kb, general_memory_borrowed_kb, running_query_count
FROM resource_pool_status
WHERE pool_name IN ('general')
ORDER BY 1, 2, 3;
查看哪个节点慢、哪些查询在运行或停止。也可查内存消耗大的查询:
监控资源队列¶
显示各资源池的待处理请求,position_in_queue 表示排队位置。
监控资源请求拒绝¶
记录 Resource Manager 拒绝的资源请求。计数器在节点重启时归零。用于诊断资源空间不足及受影响的用户/池。
监控系统资源¶
提供内存、CPU、网络、磁盘 I/O 等系统资源的历史数据。
监控磁盘空间¶
Vertica 建议保留 40% 空闲空间以确保平稳运行。
3. 活跃会话¶
查看当前会话¶
用这个表可以:
- 识别运行长查询的用户
- 识别因未提交事务而持有锁的用户
- 确定关闭数据库前需要断开哪些用户
- 查看会话是否使用 SSL 或客户端认证
- 识别客户端版本
关闭会话¶
关闭会话会中断连接、回滚当前事务并关闭 socket。只能关闭自己的会话。
4. 活跃查询¶
监控正在运行的查询¶
SELECT node_name, query, query_start, user_name, is_executing
FROM v_monitor.query_profiles
WHERE is_executing = 't';
监控加载状态¶
SELECT table_name, read_bytes, input_file_size_bytes,
accepted_row_count, rejected_row_count,
parse_complete_percent, sort_complete_percent
FROM load_streams
WHERE is_executing = 't'
ORDER BY table_name;
查看历史加载记录:改为 WHERE is_executing = 'f'。
监控锁状态¶
SELECT locks.lock_mode, locks.lock_scope,
substr(locks.transaction_description, 1, 100) AS "left",
locks.request_timestamp, locks.grant_timestamp
FROM v_monitor.locks;
无结果 = 当前没有锁。用于分析批处理问题和慢查询原因。
5. 恢复(Recovery)¶
节点从 DOWN 恢复时,需要从 buddy 节点同步缺失数据才能回到 UP 状态。
SELECT node_name, recover_epoch, recovery_phase,
current_completed, current_total, is_running
FROM v_monitor.recovery_status
ORDER BY 1;
字段含义:
| 字段 | 含义 |
|---|---|
is_running |
恢复是否进行中 |
current_completed |
已完成恢复的投影数 |
current_total |
需要恢复的投影总数 |
6. 重平衡(Rebalance)¶
检查节点依赖¶
清理的节点依赖列表应显示 (节点数 + 1) 行。每行显示分段投影数,最后一行是非分段投影数。位图中 bit=1 表示该节点有数据 segment。
监控重平衡进度¶
SELECT rebalance_method AS "方法", Status, COUNT(*) AS Count
FROM (
SELECT rebalance_method,
CASE
WHEN (separated_percent = 100 AND transferred_percent = 100) THEN 'Completed'
WHEN (separated_percent <> 0 AND separated_percent <> 100)
OR (transferred_percent <> 0 AND transferred_percent <> 100) THEN 'In Progress'
ELSE 'Queued'
END AS Status
FROM v_monitor.rebalance_projection_status
WHERE is_latest
) AS tab
GROUP BY 1, 2 ORDER BY 1, 2;
重平衡方法:
ELASTIC_CLUSTER— 弹性集群REPLICATE— 复制REFRESH— 刷新
7. 历史活动¶
按执行时间查 Top N 慢查询¶
SELECT user_name, start_timestamp, request_duration_ms,
transaction_id, statement_id,
substr(request, 0, 1000) AS request
FROM v_monitor.query_requests
WHERE transaction_id > 0
ORDER BY request_duration_ms DESC
LIMIT 10;
request_duration_ms 单位是毫秒。
查看查询的内存使用¶
SELECT node_name, transaction_id, statement_id, user_name,
start_timestamp, request_duration_ms, memory_acquired_mb,
substr(request, 1, 100) AS request
FROM v_monitor.query_requests
WHERE transaction_id = <txn_id> AND statement_id = <stmt_id>;
根据结果可以优化查询、修改表/投影设计或减少数据量。
8. 对象统计¶
监控分区数¶
SELECT node_name, projection_name, count(partition_key)
FROM v_monitor.partitions
GROUP BY node_name, projection_name
ORDER BY node_name, projection_name;
分区过多说明需要用 ALTER TABLE 调整分区策略。
监控数据倾斜¶
SELECT ps.node_name, ps.projection_schema, ps.projection_name, ps.row_count
FROM v_monitor.projection_storage ps
INNER JOIN v_catalog.projections p
ON ps.projection_schema = p.projection_schema
AND ps.projection_name = p.projection_name
WHERE p.is_segmented
ORDER BY ps.projection_schema, ps.projection_name, ps.node_name;
各节点上同一投影的行数应接近。差异过大说明存在数据倾斜,需优化投影设计。
9. 查询性能¶
查询执行事件¶
查询性能会随数据增长而退化,需持续监控高频和大数据量查询。
加载流统计¶
SELECT schema_name, table_name, load_start, load_duration_ms,
is_executing, parse_complete_percent, sort_complete_percent,
accepted_row_count, rejected_row_count
FROM v_monitor.load_streams;
记录每次加载的接受/拒绝行数,按来源分组可追踪数据来源。
10. Data Collector 表速查¶
| 类别 | 组件 | DC 表 | 说明 |
|---|---|---|---|
| Query | RequestsIssued | dc_requests_issued |
所有 SQL 请求历史 |
| Query | RequestsCompleted | dc_requests_completed |
所有完成的 SQL 请求 |
| Query | ExecutionEngineProfiles | dc_execution_engine_profiles |
EE 分析历史 |
| Query | QueryExecutions | dc_query_executions |
查询执行各步骤 |
| Resource | ResourceAcquisitions | dc_resource_acquisitions |
资源获取历史 |
| Resource | ResourcePoolStatus | dc_resource_pool_status |
资源池状态 |
| Event | OptimizerEvents | dc_optimizer_events |
优化器重要事件 |
| Event | ExecutionEngineEvents | dc_execution_engine_events |
本地规划与执行事件 |
| Session | SessionStarts | dc_session_starts |
会话启动 |
| Session | SessionEnds | dc_session_ends |
会话结束 |
| Lock | LockAttempts | dc_lock_attempts |
锁尝试历史 |
| Lock | LockReleases | dc_lock_releases |
锁释放历史 |
关键 SQL 速查¶
| 监控目标 | SQL |
|---|---|
| 节点状态 | SELECT node_name, node_state FROM nodes; |
| Epoch/AHM | SELECT * FROM system; |
| Delete Vector | SELECT COUNT(*) FROM v_monitor.delete_vectors; |
| ROS Container | v_monitor.projection_storage GROUP BY |
| 资源池 | SELECT * FROM resource_pool_status; |
| 资源队列 | SELECT * FROM v_monitor.resource_queues; |
| 系统资源 | SELECT * FROM v_monitor.system_resource_usage; |
| 磁盘 | SELECT * FROM v_monitor.storage_usage; |
| 活跃会话 | SELECT * FROM v_monitor.sessions; |
| 关闭会话 | SELECT close_session('session_id'); |
| 运行中查询 | v_monitor.query_profiles WHERE is_executing='t' |
| 加载进度 | load_streams WHERE is_executing='t' |
| 锁状态 | SELECT * FROM v_monitor.locks; |
| 恢复状态 | v_monitor.recovery_status |
| 重平衡进度 | v_monitor.rebalance_projection_status |
| 慢查询 Top N | v_monitor.query_requests ORDER BY request_duration_ms DESC |
| 查询内存 | memory_acquired_mb FROM v_monitor.query_requests |
| 分区数 | v_monitor.partitions GROUP BY |
| 数据倾斜 | projection_storage JOIN projections |
| 节点依赖 | SELECT GET_NODE_DEPENDENCIES(); |
扩展阅读¶
-
Vertica Linux IO 调度器性能影响与调优 — IO 调度器性能诊断与切换方案
-
Vertica Health Watchdog 智能监控 — 健康监控与告警
- Vertica 性能调优 - 2 使用系统表排查查询故障 — 系统表分析详解
- Vertica 资源池配置的最佳实践 — 资源池监控与调优
- Vertica 统计信息管理与查询性能 — 统计信息健康度监控与诊断
- Vertica dbadmin 密码过期处理与自动化管理 — 密码过期监控与自动化