跳到主要内容
版本:Latest-4.0

运维

本主题提供了一些与运维相关问题的解答。

可以清理 trash 目录吗?

您可以配置 FE 参数 catalog_trash_expire_second 来指定文件在 FE trash 目录中保留的时间(默认:24 小时)。

BE 参数 trash_file_expire_time_sec 控制 BE 垃圾清理间隔(默认:24 小时)。

在执行 DROP TABLE 或 DROP DATABASE 后,数据首先进入 FE 垃圾箱并保留一天,在此期间可以通过 RECOVER 恢复。之后,它会移动到 BE 垃圾箱,也会保留 24 小时。

tablet 是否有主从关系?如果一些副本丢失,会对查询产生什么影响?

如果表属性 replicated_storage 设置为 true,写入使用主从机制:数据首先写入主副本,然后同步到其他副本。多个副本通常对查询性能没有重大影响。

可以通过监控界面测量任务的 CPU 和内存使用情况吗?

您可以查看 fe.audit.log 中的 cpucostnsmemcostbytes 字段。

在更新表上创建物化视图时返回错误 "The aggregation type of column[now_time] must be same as the aggregate type of base column in aggregate table"。更新表支持物化视图吗?

该错误表明物化视图的聚合类型必须与基表的聚合类型匹配。对于更新表,您只能通过物化视图来调整它们的排序键顺序。 例如,如果基表 tableA 有列 k1k2k3,其中 k1k2 为排序键。当您的查询包含 WHERE k3=x 子句并需要加速前缀索引时,您可以创建一个以 k3 为第一列的物化视图:

CREATE MATERIALIZED VIEW k3_as_key AS
SELECT k3, k2, k1
FROM tableA;

如何获取具有精确时间戳的导入量指标?query_latency 是平均响应时间的指标吗?

表级导入指标可以从以下地址获取:http://user:password@fe_host:http_port/metrics?type=json&with_table_metrics=all

集群级数据可以从以下地址获取:http://fe_host:http_port/api/show_data(增量必须手动计算)。

query_latency 提供百分位查询响应时间。

SHOW PROC '/backends' 和 SHOW BACKENDS 有什么区别?

SHOW PROC '/backends' 从当前 FE 检索元数据,可能会有延迟。而 SHOW BACKENDS 从 Leader FE 检索元数据,是权威的。

StarRocks 有超时机制吗?为什么一些客户端连接会持续很长时间?

有。您可以配置系统变量 wait_timeout(默认:8 小时)来调整连接超时。

示例:

SET GLOBAL wait_timeout = 3600;

可以在一个语句中授权多个表吗?

不可以。不支持类似 GRANT <priv> on db1.tb1, db1.tb2 的语句。

当授予了 ALL TABLES 权限时,可以撤销特定表的权限吗?

不支持子集撤销。建议在数据库或表级别授予权限。

StarRocks 支持表级和行级权限吗?

支持表级访问控制。开源版不支持行级和列级访问控制。

如果主键表没有分区,冷热数据分离仍然有效吗?

不。冷热分离基于分区。

如果数据错误地放置在根目录,可以更改数据存储路径吗?

可以。更新 be.conf 中的 storage_root_path 以添加新磁盘,并使用分号分隔路径。

如何检查 FE 的 StarRocks 版本?

运行 SHOW FRONTENDS; 并检查 Version 字段。

StarRocks 支持带有嵌套子查询的 DELETE 吗?

从 v2.3 开始,主键表支持完整的 DELETE WHERE 语法。 详情请参见 Reference - DELETE

对于动态分区,如果不希望旧分区自动清理,可以简单省略 dynamic_partition.start 吗?

不可以。需要将其设置为一个非常大的值。

如果 BE 机器内存故障需要维护,该怎么办?

Decommission 该 BE。修复后,将其重新添加到集群。

可以强制所有未来的分区默认使用 SSD 吗?

不可以。默认是 HDD。需要手动配置。

添加新 BEs 后,tablets 自动重新平衡。可以立即退役旧 BEs 吗?

可以。无需等待重新平衡完成。最多可以同时退役两个节点。

添加新 BEs 和移除旧 BEs 会影响性能吗?

重新平衡是自动进行的,不应影响正常操作。建议一次移除一个节点。

如何用六个新节点替换六个 BE 节点?

添加六个新的 BE 节点,然后逐个退役旧节点。

为什么在退役节点后不健康的 tablet 数量没有减少?

检查单副本表。如果它们不断重试,其他修复可能会被阻止。

这个 BE 日志是什么意思?"tcmalloc: large alloc xxxxxxxx bytes"

发生了大内存分配请求,通常由大查询引起。检查 be.INFO 中的相应 query_id 以定位 SQL。

添加节点后,tablet 迁移会导致磁盘 I/O 波动吗?

是的,在平衡期间会出现临时的 I/O 波动。

