使用诊断工具
- 1: 确定 Vertica 版本
- 2: 收集诊断:scrutinize 命令
- 2.1: 运行 scrutinize
- 2.2: 信息选项
- 2.3: 重定向 scrutinize 输出
- 2.4: Scrutinize 安全性
- 2.5: 数据收集范围
- 2.6: 上传 scrutinize 结果
- 2.7: 对 scrutinize 进行故障排除
- 3: 导出编录
- 4: 导出分析数据
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
旨在收集用于对数据库和群集进行故障排除的信息。根据您的系统配置,通过运行 scrutinize
生成的日志可能包含专有信息。如果您担心共享专有信息,请先将其从 .tar
文件中移除,然后再将其发送给 Vertica 客户支持以寻求帮助。
命令选项
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
一起使用。注意
请仅在 Vertica 客户支持的指导下使用此选项 -
‑‑type=type -t type
- 要执行的诊断数据收集的类型,包括以下选项之一:
-
profiling
:收集分析数据。 -
context
:收集摘要信息。
-
‑‑with‑active‑queries
- 默认设置,包括从系统表和数据收集器表中收集有关当前正在运行的查询的诊断信息。要省略此数据,请使用
‑‑no‑active‑queries
。
要排除的数据的类型
scrutinize
选项还允许您指定要从其收集中排除的数据的类型:
-
‑‑exclude=tasks ‑X tasks
- 从诊断数据收集中排除一个或多个类型的任务,其中 tasks 是要排除的任务的逗号分隔列表。
-
all
:所有默认任务 -
DC
:数据收集器表 -
File
:来自安装过程、数据库和管理工具的日志文件,例如 vertica.log
、dbLog
和adminTools.log
-
VerticaLog
:Vertica 日志 -
CatalogObject
:Vertica 编录元数据,例如系统配置参数 -
SystemTable
:包含有关系统、资源、工作负载和性能的信息的 Vertica 系统表 -
Query
:使用 vsql 连接到数据库的 Vertica 元函数,例如EXPORT_CATALOG()
-
Command
:操作系统信息,例如节点已启动的时间长度
注意
此选项通常仅在 Vertica 客户支持联系人员的指导下使用。 -
‑‑no‑active‑queries
- 省略系统表和数据收集器表中有关当前正在运行的查询的诊断信息。默认情况下,
scrutinize
始终会收集活动查询信息 (‑‑with‑active‑queries
)。 -
‑‑vsql-off ‑v
- 排除用于连接到数据库的
Query
和SystemTable
任务。此选项可帮助您处理升级期间遇到的问题,并且通常在以下情况下使用:-
Vertica 正在运行,但响应缓慢。
-
您尚未创建数据库,但需要帮助解决其他群集问题。
-
2.6 - 上传 scrutinize 结果
scrutinize
提供了将数据上传到 Vertica 客户支持的多个选项。
上传打包
当使用上传选项时,scrutinize
不会将所有输出捆绑到单个 tar 文件中。相反,每个节点将其输出直接发布到指定的 URL,如下所示:
-
上传较小的上下文文件,使客户支持能够查看高层次信息。
-
完成
scrutinize
执行后,上传完整的诊断集合。
上传先决条件
使用上传选项运行 scrutinize
之前:
-
在运行
scrutinize
的数据库管理员用户的路径中安装 cURL 程序。 -
确认群集中的各节点能否直接与 Internet 建立 HTTP 或 FTP 连接。
上传选项
注意
可通过两个选项将scrutinize
输出上传到 Vertica 支持提供的 URL 或 FTP 地址: ‑‑auth-upload
和 ‑‑url
。每个选项对上传进行身份验证的方式有所不同,如下所述。
-
‑‑auth‑upload=url
‑A url
- 通过上传您的客户名称,使用您的 Vertica 许可证向 Vertica 服务器进行身份验证。收到上传的文件之后,客户支持使用此信息验证您的身份。此选项需要具有有效的 Vertica 许可证。
-
‑‑url=url
‑u url
- 需要 url 以包括 Vertica 客户支持提供的用户名和密码。
-
‑‑message=message
‑m message
- 包括带有
scrutinize
输出的消息,其中 message 是文本字符串、文本文件的路径或用于打开要在其中编写消息的输入流的PROMPT
。scrutinize
会读取输入,直至您另起一行键入句点 (.)。这会关闭输入流,并且 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