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
String[] originalIndices = PlannerUtils.planOriginalIndices(physicalPlan);
        computeTargetNodes(rootTask, requestFilter, concreteIndices, originalIndices, ActionListener.wrap(targetNodes -> {
            final ExchangeSourceHandler exchangeSource = exchangeService.createSourceHandler(
                sessionId,
                queryPragmas.exchangeBufferSize(),
                ESQL_THREAD_POOL_NAME
            );
            try (
                Releasable ignored = exchangeSource::decRef;
                RefCountingListener requestRefs = new RefCountingListener(listener.map(unused -> collectedPages))
            ) {
                final AtomicBoolean cancelled = new AtomicBoolean();
                
                exchangeSource.addCompletionListener(requestRefs.acquire());
                
                var computeContext = new ComputeContext(sessionId, List.of(), configuration, exchangeSource, null);
                runCompute(rootTask, computeContext, coordinatorPlan, cancelOnFailure(rootTask, cancelled, requestRefs.acquire()));
                
                
                runComputeOnRemoteNodes(
                    sessionId,
                    rootTask,
                    configuration,
                    dataNodePlan,
                    exchangeSource,
                    targetNodes,
                    () -> cancelOnFailure(rootTask, cancelled, requestRefs.acquire()).map(unused -> null)
                );
            }
        }, listener::onFailure));