云部署的数据迁移推荐方法是什么?

  • 要迁移单个表,您可以:
    • 创建一个 StarRocks external table,然后使用 INSERT INTO SELECT 从中导入数据。
    • 使用基于 Spark-connector 的程序从源 BE 读取数据,并使用封装的 STREAM LOAD 将数据导入到目标 BE。
  • 要迁移多个表,您可以使用备份和恢复。首先,将数据从源集群备份到远端存储。然后,从远端存储恢复数据到目标集群。
  • 如果您的集群使用 HDFS 作为远端存储,您可以先使用 distcp 迁移数据文件,然后使用 Broker Load 将数据导入到目标集群。

如何解决错误 "failed to create task: disk ... exceed limit usage"?

磁盘已满。扩展存储或清理垃圾。

FE 日志显示 "tablet migrate failed"。如何解决?

可能是因为 storage_root_path 是 HDD,而表属性 storage_medium 设置为 SSD。您可以将表属性设置为 HDD

ALTER TABLE db.table MODIFY PARTITION (*) SET("storage_medium"="HDD");

可以通过仅复制元数据将 FE 迁移到另一台机器吗?

不可以。使用推荐的方法:添加新节点,然后移除旧节点。

为什么一个 BE 上的磁盘使用不均衡(500 GB 99%,2 TB 20%)?为什么没有进行平衡?

平衡假设磁盘大小相同。使用相同大小的磁盘以确保均匀分布。

如果 max_backend_down_time_second 设置为 3600,这是否意味着我必须在一小时内恢复故障 BE?

如果 BE 的停机时间超过此配置,FE 将在其他 BE 上补充副本。当故障 BE 被重新添加到集群时,可能会产生较大的重新平衡成本。

是否有 IDE 工具可以从生产环境中导出表结构和视图?

有。请参见 olapdb-tool

可以在单个 SQL 中设置多个系统变量(例如,超时和并行度)吗?

可以。

示例:

SELECT /*+ SET_VAR(query_timeout=1, is_report_success=true, parallel_fragment_exec_instance_num=2) */ COUNT(1)
FROM table;

排序键中的 VARCHAR 列是否遵循 36 字节前缀限制?

VARCHAR 列根据实际长度进行截断。只有第一列获得短键索引。如果可能,将 VARCHAR 排序键放在第三个位置。

BE 启动失败并显示 "while lock file" 错误。如何处理?

BE 进程仍在运行。终止守护进程并重新启动。

客户端是否需要显式连接到 observer FEs 以进行只读查询?

不需要。写请求会自动路由到 leader FE;observer 提供只读查询服务。

FE 退出并显示 LOG_FILE_NOT_FOUND,原因是打开的文件过多。如何解决?

通过运行 cat /proc/$pid/limits 检查操作系统文件描述符限制,并运行 lsof -n -p $fe_pid>/tmp/fe_fd.txt 检查正在使用的文件描述符。

分区和桶的数量有限制吗?

  • 对于分区,默认限制为 4096(可通过 FE 配置 max_partitions_in_one_batch 进行配置)。
  • 对于桶,没有限制。每个桶的推荐大小为 1 GB。

如何手动切换 FE leader?

停止当前 Leader,将自动选举出新的 leader。

如何用新机器替换三个 FE 节点(1 个 Leader 和 2 个 Follower)?

  1. 向集群中添加 2 个新的 Follower。
  2. 移除 1 个旧 Follower。
  3. 添加最后一个新的 Follower。
  4. 移除剩余的旧 Follower。
  5. 移除旧的 Leader。

动态分区创建未按预期工作。为什么?

动态分区检查每 10 分钟运行一次。此行为由 FE 配置 dynamic_partition_check_interval_seconds 控制。

FE 日志频繁显示 "connect processor exception because,java.io.IOException: Connection reset by peer"。为什么?

可能是客户端断开连接、连接池丢弃或网络问题。检查操作系统的 backlog 指标和网络稳定性。

检查以下指标是否发生变化:

netstat -s | grep -i LISTEN
netstat -s | grep TCPBacklogDrop
cat /proc/sys/net/core/somaxconn

执行 TRUNCATE 语句后,存储空间何时释放?

立即释放。

如何检查桶分布是否均衡?

运行以下命令:

SHOW TABLET FROM db.table PARTITION (<partition_name>);

如何解决错误 "Fail to get master client from cache"?

这是 FE–BE 通信失败。检查 IP 和端口连接性。

如何在 IP 变化时迁移 StarRocks?

推荐使用 FQDN 模式部署。

可以将非分区表转换为分区表吗?

不可以。您可以创建一个新的分区表,并使用 INSERT INTO SELECT 迁移数据。

可以查询历史 SQL 执行记录吗?是否有审计日志?

可以。请参见 fe.audit.log

如何将非分区表转换为 SSD 存储?

运行以下 SQL:

