RonJay
04/02/2026, 4:51 AMRocky
04/02/2026, 4:51 AMPredicateColumnsDaemonThread?
The PredicateColumnsDaemonThread is a background service in the StarRocks Frontend (FE).
Since StarRocks v3.5.0, a feature called Predicate Column Statistics was introduced. Instead of collecting statistics for every single column in a very wide table (which can be expensive), StarRocks identifies "Predicate Columns"—columns frequently used in WHERE clauses, JOIN conditions, GROUP BY, or DISTINCT operations.
* Its Role: This daemon thread is responsible for periodically synchronizing and persisting these identified predicate columns from the FE's memory into the internal _statistics_.predicate_columns table.
* The Error: The message daemon thread got exception means an unexpected error occurred during one of these background cycles. This is often caused by:
* Interruption during the persistence process.
* Issues accessing or writing to the internal _statistics_ database (e.g., if the cluster is under heavy load or the metadata is temporarily unavailable).
* A bug in specific versions when handling a high volume of column metadata.
2. What is an "FE Pod"?
In a Kubernetes deployment, an FE pod is a containerized instance of the StarRocks Frontend (FE).
The FE is the "brain" of the cluster. Its main responsibilities include:
* Metadata Management: Storing and managing metadata for databases, tables, and partitions.
* Query Planning: Parsing SQL queries and generating optimized execution plans.
* Query Scheduling: Distributing the execution fragments to the Backend (BE) nodes.
* Connection Management: Handling client connections (via MySQL protocol).
In your Kubernetes environment, you typically see pods named something like starrockscluster-sample-fe-0. If an FE pod logs the error you mentioned, it usually indicates a background task failure within that specific node.
3. Recommended Troubleshooting
While this specific daemon exception often doesn't crash the FE (the thread usually tries to restart in the next cycle), you should check the following to ensure cluster health:
1. Check FE Logs for Stack Traces: Look at the fe.log or fe.warn.log inside the pod right after that error line. It will usually contain a Java stack trace explaining why it failed (e.g., a NullPointerException or a CommunicationsException).
bash
kubectl logs <fe-pod-name> | grep -C 5 "PredicateColumnsDaemonThread"
2. Verify the Statistics Table: Check if you can query the internal statistics table:
sql
SELECT * FROM _statistics_.predicate_columns LIMIT 10;
3. Check FE Configs: If the errors are frequent and causing performance issues, you can temporarily disable this collection (though not recommended long-term as it helps the Optimizer) using:
sql
ADMIN SET FRONTEND CONFIG ("enable_predicate_columns_collection" = "false");
If the error persists and matches a specific pattern in your logs, feel free to share the stack trace, and I can take a deeper look!
References
• using_starrocks/Cost_based_optimizer.md