1 - 确定 Vertica 版本

要确定主机上安装的 Vertica 的版本,请登录到该主机并键入:

$ rpm -qa | grep vertica

此命令返回已安装包的名称,其中包含版本和内部版本号。以下示例指示 Vertica 9.3.x 和管理控制台 9.3.x 都在目标主机上运行:

$ rpm -qa | grep vertica
vertica-9.3.0-0
vertica-console-9.3.0-0.x86_64

登录到 Vertica Analytic Database 数据库后,还可以通过运行以下命令仅对该版本运行查询:

=> SELECT version();
                  version
-------------------------------------------
 Vertica Analytic Database v9.3.0-0

2 - 收集诊断:scrutinize 命令

诊断工具 scrutinize 从 Vertica 群集中收集大量信息。它还支持一系列选项,这些选项可让您控制所收集数据的数量和类型。收集的数据可以包括但不限于:

  • 主机诊断和配置数据

  • 运行时状态(正常或故障节点数)

  • 来自安装过程、数据库和管理工具的日志文件(例如, vertica.log、dbLog、/opt/vertica/log/adminTools.log

  • 错误消息

  • 数据库设计

  • 系统表信息,如系统、资源、工作负载和性能

  • 编录元数据,如系统配置参数

  • 备份信息

要求

scrutinize 要求将群集配置为支持管理工具实用程序。如果管理工具无法在发起主机上运行,则 scrutinize 也无法在该主机上运行。

2.1 - 运行 scrutinize

可以使用以下命令运行 scrutinize

$ /opt/vertica/bin/scrutinize

未限定的 scrutinize 会从所有群集节点中收集大量信息。它会将结果存储在 .tar 文件 ( VerticaScrutinize.NumericID.tar) 中,这可最大程度地减小对数据库性能的影响。 scrutinize 输出可以帮助诊断大多数问题,但通过省略细粒度的分析数据来减小上传大小。

命令选项

scrutinize 选项支持以下任务:

权限

您必须具有数据库管理员 (dbadmin) 权限才能运行 scrutinize。如果在 dbadmin 用户存在时以 root 用户身份运行 scrutinize,Vertica 会返回错误。

磁盘空间要求

scrutinize 需要临时磁盘空间,以便在发布最终的压缩 (.tar) 输出之前收集数据。空间量取决于多个变量,例如 Vertica 日志和所提取系统表的大小,以及用于限制信息收集范围的用户指定选项。在 scrutinize 运行之前,它会验证临时目录至少包含 1 GB 空间;但是,实际所需的空间量可能要高得多。

可以将 scrutinize 输出重定向到另一个目录。有关详细信息,请参阅重定向 scrutinize 输出

数据库规范

如果在群集上定义了多个数据库,并且多个数据库处于活动状态,或者没有一个数据库处于活动状态,则必须使用以下选项之一运行 scrutinize:

$ /opt/vertica/bin/scrutinize {--database=database | -d database}

如果在满足这些条件时省略此选项,scrutinize 会返回错误。

2.2 - 信息选项

scrutinize 支持两个不能与任何其他选项结合使用的信息选项:

‑‑version
获取 Vertica 服务器版本号和 scrutinize 版本号,然后退出。例如:
=> \!scrutinize --version
Scrutinize Version 10.0.1-20200426
‑‑help ‑h
列出控制台的所有 scrutinize 选项,然后退出:
=> \! scrutinize -h
Usage: scrutinize [options]
  
Options:
--version             show program's version number and exit
-h, --help            show this help message and exit
-X LIST, --exclude-tasks=LIST
            Skip tasks of a particular type. Provide a comma-
            separated lists of types to skip. Types are case-
            sensitive. Possible types are: Command, File,
            VerticaLog, DC, SystemTable, CatalogObject, Query,
            all.
...

2.3 - 重定向 scrutinize 输出

默认情况下,scrutinize 在执行时使用临时目录 /opt/vertica/tmp 执行来编译输出。完成收集后,它会将收集内容保存到当前目录的 tar 文件中。可以使用以下两个选项重定向 scrutinize 输出:

‑‑tmpdir=path
将临时输出定向到指定的路径,其中以下要求适用于 path
  • 该目录必须至少具有 1 GB 的可用空间。

  • 您必须对该目录具有写入权限。

‑‑output_dir=path
‑o path
scrutinize 结果保存到 path 中的 tar 文件。例如:
$ scrutinize ‑‑output_dir="/my_diagnostics/"

2.4 - Scrutinize 安全性

scrutinize 可以指定用户名和密码,如下所示:

‑‑user=username
‑U username
指定 dbadmin 用户名。默认情况下,scrutinize 使用调用用户的用户名。
‑‑password=password ‑P password
将数据库密码设置为 scrutinize 命令的实参。如果管理员帐户(默认为 dbadmin)具有密码身份验证,请使用此选项。如果在受密码保护的数据库上省略此选项,scrutinize 会返回警告,除非设置了环境变量 VSQL_PASSWORD

带有特殊字符的密码必须用单引号括起来。例如:

$ scrutinize -P '@passWord**'
$ scrutinize --password='$password1*'
‑prompt‑password ‑W
指定在 scrutinize 开始收集数据之前提示用户输入数据库密码。

2.5 - 数据收集范围

scrutinize 选项可让您控制数据收集的范围。您可以根据以下条件指定数据收集的范围:

您可以单独或组合使用这些选项,以实现所需的粒度级别。

收集的数据量

通过以下几个选项,可以限制 scrutinize 收集的数据量:

‑‑by‑second
每秒收集数据。这是从数据收集器表中收集时的最高粒度级别。
‑‑by‑minute=boolean‑value
每分钟(如果值为 true)或每小时(如果值为 false)收集数据。
‑‑get‑files file‑list
收集指定的附加文件(包括 Glob),其中 file‑list 是文件的分号分隔列表。
‑‑include_gzlogs=num‑files
‑z num‑files
scrutinize 输出中包括 num‑files 个轮换日志文件 (vertica.log*.gz),其中 num‑files 可以是以下值之一:
  • 整数指定要收集的循环日志文件的数量。

  • all 指定收集所有轮换日志文件。

默认情况下,scrutinize 会包含三个滚动日志文件。

‑‑log-limit=limit
‑l limit
从最近的日志条目开始,从 Vertica 日志中收集的数据量(以 GB 为单位)。默认情况下,scrutinize 收集 1 GB 的日志数据。

特定于节点的收集

默认情况下,scrutinize 收集所有群集节点中的数据。您可以指定 scrutinize 通过以下两种方法在各个节点中收集:

‑‑local_diags ‑s
仅从调用了 scrutinize 的主机中收集诊断数据。要从群集中的多个节点收集数据,请使用 ‑‑hosts 选项。
‑‑hosts=host‑list ‑n host‑list
仅从在 host-list 中指定的主机中收集诊断数据,host-list 是 IP 地址或主机名的逗号分隔列表。

例如:

$ scrutinize --hosts=127.0.0.1,host_3,host_1

要包括的数据的类型

scrutinize 提供了几个选项,可用于指定要收集的数据的类型:

‑‑debug
收集日志的调试信息。
‑‑diag‑dump
将收集的内容限制为数据库设计、系统表和数据收集器表。使用此选项可收集用于分析系统性能的数据。
‑‑diagnostics
将收集的内容限制为对 Vertica 及其主机系统运行的命令所产生的日志文件数据和输出。使用此选项可收集用于评估 Vertica 系统中意外行为的数据。
‑‑include‑ros‑info
包括来自系统表的 ROS 相关信息。
‑‑no‑active‑queries ‑‑with‑active‑queries
从系统表和数据收集器表中排除有关当前正在运行的查询的诊断信息。默认情况下,scrutinize 收集此信息 (‑‑with‑active‑queries)。
‑‑tasks=tasks -T tasks
收集文件或 JSON 列表中指定的一个或多个任务的诊断数据。此选项通常与 ‑‑exclude 一起使用。
‑‑type=type -t type
要执行的诊断数据收集的类型,包括以下选项之一:
  • profiling:收集分析数据。

  • context:收集摘要信息。

‑‑with‑active‑queries
默认设置,包括从系统表和数据收集器表中收集有关当前正在运行的查询的诊断信息。要省略此数据,请使用 ‑‑no‑active‑queries

要排除的数据的类型

scrutinize 选项还允许您指定要从其收集中排除的数据的类型:

‑‑exclude=tasks ‑X tasks
从诊断数据收集中排除一个或多个类型的任务,其中 tasks 是要排除的任务的逗号分隔列表。
  • all:所有默认任务

  • DC:数据收集器表

  • File:来自安装过程、数据库和管理工具的日志文件,例如 vertica.logdbLogadminTools.log

  • VerticaLog:Vertica 日志

  • CatalogObject:Vertica 编录元数据,例如系统配置参数

  • SystemTable:包含有关系统、资源、工作负载和性能的信息的 Vertica 系统表

  • Query:使用 vsql 连接到数据库的 Vertica 元函数,例如 EXPORT_CATALOG()

  • Command:操作系统信息,例如节点已启动的时间长度

‑‑no‑active‑queries
省略系统表和数据收集器表中有关当前正在运行的查询的诊断信息。默认情况下,scrutinize 始终会收集活动查询信息 (‑‑with‑active‑queries)。
‑‑vsql-off ‑v
排除用于连接到数据库的 QuerySystemTable 任务。此选项可帮助您处理升级期间遇到的问题,并且通常在以下情况下使用:
  • Vertica 正在运行,但响应缓慢。

  • 您尚未创建数据库,但需要帮助解决其他群集问题。

2.6 - 上传 scrutinize 结果

scrutinize 提供了将数据上传到 Vertica 客户支持的多个选项。

上传打包

当使用上传选项时,scrutinize 不会将所有输出捆绑到单个 tar 文件中。相反,每个节点将其输出直接发布到指定的 URL,如下所示:

  1. 上传较小的上下文文件,使客户支持能够查看高层次信息。

  2. 完成 scrutinize 执行后,上传完整的诊断集合。

上传先决条件

使用上传选项运行 scrutinize 之前:

  • 在运行 scrutinize 的数据库管理员用户的路径中安装 cURL 程序。

  • 确认群集中的各节点能否直接与 Internet 建立 HTTP 或 FTP 连接。

上传选项

‑‑auth‑upload=url
‑A url
通过上传您的客户名称,使用您的 Vertica 许可证向 Vertica 服务器进行身份验证。收到上传的文件之后,客户支持使用此信息验证您的身份。此选项需要具有有效的 Vertica 许可证。
‑‑url=url
‑u url
需要 url 以包括 Vertica 客户支持提供的用户名和密码。
‑‑message=message
‑m message
包括带有 scrutinize 输出的消息,其中 message 是文本字符串、文本文件的路径或用于打开要在其中编写消息的输入流的 PROMPTscrutinize 会读取输入,直至您另起一行键入句点 (.)。这会关闭输入流,并且 scrutinize 会将消息写入收集到的输出中。

消息会写入 output 目录中的 reason.txt。如果未指定消息,则 scrutinize 会生成默认消息 Unknown reason for collection。消息通常包括以下信息:

  • 收集/提交诊断数据的原因。

  • 支持人员提供的案例编号和其他特定于问题的信息,以帮助 Vertica 客户支持识别您的案例并分析问题。

示例

‑‑auth‑upload 选项使用您的 Vertica 来标识您自己:

$ scrutinize -U username -P 'password' --auth-upload="support-provided-url"

‑‑url 选项在 URL 中包括支持人员提供的 FTP 用户名和密码:

$ scrutinize -U username -P 'password' --url='ftp://username/password@customers.vertica.com/'

您可以将消息以文本字符串或文本文件的形式提供:

$ scrutinize --message="re: case number #ABC-12345"
$ scrutinize --message="/path/to/msg.txt"

或者,您可以打开输入流并键入消息:

$ scrutinize --message=PROMPT Enter reason for collecting diagnostics; end with '.' on a line by itself:
Query performance degradation noticed around 9AM EST on Saturday
.
Vertica Scrutinize Report
-----------------------------
Result Dir:              /home/dbadmin/VerticaScrutinize.20131126083311
...

2.7 - 对 scrutinize 进行故障排除

本部分中的故障排除建议可帮助您解决在使用 scrutinize 时可能遇到的常见问题。

收集时间过长

要缩短收集时间,运行 scrutinize 的实例时请忽略系统表。请注意,从更少的节点进行收集并不一定会加快收集过程。

输出大小过大

输出大小取决于系统表大小和 Vertica 日志大小。

要创建更小的 scrutinize 输出,请忽略一些系统表或截断 Vertica 日志。有关详细信息,请参阅缩小 scrutinize 数据收集的范围

未在具有密码的数据库上收集系统表

对受密码保护的数据库运行 scrutinize 可能需要您提供用户名和密码:

$ scrutinize -U username -P 'password'

3 - 导出编录

导出编录时,可以将编录快速移动到其他群集。导出编录会传输架构、表、约束、投影和视图。系统表不会导出。

导出编录也可用于提供支持。

有关详细信息,请参阅 EXPORT_CATALOG 函数。

4 - 导出分析数据

诊断审核脚本从正在运行的数据库中收集系统表内容、设计和计划对象,并将数据导出到名为 ./diag_dump_<timestamp>.tar.gz 的文件中,其中 <timestamp> 表示脚本的运行时间。

如果不使用任何参数运行脚本,系统则会提示您输入数据库密码。

语法

/opt/vertica/scripts/collect_diag_dump.sh [ command... ]

参数

command

示例

以下命令使用所有实参来运行审核脚本:

$ /opt/vertica/scripts/collect_diag_dump.sh -U dbadmin -w password -c