ALTER TABLE db.tbl MODIFY PARTITION (*) SET ("storage_medium"="SSD");

执行 ALTER TABLE ADD COLUMN 后,查询 information_schema.COLUMNS 显示延迟。这正常吗?

是的。ALTER 操作是异步的。通过 SHOW ALTER COLUMN 检查进度。

如果动态分区表的保留期从 366 天更改为 732 天,可以自动创建历史分区吗?

请按照以下步骤操作:

  1. 禁用动态分区。

    ALTER TABLE db.tbl SET  ("dynamic_partition.enable" = "false");
  2. 手动添加分区。

    ALTER TABLE db.tbl ADD PARTITIONS START ("2019-01-01") END ("2019-12-31") EVERY (interval 1 day);
  3. 重新启用动态分区。

    ALTER TABLE db.tbl SET  ("dynamic_partition.enable" = "true"); 

可以监控和警报 Routine Load 任务从 Running 切换到 Paused 吗?

可以。StarRocks 支持 Routine Load 任务的监控指标,并可以连接到警报系统。

如何诊断不健康的副本?

运行以下语句以识别 UnhealthyTablets:

SHOW PROC '/statistic'
SHOW PROC '/statistic/<db_id>'

然后,使用 SHOW TABLET tablet_id 分析 UnhealthyTablets。

如果结果显示两个副本的数据一致,但一个副本的数据不一致——这意味着三个副本中有两个成功完成了写入——这被视为成功写入。然后您可以检查 UnhealthyTablets 中的 tablets 是否已修复。如果它们已修复,则表示存在问题。如果状态正在变化,您可以调整相应表的导入频率。

错误:"SyntaxErrorException: Reach limit of connections"。如何排查?

通过运行以下命令增加每个用户的限制:

ALTER USER 'jack' SET PROPERTIES ('max_user_connections'='1000');

还要检查负载均衡器和空闲连接积累(wait_timeout)。

XFS 和 ext4 如何影响 QPS?

StarRocks 通常在 XFS 上表现更好。

BE 被认为宕机并开始 tablet 迁移需要多长时间?

  1. 当心跳(默认:每 5 秒)失败 3 次时,BE 被标记为不活跃。
  2. 之后,在执行 Clone 之前有一个预期的延迟,为 60 秒。
  3. 然后,副本克隆开始。

如果 BE 后来恢复,其副本将被删除。

新节点上的 tablet 调度速度慢(一次只有 100 个)。如何调整?

调整以下 FE 配置:

ADMIN SET FRONTEND CONFIG ("schedule_slot_num_per_path"="8");
ADMIN SET FRONTEND CONFIG ("max_scheduling_tablets"="1000");
ADMIN SET FRONTEND CONFIG ("max_balancing_tablets"="1000");

BACKUP 操作是串行的吗?似乎只有一个 HDFS 目录在变化

BACKUP 操作是并行的,但上传到 HDFS 使用单个工作线程,由 BE 配置 upload_worker_count 控制。调整时要谨慎,因为它可能会影响磁盘 I/O 和网络 I/O。

如何解决 FE OOM 错误 "OutOfMemoryError: GC overhead limit exceeded"?

增加 FE JVM 内存。

如何解决错误 "Cannot truncate a file by broker"?

  1. 检查 broker 日志中的错误信息。
  2. 检查 BE 警告日志中的错误 "remote file checksum is invalid. remote:**** local: *****"。
  3. 在 broker apache_hdfs_broker.log 中搜索错误 "receive a check path request, request detail",并识别重复文件。
  4. 删除或重命名有问题的远程文件并重试。

如何验证磁盘移除已完成?

运行 SHOW PROC '/statistic' 并确保 UnhealthyTablet 计数为零。

如何修改历史分区的副本数量?

运行以下命令:

ALTER TABLE db.tbl MODIFY PARTITION (*) SET("replication_num"="3");

对于三副本表,如果 BE 节点的磁盘损坏,副本会自动恢复以保持三份吗?

是的,如果有足够的 BE 节点可用。

如果在增加用户限制后错误 "reach limit connections" 仍然持续,如何排查?

检查负载均衡器(ProxySQL、F5)、空闲连接积累,并将 wait_timeout 减少到 2–4 小时。

如果 FE 元数据丢失,整个集群的元数据是否丢失?

元数据驻留在 FE 中。只有一个 FE 时,是不可恢复的。多个 FE 时,可以重新添加故障节点,元数据将被复制。

如何解决导入错误 "INTERNAL_ERROR, FE leader shows NullPointerException"?

添加 JVM 选项 -XX:-OmitStackTraceInFastThrow 并重启 FE 以获取完整的堆栈跟踪。

如何解决错误 "The partition column could not be aggregated column" 在为主键表设置分区列时?

分区列必须是键列。

Rocky the happy otterStarRocks Assistant

AI generated answers are based on docs and other sources. Please test answers in non-production environments.