OceanBase 查询结果集的行哈希(Row Hash)校验机制,以下说法正确的是?
A. 行哈希校验是指对查询返回的结果集中的每一行,计算其所有列的哈希值,用于客户端与服务器端比对,确保数据传输过程中未被篡改。
B. OceanBase 默认对每个查询结果集启用行哈希校验,用户可以通过 SHOW VARIABLES LIKE 'row_hash_check' 查看该开关状态。
C. 行哈希校验主要用于分布式查询场景,当多个 OBServer 节点返回部分结果时,接收节点可以通过校验哈希值来检测数据在传输或计算过程中是否损坏。
D. 行哈希校验会增加明显的 CPU 开销,因此通常只在调试或数据一致性要求极高的场景下手动开启,生产环境默认关闭。
2 个赞
解析 :
OceanBase 在分布式执行计划中,当多个节点通过 EXCHANGE 算子交换数据时,发送端会对每个数据行(或数据块)计算哈希值并附加在数据包中,接收端收到后会重新计算并比对。这种机制可以检测网络传输中的数据损坏、内存计算中的异常篡改,是 OceanBase 内部数据完整性校验的重要手段,尤其适用于跨节点的数据重分发场景。
-
A 错误 :行哈希校验是数据库内部节点之间 的校验,用于分布式执行中的数据完整性,而非客户端与服务器端之间的校验。客户端到服务器端通常依赖网络传输协议层的校验(如 TCP checksum)。
-
B 错误 :行哈希校验不是默认对所有查询开启 的,它属于内部执行层的机制,不对外暴露为
row_hash_check 这样的用户变量(实际并无此变量)。用户通常无法直接控制此开关,它由系统内部根据场景自动启用(如跨节点数据交换)。
-
C 正确 :描述准确,行哈希校验主要服务于分布式查询中的数据完整性。
-
D 错误 :虽然行哈希校验有一定 CPU 开销,但在分布式场景下对跨节点数据交换至关重要,生产环境默认是开启的 (内部自动启用),并非仅用于调试或手动开启。OBCE 考试中常设此陷阱,让考生误以为需要手动开启。
没落的星辰
#4
正确答案:C、D
选项 C(正确)
行哈希校验的核心用途,就是在分布式查询中,当多个 OBServer 节点返回部分结果时,接收节点通过校验哈希值来检测数据在传输或计算过程中是否损坏,保证结果一致性。
选项 D(正确)
行哈希校验会增加 CPU 开销,因此通常只在调试或数据一致性要求极高的场景下手动开启,生产环境默认关闭,避免影响性能。
其余错误
选项 A(错误)
OceanBase 的行哈希校验是节点间的内部校验机制,用于检测分布式查询过程中数据传输或计算的损坏,并非客户端与服务器端的比对,因此不用于防止网络传输中的篡改。
选项 B(错误)
行哈希校验默认是关闭的,并非对每个查询结果集默认启用,因此 “默认启用” 的描述错误。
1 个赞