数据收集器表查询
Vertica 数据收集器可收集和保留有关数据库群集的信息,从而扩展了系统表功能。数据收集器会在系统表中提供这些信息。
Vertica Analytic Database 会将数据收集数据存储在 Vertica 或编录路径下的数据收集器目录中。使用数据收集器信息可以查询系统表的过去状态并提取聚合信息。
一般来说,如果数据收集器表只有包含所需数据的列,查询这些表的效率会更高。在以下情况下,查询也会更加高效:
避免重新分段
在 session_id
或 transaction_id
上联接以下 DC 表时,您可以避免重新分段,因为所有数据都是本地数据:
-
dc_session_starts
-
dc_session_ends
-
dc_requests_issued
-
dc_requests_completed
查询包括 node_name
列时,不需要重新分段。例如:
=> SELECT dri.transaction_id, dri.request, drc.processed_row_count
FROM dc_requests_issued dri
JOIN dc_requests_completed drc
USING (node_name, session_id, request_id) WHERE dri.time between 'April 7,2015'::timestamptz and 'April 8,2015'::timestamptz
AND drc.time between 'April 7,2015'::timestamptz and 'April 8,2015'::timestamptz;
此查询会高效运行,因为:
-
启动程序节点仅写入到
dc_requests_issued
和dc_requests_completed
。 -
列
session_id
和node_name
彼此相关。
使用时间谓词
为时间范围谓词使用非易变函数以及
TIMESTAMP
。Vertica Analytic Database 会优化使用时间谓词的 DC 表的 SQL 性能。
每个 DC 表都有一个 time
列。使用此列可将时间范围作为查询谓词输入。
例如,此查询会返回日期在 9 月 1 日到 9 月 10 日之间的数据:
select * from dc_foo where time > 'Sept 1, 2015::timestamptz and time < 'Sept 10 2015':: timestamptz;
您可以更改最小或最大时间值,调整要检索数据的时间范围。
您必须将非可变函数用作时间谓词。 可变函数 导致查询运行效率低下。此示例返回了在 2015 年 4 月 7 日开始和结束的所有查询。但是,查询并未以最佳性能运行,因为 trunc
和 timestamp
是可变的:
=> SELECT dri.transaction_id, dri.request, drc.processed_row_count
FROM dc_requests_issued dri
LEFT JOIN dc_requests_completed drc
USING (session_id, request_id)
WHERE trunc(dri.time, ‘DDD’) > 'April 7,2015'::timestamp
AND trunc(drc.time, ‘DDD’) < 'April 8,2015'::timestamp;