Performing any long running task or CPU intensive work on transport_worker threads is problematic. This is typically very bad for cluster stability.

This issue has been filed to examine the usage of transport_worked threads by ESQL, with the intention of "offloading" as much as possible, including deserialising large(ish) amounts of data.
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plugin/ComputeService.java
ESQL_THREAD_POOL_NAME,
            DataNodeRequest::new,
            new DataNodeRequestHandler()
        );
        this.driverRunner = new DriverTaskRunner(transportService, threadPool.executor(ESQL_THREAD_POOL_NAME));
        this.exchangeService = exchangeService;
        this.enrichLookupService = enrichLookupService;
    }
    public void execute(
        String sessionId,
        CancellableTask rootTask,
        PhysicalPlan physicalPlan,
        EsqlConfiguration configuration,
        ActionListener<List<Page>> listener
    ) {
        Tuple<PhysicalPlan, PhysicalPlan> coordinatorAndDataNodePlan = PlannerUtils.breakPlanBetweenCoordinatorAndDataNode(
            physicalPlan,
            configuration
        );
        final List<Page> collectedPages = Collections.synchronizedList(new ArrayList<>());
        PhysicalPlan coordinatorPlan = new OutputExec(coordinatorAndDataNodePlan.v1(), collectedPages::add);
        PhysicalPlan dataNodePlan = coordinatorAndDataNodePlan.v2();
        var concreteIndices = PlannerUtils.planConcreteIndices(physicalPlan);
        QueryPragmas queryPragmas = configuration.pragmas();
        if (concreteIndices.isEmpty()) {
            var computeContext = new ComputeContext(sessionId, List.of(), configuration, null, null);
            runCompute(rootTask, computeContext, coordinatorPlan, listener.map(unused -> collectedPages));
            return;
        }
        QueryBuilder requestFilter = PlannerUtils.requestFilter(dataNodePlan);