跳到内容

运行时配置

ArcticDB 提供了各种可在运行时调整的选项。本页详细介绍了最常修改的选项以及如何配置它们。

配置方法

本页详细介绍的所有整数选项都可以通过以下两种方法进行配置。本页列出的所有选项均为整数选项,但日志级别除外,日志级别将在单独的部分中说明。

在代码中

对于整数选项,以下代码片段演示了如何在代码中设置值

from arcticdb.config import set_config_int
set_config_int(setting, value)

其中 setting 是包含设置名称的字符串(例如 VersionMap.ReloadInterval),而 value 是用于设置选项的整数。

环境变量

对于整数选项,可以使用环境变量进行如下设置

ARCTICDB_<setting>_int=<value>

例如 ARCTICDB_VersionMap_ReloadInterval_int=0。请注意,通过环境变量设置时,设置名称中的 . 字符会被替换为下划线。

优先级

如果同时设置了环境变量并调用了 set_config_int,则后者优先。

响应性

配置选项在创建 Library 实例时读取一次,此后不再监测,因此所有选项都应在构造 Library 对象之前配置好。

配置选项

VersionMap.ReloadInterval

ArcticDB 库实例维护一个短时缓存,其中包含它认为是遇到的每个 symbol 的最新版本。默认情况下,此缓存会在 5 秒后失效。

由于此缓存的存在,理论上两个独立的库实例可能在短时间内对 symbol 的最新版本存在分歧。

此缓存旨在减轻存储负载——如果这不是问题,可以通过将此选项设置为 0 来安全地禁用它。

除此之外,ArcticDB 没有客户端缓存。

SymbolList.MaxDelta

当 symbol 列表缓存中磁盘上的对象数量超过 SymbolList.MaxDelta 时,symbol 列表缓存会被压缩。

默认值为 500。

S3Storage.DeleteBatchSize

S3 API 支持 DeleteObjects 方法,通过该方法,单个 HTTP 请求可用于删除多个对象。此参数可用于控制每次请求删除的对象数量。

默认值为 1000。

S3Storage.VerifySSL

控制客户端是否应验证存储的 SSL 证书。如果设置,这将覆盖在创建库时设置的库选项。

值: * 0:不执行 SSL 验证。 * 1:执行 SSL 验证。

S3Storage.UseWinINet

此设置仅在 Windows 操作系统上有效。

控制客户端是使用 WinINet HTTP 后端还是默认的 WinHTTP 后端。

WinINet 可以在 AWS SDK 调试日志中提供更好的错误消息,例如用于诊断 SSL 问题。有关如何设置 AWS SDK 调试日志的说明,请参阅下面的日志配置部分。

当前的 AWS SDK 不允许通过 INet 后端禁用 SSL 验证。

值: * 0:使用 WinHTTP * 1:使用 WinINet

VersionStore.NumCPUThreads 和 VersionStore.NumIOThreads

ArcticDB 使用两个线程池来管理计算资源

  • CPU - 用于 CPU 密集型任务,例如解压缩或过滤数据
  • IO - 用于从底层存储读取/写入数据

默认情况下,ArcticDB 会根据主机上可用的核心数*尝试推断这些线程池的合理大小。CPU 线程池大小默认为主机上的核心数,而 IO 线程池大小默认为 CPU 线程池大小的 1.5 倍。如果这些默认值不适用于特定用例,则可以直接设置这些线程池大小。

如果只设置了 NumCPUThreads,则 NumIOThreads 仍将默认为 NumCPUThreads 的 1.5 倍。

*在 Linux 机器上,核心数会考虑 cgroups。特别是,这意味着在 Kubernetes 中运行的进程会遵守 CPU 限制。

日志配置

ArcticDB 有多个日志流,每个日志流的详细程度可以独立配置。可用的日志流可以在源代码中看到,尽管最常用的日志流位于

  • version - 包含有关正在读取、创建或销毁的版本的信息,以及版本层链表的遍历信息
  • storage - 包含有关与存储设备交互的各个操作的信息(读取对象、写入对象、删除对象等)

可用的日志级别按详细程度降序排列为 TRACEDEBUGINFOWARNERRORCRITICALOFF。默认情况下,所有日志流都设置为 INFO 级别。

有两种方法可以配置日志级别

  1. 设置环境变量ARCTICDB_<流名>_loglevel=<级别>,例如:ARCTICDB_version_loglevel=DEBUG。所有日志流可以通过 ARCTICDB_all_loglevel 一起配置。
  2. 在代码中:调用 arcticdb.config 模块中的 set_log_level。这接受两个可选参数

  3. default_level - 所有日志流的默认级别。应为字符串,例如 "DEBUG"

  4. specific_log_levels - 一个字典,键为日志流名称,值为日志级别,用于覆盖默认设置,例如 {"version": "DEBUG""}

如果同时设置了环境变量并调用了 set_log_level,则后者优先。

还可以通过设置环境变量 ARCTICDB_AWS_LogLevel_int=6 来启用 S3 日志记录,这会将所有 S3 日志输出到当前工作目录中的一个文件。有关更多详细信息,请参阅 AWS 文档

日志目的地

默认情况下,ArcticDB 的所有日志输出到 stderr。这可以使用 set_log_level 方法进行配置。

配置仅输出日志到文件

from arcticdb.config import set_log_level
set_log_level(console_output=False, file_output_path="/tmp/arcticdb.log")

配置日志输出到 stderr 和文件

from arcticdb.config import set_log_level
set_log_level(console_output=True, file_output_path="/tmp/arcticdb.log")

配置日志仅输出到 stderr (这是默认配置)

from arcticdb.config import set_log_level
set_log_level(console_output=True, file_output_path=None)