运维
本主题提供了一些与运维相关问题的解答。
可以清理 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 中的 cpucostns 和 memcostbytes 字段。
在更新表上创建物化视图时返回错误 "The aggregation type of column[now_time] must be same as the aggregate type of base column in aggregate table"。更新表支持物化视图吗?
该错误表明物化视图的聚合类型必须与基表的聚合类型匹配。对于更新表,您只能通过物化视图来调整它们的排序键顺序。
例如,如果基表 tableA 有列 k1、k2、k3,其中 k1 和 k2 为排序键。当您的查询包含 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 排序键放在第三个位置。