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

返回本页常规视图.

CRC 和排序顺序检查

作为超级用户,您可以对 Vertica 数据库运行索引工具以执行两个任务:

  • 对现有数据存储上的每个块运行循环冗余检查 (CRC),以检查 ROS 数据块的数据完整性。

  • 检查 ROS 容器中的排序顺序是否正确。

如果数据库出现故障,请从 Linux 命令行调用索引工具。如果数据库已启动,请使用 Vertica 元函数 RUN_INDEX_TOOL 从 VSQL 调用:

如果从命令行调用,索引工具仅在当前节点上运行。但是,您可以同时对多个节点运行索引工具。

结果输出

索引工具将操作相关的摘要信息写入至标准输出;结果的详细信息记录在两个位置之一,具体取决于调用该工具的环境:

有关评估输出中是否可能有错误的信息,请参阅:

优化性能

可以通过将操作范围缩小到一个或多个投影并指定用于执行函数的线程数来优化元函数性能。有关详细信息,请参阅 RUN_INDEX_TOOL

1 - 评估 CRC 错误

在每次提取数据磁盘以进行查询处理时,Vertica 都会评估每个 ROS 数据块中的 CRC 值。如果在提取数据时出现 CRC 错误,则会将以下信息写入 vertica.log 文件:

CRC Check Failure Details:File Name:
File Offset:
Compressed size in file:
Memory Address of Read Buffer:
Pointer to Compressed Data:
Memory Contents:

事件管理器也会收到关于 CRC 错误的通知,因此您可以使用 SNMP 陷阱来捕获 CRC 错误:

"CRC mismatch detected on file <file_path>. File may be corrupted. Please check hardware and drivers."

如果您从 vsql、ODBC 或 JDBC 运行查询,则查询会返回 FileColumnReader ERROR。此消息指出特定块的 CRC 与给定记录不匹配,如下所示:

hint: Data file may be corrupt.  Ensure that all hardware (disk and memory) is working properly.
Possible solutions are to delete the file <pathname> while the node is down, and then allow the node
to recover, or truncate the table data.code: ERRCODE_DATA_CORRUPTED

2 - 评估排序顺序错误

如果 ROS 数据未按投影的顺序正确排序,则依赖于已排序数据的查询结果就会不正确。如果您怀疑有或已经发现不正确的查询结果,则可以使用索引工具来检查 ROS 排序顺序。索引工具会对每个 ROS 行进行评估,以确定其排序是否正确。如果检查发现某行的顺序不正确,则它会向日志文件中写入一条错误消息以及未排序行的行号和内容。

查看错误

  1. 打开 indextool.log 文件。例如:

    $ cd VMart/v_check_node0001_catalog
    
  2. 查看包含 OID 编号和字符串 Sort Order Violation 的错误消息。例如:

    <INFO> ...on oid 45035996273723545: Sort Order Violation:
    
  3. 通过对 indextool.log 运行 grep,查找有关排序顺序违规字符串的详细信息。例如,以下命令将返回每个字符串前面的行 (-B1) 以及后面的四行 (-A4) :

    [15:07:55][vertica-s1]: grep -B1 -A4 'Sort Order Violation:' /my_host/databases/check/v_check_node0001_catalog/indextool.log
    
    2012-06-14 14:07:13.686 unknown:0x7fe1da7a1950 [EE] <INFO> An error occurred when running index tool thread on oid 45035996273723537:
    Sort Order Violation:
    Row Position: 624
    Column Index: 0
    Last Row: 2576000
    This Row: 2575000
    --
    2012-06-14 14:07:13.687 unknown:0x7fe1dafa2950 [EE] <INFO> An error occurred when running index tool thread on oid 45035996273723545:
    Sort Order Violation:
    Row Position: 3
    Column Index: 0
    Last Row: 4
    This Row: 2
    --
    
  4. 通过查询 STORAGE_CONTAINERS 系统表,查找发生排序顺序违规的投影。使用等于 indextool.log 中所列 OID 值的 storage_oid。例如:

    => SELECT * FROM storage_containers WHERE storage_oid = 45035996273723545;