Starrocks 关于 trace 命令的说明
背景
本文基于Starrocks 3.5.5
关于trace命令的话, 有如下使用方式:
TRACE { TIMES | VALUES | LOGS | ALL } [ <module> ] <query_statement>
module的选项有:BASE, MV, OPTIMIZER, SCHEDULE, EXTERNAL
这几个模块会在ConnectProcessor.handleQuery
中Tracers.init(ctx, parsedStmt.getTraceMode(), parsedStmt.getTraceModule())
进行初始化,也就是说如果你选择了 OPTIMIZER
模块,那就是Tracers 中初始化为OPTIMIZER
,所有在SeriallyTaskScheduler
类中的Tracers.Module.OPTIMIZER
想关的指标信息就会记录下来,如:
OptimizerTask task = tasks.pop();
context.getOptimizerContext().setTaskContext(context);
try (Timer ignore = Tracers.watchScope(Tracers.Module.OPTIMIZER, task.getClass().getSimpleName())) {task.execute();
}
这些在内存中需要保留的信息只是需要跟踪的信息,而不是包括所有的module,保证了FE端内存的使用率不至于太高,从而引发OOM