Travis (YaaaDingus)
08/18/2026, 6:35 PMCANCEL LOAD FROM ... on the stuck tasks it just said the load job doesn't exist. So these are just completely orphaned transactions that never go away.
I'd really like a human (ideally a maintainer) to chime in on this, because Rocky hasn't been able to help with this and it seems like it might be a bug.Travis (YaaaDingus)
08/18/2026, 6:55 PMRocky
08/18/2026, 6:55 PMTravis (YaaaDingus)
08/18/2026, 6:55 PMCANCEL LOAD FROM ... on the stuck tasks it just said the load job doesn't exist. So these are just completely orphaned transactions that never go away.Rocky
08/18/2026, 6:55 PMCOMMITTED or PREPARED state and are failing to reach VISIBLE (Finish) due to the earlier OOM events or internal thread pool rejections.
To resolve these "un-killable" orphaned transactions, follow these steps in order:
1. Identify the Stuck Transaction Details
Use the SHOW PROC command to get the exact TransactionId and Label for each stuck transaction. This is more reliable than SHOW LOAD when jobs are missing.
sql
-- Replace <db_id> with your database ID (found via SHOW PROC '/transactions')
SHOW PROC '/transactions/<db_id>/running';
Look for transactions where the CreateTime is very old. Note the TransactionId and the Label.
2. Try Canceling by Label (Even if Job is Deleted)
Sometimes CANCEL LOAD fails if you reference a job name that no longer exists, but it may still work if you target the specific Label associated with the orphaned transaction.
sql
CANCEL LOAD FROM <db_name> WHERE LABEL = "<stuck_label>";
3. Clear Stuck Compaction Transactions
If you see transactions with LoadJobSourceType as COMPACTION (often in shared-data/lakehouse clusters or specific versions), you can manually cancel them:
sql
-- This command is specifically for compaction tasks
CANCEL COMPACTION WHERE TXN_ID = <txn_id>;
4. Force Label and Transaction Cleanup
You can temporarily tune the metadata cleaner to be extremely aggressive. This can sometimes trigger the FE to purge orphaned entries that are past their TTL but haven't been picked up.
sql
-- Set the retention time to 0 to force a cleanup of historical and orphaned metadata
ADMIN SET FRONTEND CONFIG ("label_keep_max_second" = "0");
ADMIN SET FRONTEND CONFIG ("transaction_clean_interval_second" = "1");
Wait a few minutes, then check SHOW PROC '/transactions/...' again. Remember to set these back to their defaults (typically 10800 and 30 respectively) afterward.
5. Restart the Leader FE (Most Effective)
If the transactions persist for months and survive configuration changes, they are likely stuck in the FE's memory-resident TransactionManager.
* Restart the Leader FE node.
* When a new Leader is elected, it reloads metadata from the image and Edit Logs. During this recovery phase, it should re-validate all RUNNING transactions. If the associated job or session is long gone, the FE recovery logic typically aborts these tasks.
6. Destructive Recovery (Last Resort)
If the stuck transactions are blocking compaction on a specific partition and you cannot clear them via FE restart:
1. Backup the data (e.g., INSERT INTO ... SELECT to a temporary table).
2. Truncate or Drop/Recreate the Partition: This clears all metadata associated with that partition, including the transaction locks.
3. Use FORCE: If dropping a database/table fails because of these transactions, use DROP TABLE <name> FORCE;.
Why this happened?
This usually occurs because StarRocks guarantees exactly-once semantics for Routine Load. If the FE crashes (OOM) at the exact moment a transaction is committing but before it's published, the state can become "orphaned." In some versions, if the internal PublishVersion thread pool is full, these transactions stay in COMMITTED indefinitely.
Recommended follow-up: Ensure your FE JVM heap is sufficiently large and check max_running_txn_num_per_db (default 100) to ensure you aren't hitting limits that exacerbate the queueing.
References
• sql-reference/sql-statements/loading_unloading/routine_load/SHOW_ROUTINE_LOAD.mdRocky
08/18/2026, 6:55 PMTravis (YaaaDingus)
08/18/2026, 6:59 PMRocky
08/18/2026, 7:00 PMtransaction_clean_interval_second. In StarRocks, that parameter is immutable, meaning it cannot be changed dynamically via ADMIN SET FRONTEND CONFIG. It must be set in your fe.conf file and requires an FE restart to take effect.
Since these transactions have persisted for two months despite you deleting the jobs, they are likely "orphaned" in the FE's memory-resident Transaction Manager. Because they aren't in a FINISHED or CANCELLED state, the background cleaner (which uses the intervals mentioned before) ignores them.
Here is the step-by-step path to clearing these 83 orphaned transactions:
1. Identify the Exact State
First, determine the state of these transactions. This will dictate the next command.
sql
-- Replace <db_id> with your database ID
SHOW PROC '/transactions/<db_id>/running';
Look at the State column. It will likely be PREPARED or COMMITTED.
2. Force Abort for Compaction Transactions
For the transactions with LoadJobSourceType as COMPACTION, use the dedicated cancellation command (must be run on the Leader FE):
sql
CANCEL COMPACTION WHERE TXN_ID = <txn_id>;
Note: If the CommitTime is already set in SHOW PROC '/compactions', this command may not work, and a restart is required.
3. Attempt Rollback via REST API (for Routine Load/Stream Load)
Since CANCEL LOAD is failing because the job is gone, you can try to trigger a rollback directly via the Stream Load transaction interface using the Label found in the SHOW PROC output:
bash
curl --location-trusted -u <user>:<pass> \
-H "label:<stuck_label>" \
-H "db:<db_name>" \
-XPOST http://<fe_host>:<fe_http_port>/api/transaction/rollback
If the FE still has the transaction in its memory map, this API call often forces an abort even when the high-level job metadata is missing.
4. The "Nuclear" Option: Restart the Leader FE
If the transactions are months old and survive the steps above, they are likely stuck in the FE's internal EditLog or memory and are failing to progress due to a lack of an associated "Job" object to trigger their completion.
The most effective way to clear orphaned metadata is to restart the Leader FE.
1. When the FE restarts, it reloads the metadata image.
2. During the "Recovery" phase, the new Leader FE scans all RUNNING/PREPARED transactions.
3. If it finds a transaction whose corresponding Routine Load job no longer exists, the recovery logic should automatically abort it to maintain consistency.
5. Aggressive Label Purge (to clean up the "Job doesn't exist" errors)
To clear the metadata of the deleted jobs themselves so you can reuse labels:
sql
-- This IS mutable and can be set via SQL
ADMIN SET FRONTEND CONFIG ("label_keep_max_second" = "60");
Wait about 5-10 minutes for the background cleaner to run, then check if the orphaned labels are gone. Be sure to set this back to the default (259200, which is 3 days) afterward.
Why did this happen?
This is typically caused by the FE crashing (OOM) while a transaction was in the COMMITTED state. The transaction was written to the Edit Log but the "Publish Version" task (which makes data visible) was lost or the thread pool was full. Because the Routine Load job was later deleted, there was no "owner" to retry the publish or abort the task.
Recommendation: After clearing these, check your FE JVM heap size. For 61 concurrent Kafka topics, ensure you have at least 8GB-16GB of heap to handle the metadata overhead and prevent future OOMs.
References
• knowledge/admin_and_operation/shared_data_compaction.md
• faq/shared_data_faq.md
• administration/management/compaction.mdTravis (YaaaDingus)
08/18/2026, 7:01 PMRocky
08/18/2026, 7:01 PMCOMMITTED state but cannot transition to VISIBLE because the job metadata that would normally trigger the "Publish Version" task is missing.
Because StarRocks is designed for exactly-once semantics, transactions in the COMMITTED state typically *cannot be aborted*—the system expects them to finish. If the FE restart didn't clear them, they are persisted in the BDBJE edit logs.
Here are the specific ways to force-clear these transactions:
1. Identify the Transaction State
Run the following to confirm if they are COMMITTED or `PREPARED`:
sql
-- Get your Database ID first
SHOW PROC '/transactions';
-- View running transactions for that DB
SHOW PROC '/transactions/<db_id>/running';
* If `PREPARED`: They should eventually timeout or can be aborted via the REST API.
* If `COMMITTED`: They are stuck waiting for a "Publish" signal that isn't coming.
2. Manual Rollback via Stream Load API (Most Successful)
Even though these were Routine Load transactions, the TransactionManager handles them similarly to Stream Loads. You can try to force an abort/rollback using the specific Label found in the SHOW PROC output:
bash
curl --location-trusted -u <user>:<pass> \
-H "label:<stuck_label>" \
-H "db:<db_name>" \
-XPOST http://<fe_host>:<fe_http_port>/api/transaction/rollback
Try this for one or two labels first to see if the transaction disappears from the SHOW PROC list.
3. Clear Compaction Transactions
For those marked as COMPACTION, use the internal cancellation command (must be on the Leader FE):
sql
-- Note: Only works if CommitTime is NULL in 'SHOW PROC /compactions'
CANCEL COMPACTION WHERE TXN_ID = <txn_id>;
If this fails, and because you mentioned they are blocking other compactions, you may need to restart all BE/CN nodes. Compaction tasks are partially managed in BE memory; a BE restart will fail the task, allowing the FE to eventually mark the transaction as failed.
4. Force Metadata Cleanup (Staging Env Only)
If the REST API and restarts do not work, the transactions are tied to specific `TableId`s or `PartitionId`s. Dropping the table/partition is the only way to break the lock in the metadata manager.
1. Drop the affected Partition/Table with FORCE:
sql
DROP TABLE <table_name> FORCE;
Using FORCE bypasses the Trash bin and should trigger a cleanup of all associated metadata, including orphaned transaction locks.
2. Truncate: If you want to keep the table, try TRUNCATE TABLE <table_name>. While usually blocked by active transactions, in some versions this can force a "reset" of the versioning metadata.
5. Check "Publish Version" Thread Pool
If you see a lot of COMMITTED transactions, your FE may have a full task pool. Check your fe.log for:
Task java.util.concurrent.FutureTask@... rejected from agent-task-pool
If found, increase the pool size in fe.conf and restart:
conf
# Add/Update in fe.conf
async_load_task_pool_size = 2048
Why CANCEL LOAD failed
The CANCEL LOAD command checks the LoadManager for a job name. Since you deleted the Routine Load jobs, that manager returns "Job not found" before it even looks at the TransactionManager. This is why the transactions appear orphaned.
Final Recommendation: If this is a staging environment and the manual rollback API doesn't work, the most reliable path is to Drop the affected tables with the FORCE keyword and recreate them. This will purge the internal metadata IDs that the stuck transactions are clinging to.
References
• administration/management/compaction.md
• loading/SQL_transaction.mdTravis (YaaaDingus)
08/18/2026, 7:02 PMRocky
08/18/2026, 7:02 PM8030.
This is controlled by the http_port parameter in your fe.conf file. You can verify which port your specific cluster is using by checking that file or by running:
bash
grep "http_port" fe/conf/fe.conf
To use the rollback API I mentioned earlier, the command would look like this (assuming the default port):
bash
curl --location-trusted -u <user>:<pass> \
-H "label:<stuck_label>" \
-H "db:<db_name>" \
-XPOST http://<fe_leader_host>:8030/api/transaction/rollback
Other common FE ports for reference:
* 9030: MySQL Client Port (query_port)
* 9020: Thrift RPC Port (rpc_port)
* 9010: BDBJE Edit Log Port (edit_log_port)
References
• administration/management/FE_configuration.md
• deployment/environment_configurations.md
• administration/http_interface.mdTravis (YaaaDingus)
08/18/2026, 7:03 PMRocky
08/18/2026, 7:03 PMfe.conf file, you can access the FE HTTP server at http://<fe_host>:8030.
Other default FE ports:
* 8030: HTTP Server (http_port)
* 9030: MySQL Client/Query Port (query_port)
* 9020: Thrift RPC Port (rpc_port)
* 9010: BDBJE Edit Log Port (edit_log_port)
* 8443: HTTPS Server (https_port, introduced in v4.0)
References
• administration/management/FE_configuration.md
References
• administration/management/FE_configuration.md
• administration/management/BE_configuration.mdTravis (YaaaDingus)
08/18/2026, 7:05 PMRocky
08/18/2026, 7:06 PMCOMMITTED state has already successfully written data to the BE nodes and recorded that success in the FE's metadata.
Because StarRocks guarantees exactly-once semantics, it does not allow you to "abort" a transaction that has already been confirmed as committed. It can only move forward to the VISIBLE state.
If the transaction is orphaned (stuck COMMITTED after the Routine Load job was deleted) and restarting the Leader FE didn't clear it, follow these steps:
1. Identify the Blockage (FE Logs)
The PublishVersionDaemon in the FE is responsible for moving transactions from COMMITTED to VISIBLE. If it's stuck, there is an error in the publish phase.
Search your fe.log for the transaction ID:
bash
grep "6230171" fe.log
Common issues found here:
* Task rejected from agent-task-pool: The FE's thread pool for sending tasks to BEs is full.
* publish version timeout: The BEs are not responding to the publish request within the timeout.
2. Restart the BE Nodes
Restarting the FE only restarts the manager; however, the actual "Publish Version" tasks are often stuck in the memory of the BE/CN nodes.
* Action: Restart all BE/CN nodes in the cluster. This clears the agent task queues on the worker side and forces the FE to re-issue the publish tasks upon the next daemon cycle.
3. Check for Version Gaps
If you have multiple stuck transactions, it might be because a lower version transaction is failing, blocking all subsequent versions for that partition.
Run this to see the state of tablets for the target table:
sql
SHOW TABLET FROM <table_name>;
-- Look for 'Version' and 'LstPublishTime' to see if some tablets are lagging.
4. Version-Specific Fixes
* If you are on v4.1+ (Shared-data/Lake mode):
StarRocks introduced a specific command to unwedge these exact scenarios:
sql
ADMIN SKIP COMMITTED TRANSACTION <txn_id>;
This forces the system to skip the publish phase for that specific transaction.
* If you are on an older version:
There is no "skip" command. You must resolve why the BE cannot publish (often by restarting BEs or increasing thread pools).
5. The "Nuclear" Option (Metadata Cleanup)
If the transaction is permanently stuck and preventing other operations (like schema changes or compactions), the only way to clear it without the ADMIN SKIP command is to destroy the metadata it is attached to.
* Force Drop:
sql
DROP TABLE <table_name> FORCE;
Note: Using the FORCE keyword is critical; it bypasses the Trash bin and immediately purges the table IDs from the metadata manager, which should force-clear any associated orphaned transactions.
Recommendation: Try restarting all BEs first. If that fails and you are not on v4.1, check your FE logs for the specific error reason for txn 6230171 to see if it's a simple thread pool exhaustion issue.
References
• administration/management/BE_configuration.md
• loading/SQL_transaction.md
• administration/management/FE_configuration.md
• sql-reference/System_variable.md
• administration/management/monitoring/metrics.mdTravis (YaaaDingus)
08/18/2026, 7:08 PMRocky
08/18/2026, 7:08 PMADMIN SKIP COMMITTED TRANSACTION command returns "Query OK" but the transaction still appears stuck, it is likely due to how the command works and the sequence of version publishing in StarRocks.
Here is what is happening and how to resolve it:
1. It converts the transaction to a "No-Op"
When you "skip" a committed transaction, StarRocks does not delete it or mark it as aborted. Instead, it performs a no-op publish.
* The Result: The transaction will transition from COMMITTED to VISIBLE.
* The Data: All data associated with that transaction ID is discarded.
* The Version: The table's version still advances by 1, but no new data is actually added to the tablets.
Action: Check the current status of the transaction. It should now (or shortly) show as VISIBLE instead of `COMMITTED`:
sql
SHOW TRANSACTION WHERE id = 6230171;
2. Check for Sequential Blockage (The "Version Gap")
StarRocks must publish versions in strict sequential order. If you have multiple transactions for the same partition, and a previous (older) transaction is still stuck in the COMMITTED state, skipping the newer one will not clear the queue.
* Action: Run the following to see if there are older transactions for the same table:
sql
SHOW PROC '/transactions';
-- Or check the specific table/partition:
SHOW TABLET FROM <table_name>;
If there is any transaction with a smaller ID or an older timestamp that is still COMMITTED, you must skip or resolve that one first.
3. Verification of the "Skip" Flag
The ADMIN SKIP command flags the transaction in the FE's memory. The PublishVersionDaemon must then pick up this flag and execute the metadata update.
* Check FE Logs: Search for the transaction ID to see if the skip task was rejected or if there was an error writing the "no-op" metadata:
bash
grep "6230171" fe.log
* Check Configuration: Ensure this "escape hatch" is actually enabled in your session or global config:
sql
ADMIN SHOW FRONTEND CONFIG LIKE 'enable_admin_skip_committed_txn';
(It must be true for the command to take effect).
4. Why it might still be "stuck"
If the status is still COMMITTED after several minutes:
* Thread Pool Exhaustion: The FE's agent-task-pool might be full, preventing even the "no-op" task from being sent. Restarting the FE Leader can clear the task queue.
* Metadata Sync Issue: In shared-data (Cloud Native) mode, the FE might be struggling to write the new metadata file to your object storage (S3/OSS/HDFS). Check your storage health and the FE logs for CloudNativeIndex or LakeService errors.
Summary of next steps:
1. Verify if the status changed to VISIBLE using SHOW TRANSACTION.
2. If it's still COMMITTED, check if there is an older transaction for the same table that needs skipping first.
3. Restart the FE Leader to force a refresh of the PublishVersionDaemon.
References
• loading/SQL_transaction.md
• sql-reference/sql-statements/loading_unloading/SHOW_TRANSACTION.md
• administration/management/FE_configuration.md
• administration/management/BE_configuration.md
• administration/management/monitoring/metrics.md
• administration/Meta_recovery.md
• loading/Stream_Load_transaction_interface.md
• administration/management/compaction.md
ReferencesTravis (YaaaDingus)
08/18/2026, 7:10 PMRocky
08/18/2026, 7:10 PMNoOpPublish is set to true but the transaction remains in the COMMITTED state, the most likely reason is that StarRocks publishes versions in strict sequential order.
Even if you have skipped a transaction, it cannot become VISIBLE until every transaction with a smaller ID (or an earlier commit time) for that same partition has also reached the VISIBLE state.
Follow these steps to unblock the sequence:
1. Find the "Blocker" Transaction
Check if there are older transactions for the same table/partition that are also stuck in COMMITTED.
sql
-- Check all transactions for this database
SHOW PROC '/transactions';
Look for any transaction where:
* Status is COMMITTED.
* Transaction ID is smaller than 6230171.
* Table/Partition is the same as the one you are trying to fix.
Action: If you find an older stuck transaction, you must run ADMIN SKIP COMMITTED TRANSACTION <older_txn_id> on that one first. The "skip" will propagate up the chain once the oldest one is resolved.
2. Check for FE Thread Pool Exhaustion
The PublishVersionDaemon in the FE Leader is responsible for moving these transactions to VISIBLE. If its task pool is full, it won't even process the "No-Op" skip.
* Search FE Logs: Look for "rejected from agent-task-pool" or "publish version timeout" in your fe.log.
* Temporary Fix: Restart the FE Leader node. This clears the internal task queue and forces the daemon to restart the publish sequence for all committed transactions.
3. Verify BE/Storage Health (Lake Mode)
Since ADMIN SKIP is a feature for Shared-data (Lake) tables, a "No-Op Publish" still requires writing a new metadata file to your object storage (S3/OSS/HDFS).
* If the FE cannot write to the object storage or communicate with the lake_service on the BEs, the version will not advance.
* Check BE Logs: Look for errors related to lake_service or publish_version.
* Action: Restart the BE nodes to ensure the agent tasks are not hung on the worker side.
4. Forced Sequential Skip
If you have a long list of stuck transactions, skipping just the one you care about won't work. You need to skip the oldest one first:
1. Identify the transaction with the minimum ID currently in COMMITTED for that table.
2. Skip it.
3. Wait 15-30 seconds.
4. Check if the next transaction in the list automatically moves to VISIBLE.
Summary
The state won't change until all preceding transactions for that partition are either successfully published or also skipped. If you have verified there are no older blockers, restarting the FE Leader is the most effective way to "nudge" the metadata manager into processing the skip.
References
• loading/SQL_transaction.md
• sql-reference/sql-statements/loading_unloading/SHOW_TRANSACTION.md
• administration/management/FE_configuration.md
• administration/management/BE_configuration.md
• administration/management/monitoring/metrics.md
• administration/Meta_recovery.md
• loading/Stream_Load_transaction_interface.md
• administration/management/compaction.md
• sql-reference/System_variable.md
• faq/shared_data_faq.md
• knowledge/trouble_shooting/fe_deadlock_problems.mdRocky
08/18/2026, 7:10 PMTravis (YaaaDingus)
08/18/2026, 7:13 PMRocky
08/18/2026, 7:14 PMADMIN SKIP COMMITTED TRANSACTION command has specific limitations that explain why it may not be working for your INSERT_STREAMING (Routine Load) transaction:
1. It only supports Shared-Data (Cloud Native) Tables
The ADMIN SKIP command was introduced in v4.1 as an emergency escape hatch specifically for Shared-data (Lake) tables.
* If your table is a standard OlapTable (Local Storage): This command is not supported. StarRocks does not currently have a "skip" mechanism for local storage tables because the data is already physically written to the BEs; skipping would cause permanent data inconsistency that the local metadata cannot resolve via "No-Op."
* How to check: Run SHOW CREATE TABLE <name>;. If it does not contain a PROPERTIES ("storage_volume" = "..."), it is likely a local table.
2. Transaction Type Support
According to the StarRocks v4.1 technical specifications, the skip command currently only supports:
* Load transactions (which includes Routine Load/INSERT_STREAMING)
* Lake-compaction transactions
* It does NOT support ALTER or SCHEMA_CHANGE transactions yet.
3. Why it "Succeeds" but doesn't clear
If you are on a Shared-data cluster and the command returned "Query OK" and set NoOpPublish: true, but the state is still `COMMITTED`:
* The Sequential Blocker: StarRocks cannot publish version N until version N-1 is visible. If you have an older transaction (smaller ID) for the same partition that is also stuck, your INSERT_STREAMING txn will stay COMMITTED indefinitely. You must find the oldest stuck transaction for that table and skip it first.
* Routine Load Management: Since your txn is from a Routine Load job (optimus_dbc_...), the Job itself might be trying to "re-commit" or "re-publish" the same label.
* Action: PAUSE the Routine Load job first, then run the skip command on the txn ID.
4. How to resolve if you can't use "SKIP"
If you are on an older version or a local-storage table where ADMIN SKIP isn't an option, use these manual steps:
1. Check FE Thread Pools:
The FE can get stuck if the publish task pool is full. Look at fe.log for:
Task rejected from agent-task-pool
If you see this, restart the FE Leader. This is the most common way to "un-stick" a committed transaction that isn't moving to visible.
2. Restart BEs:
Sometimes a BE node is "holding" the transaction in its local memory but failing to report the success back to the FE. Restarting all BEs clears these hung tasks.
3. The Metadata Cleanup (Last Resort):
If the transaction is blocking all other loads and you cannot clear it:
sql
DROP TABLE <table_name> FORCE;
This removes the table and all its metadata from the FE, effectively purging the stuck transaction entry. You can then recreate the table and resume the Routine Load.
Summary Recommendation:
First, verify if you have an older transaction stuck (check SHOW PROC '/transactions'). If not, restart your FE Leader to force the PublishVersionDaemon to retry the state transition.
References
• faq/loading/Routine_load_faq.md
• loading/RoutineLoad.md
• sql-reference/sql-statements/loading_unloading/routine_load/SHOW_ROUTINE_LOAD.mdTravis (YaaaDingus)
08/18/2026, 7:14 PMTravis (YaaaDingus)
08/18/2026, 7:15 PMRocky
08/18/2026, 7:15 PMADMIN SKIP COMMITTED TRANSACTION command is the correct "emergency" tool, but it often fails to move the state from COMMITTED to VISIBLE if the transaction sequence is broken.
Even with NoOpPublish: true, the transaction will stay COMMITTED if there is a version gap. Here is how to resolve it:
1. Check for the "Version Gap" (Most Common)
In shared-data mode, StarRocks must publish versions in strict sequential order. If Transaction ID 100 is stuck, Transaction ID 101 (your INSERT_STREAMING txn) cannot become visible, even if you mark it as a "Skip/No-Op."
* Action: Run this to find the oldest stuck transaction for that database:
sql
SHOW PROC '/transactions';
Sort by TransactionId or CommitTime. If there is any transaction with a smaller ID that is still in the COMMITTED state, you must run the ADMIN SKIP command on that older ID first. The queue will then "unzip" and process your newer skip.
2. Restart the FE Leader
The PublishVersionDaemon is a background thread on the FE Leader that processes these skips. If it has encountered an internal error or the task pool is full, it may stop processing the "No-Op" flags.
* Action: Restart the FE Leader. This clears the internal task queue and forces the daemon to scan for all NoOpPublish=true transactions and move them to VISIBLE.
3. Pause the Routine Load Job
If your INSERT_STREAMING transaction is part of an active Routine Load, the job might be attempting to retry or keep the transaction "active" in a way that conflicts with the skip.
* Action:
1. PAUSE ROUTINE LOAD FOR <job_name>;
2. Run ADMIN SKIP COMMITTED TRANSACTION <txn_id>;
3. Wait for the state to change to VISIBLE.
4. RESUME ROUTINE LOAD FOR <job_name>;
4. Check for v4.1.0/v4.1.1 Known Issues
If you are on version 4.1.0 or 4.1.1, there were known bugs where certain INSERT_STREAMING (multi-table or high-concurrency) transactions would not transition correctly even after a commit.
* Action: Check your version with SELECT version();. If you are on an early 4.1.x release, upgrading to v4.1.3+ is highly recommended as it contains specific fixes for transactions stuck at `COMMITTED`/`PREPARING` in shared-data clusters.
5. Verify Frontend Configuration
Ensure the "escape hatch" is globally enabled. If this is false, the command may return "OK" but the FE will ignore the flag during the publish cycle:
sql
ADMIN SHOW FRONTEND CONFIG LIKE 'enable_admin_skip_committed_txn';
-- If false, set it to true:
ADMIN SET FRONTEND CONFIG ("enable_admin_skip_committed_txn" = "true");
Summary of the "Hard Reset"
If the above fails, the most reliable sequence is:
1. Identify the earliest stuck TxnID for the table.
2. Skip it.
3. Restart the FE Leader.
4. If it remains stuck after 5 minutes, you may need to DROP TABLE <name> FORCE and recreate it, as this is the only way to completely purge the version metadata from S3/for an S3-backed table's lifecycle.
References
• faq/shared_data_faq.md
• knowledge/usage/load/shared_data_batch_ingestion.mdTravis (YaaaDingus)
08/18/2026, 7:22 PMRocky
08/18/2026, 7:22 PMNoOpPublish is already set to true, the system has acknowledged your skip request, but the "Publish" thread is currently unable to finalize the state change.
In StarRocks v4.1.x (Shared-data/Lake mode), a transaction stuck in COMMITTED with NoOpPublish=true almost always indicates one of the following two specific blockers:
1. The "Sequential Version" Block (Most Likely)
StarRocks cannot publish version $N$ if version $N-1$ is not yet VISIBLE. Because INSERT_STREAMING (Routine Load) generates many high-frequency transactions, it is common for a single failed transaction to create a "traffic jam" behind it.
How to verify:
Run the following and look at the TransactionId column:
sql
SHOW PROC '/transactions';
* Identify your stuck Transaction ID (let's say it's 1005).
* Look for any transaction with an ID smaller than yours (e.g., 1003 or 1004) for the same table that is still in COMMITTED or PREPARING state.
* Action: You must apply ADMIN SKIP COMMITTED TRANSACTION to the oldest stuck transaction first. Once the oldest one moves to VISIBLE, the others will follow like dominoes.
2. FE Agent-Task Pool Exhaustion
In v4.1.4, there is a known issue where if the FE's internal agent-task-pool is full, the PublishVersionDaemon cannot submit the task to mark the transaction as visible—even if it's a "No-Op."
How to verify:
Check your fe.log on the Leader FE for this specific error:
WARN ... Task ... rejected from agent-task-pool
* Action: If you see this, you must restart the Leader FE. This clears the task queue and restarts the publish cycle.
3. Check for Concurrent Schema Change
In Lake mode, if a SCHEMA_CHANGE (Alter table) is running or stuck in FINISHED_REWRITING, it holds a lock on the table's version metadata. This blocks all INSERT_STREAMING transactions from moving to VISIBLE.
* Action: Check SHOW ALTER TABLE COLUMN;. If a job is stuck, try to CANCEL ALTER TABLE COLUMN FROM <table_name>;.
4. Special Note on Routine Load (INSERT_STREAMING)
Routine Load jobs manage their own transaction lifecycle. Sometimes the job metadata on the FE gets out of sync with the Global Transaction Manager (GTM).
* Action:
1. PAUSE ROUTINE LOAD FOR <job_name>;
2. Check if the txn is still COMMITTED. If it is, and you've already set NoOpPublish=true, restart the FE.
3. Once the transaction is gone or VISIBLE, RESUME the load.
Summary Checklist for 4.1.4:
1. Is there a smaller TxnID stuck? If yes, skip that one first.
2. Restart the Leader FE. (This resolves 90% of "stuck in Committed" issues in v4.1.x by clearing the thread pool).
3. Verify Object Storage connectivity. Ensure the FE can still write to S3. If the FE cannot write the new version's metadata file to S3, it will never reach VISIBLE.
If the transaction persists after an FE restart and there are no older blockers, it may be a metadata inconsistency. At that point, the most stable path is to DROP TABLE <name> FORCE and recreate it to reset the version sequence.
References
• loading/SQL_transaction.md
• loading/Stream_Load_transaction_interface.md
• administration/management/monitoring/metrics.md
• faq/shared_data_faq.md
• knowledge/trouble_shooting/fe_deadlock_problems.mdTravis (YaaaDingus)
08/18/2026, 7:29 PMRocky
08/18/2026, 7:29 PMVisibleVersion cannot advance if there is a "hole" in the version history. If you've skipped all INSERT_STREAMING transactions but the table is still stuck, check these three specific areas:
1. Check for Stuck Compaction Transactions
In Lake mode, Compactions are also transactions that consume a version number. If a compaction transaction (type LAKE_COMPACTION) is stuck in COMMITTED or PREPARED, it will block all subsequent INSERT_STREAMING versions from becoming visible.
* Action: Run SHOW PROC '/compactions';.
* Look for any row where the Error is not NULL or the FinishTime is empty.
* If you find a stuck compaction, get its TxnID and run:
sql
-- Note: Skip command also works for lake-compaction in v4.1+
ADMIN SKIP COMMITTED TRANSACTION <txn_id>;
2. Identify the Version Gap
Compare the actual version numbers to see exactly where the "hole" is.
* Action: Run SHOW PARTITIONS FROM <table_name>;.
* Check the VisibleVersion, NextVersion, and CompactVersion columns.
* If VisibleVersion is 100 and NextVersion is 105, there are 4 missing versions (101, 102, 103, 104).
* Now, find the transactions corresponding to those specific missing versions:
sql
-- Search for the specific database/table in the txn list
SHOW PROC '/transactions';
Look for any transaction (even those not labeled INSERT_STREAMING, such as SCHEMA_CHANGE or COMPACTION) that falls between the current VisibleVersion and the version of your stuck load.
3. Check for "PREPARED" Transactions
The ADMIN SKIP command only works on COMMITTED transactions. If you have an older transaction stuck in the PREPARED state (common if a BE/CN crashed mid-load), it will block the publish queue just as effectively.
* Action: Look at SHOW PROC '/transactions'; for any rows where State is PREPARED.
* Fix: Use ROLLBACK TRANSACTION <txn_id>; for these. You cannot "skip" a prepared transaction; you must abort it.
4. Inspect the Leader FE Logs for "Publish" Errors
If the metadata on S3 is inaccessible or corrupted, the FE will keep trying to publish and failing silently in the background.
* Action: Search your fe.warn.log or fe.log for the table name or the word publish.
* Look for: fail to publish version, tablet meta not found, or S3 connection refused.
* If you see fail to get tablet meta from remote storage, it means the data files for a committed transaction were deleted from S3 before they became visible (a rare race condition).
Final "Nuclear" Option for Shared-Data
If SHOW PARTITIONS shows a version gap that you cannot fill by skipping/aborting and the FE restart didn't help, the metadata sequence for that table is likely broken.
1. Backup the data (if possible via INSERT INTO ... SELECT).
2. Drop the table with FORCE: DROP TABLE <table_name> FORCE;.
3. Recreate the table.
In Shared-data mode, this is often faster than surgical metadata repair when the version sequence gets corrupted.
Recommended next step: Share the output of SHOW PARTITIONS FROM <table_name> and the top few rows of SHOW PROC '/transactions' (sorted by TxnID) if you need to identify the specific blocker.
References
• loading/SQL_transaction.md
• knowledge/trouble_shooting/fe_deadlock_problems.mdTravis (YaaaDingus)
08/18/2026, 7:30 PMRocky
08/18/2026, 7:30 PMCOMMITTED state after running the SKIP command and restarting the FE Leader, it means the Publish Version Daemon is unable to advance the version pointer for that table.
In StarRocks v4.1.4 (Lake mode), this is almost always caused by a "hidden" transaction or a specific metadata gap on S3. Here is the surgical approach to unstick it:
1. Identify the "Hole" in the Version Chain
StarRocks cannot publish version $N$ if version $N-1$ is missing.
* Run: SHOW PARTITIONS FROM <table_name>;
* Look at the VisibleVersion and NextVersion.
* Example: If VisibleVersion is 500 and the first stuck transaction in SHOW PROC '/transactions' is for version 505, there is a gap of versions 501, 502, 503, and 504.
* Action: You must find out what happened to those missing versions. They might be Compaction transactions that don't always appear in your filtered load view.
2. Check for "LAKE_COMPACTION" Transactions
In shared-data clusters, compactions are treated as transactions. If a compaction transaction fails or hangs, it blocks all subsequent INSERT_STREAMING data from becoming visible.
* Run: SHOW PROC '/transactions';
* Look for any row where the Label starts with COMPACTION_ or the TransactionId is smaller than your stuck load transactions.
* Action: If you find a stuck compaction transaction, apply the skip command to it:
sql
ADMIN SKIP COMMITTED TRANSACTION <txn_id>;
3. Verify the FE Leader and Configuration
* Ensure you are on the Leader FE: Only the Leader FE processes the Publish queue. Run SHOW FRONTENDS; and check the IsLeader column. Run your commands only on that node.
* Check the Skip Toggle: Ensure the "escape hatch" wasn't reset during the restart:
sql
ADMIN SHOW FRONTEND CONFIG LIKE 'enable_admin_skip_committed_txn';
-- Must be true
4. Check for S3 Metadata Errors (The "Missing Log" Issue)
If the metadata files (tablet logs) for a transaction were accidentally deleted from S3 (e.g., by an aggressive lifecycle policy or manual cleanup), the FE will hang forever trying to read them to "publish" the version.
* Action: Search the FE Leader fe.log or fe.warn.log for the word publish or your TxnID.
* Look for this error: fail to get tablet meta from remote storage or No such file or directory.
* Resolution: If the metadata is gone from S3, the version chain is permanently broken. The ADMIN SKIP command should handle this by creating a "No-Op" version, but if it fails to clear after a restart, the table's internal metadata state is likely corrupted.
5. Final Recovery (If the above fails)
If SHOW PARTITIONS shows that the VisibleVersion is not advancing despite no other transactions being visible in SHOW PROC, the metadata sequence is likely inconsistent.
Option A (Non-Destructive):
Force a metadata refresh by manually triggering a small load (e.g., INSERT INTO table VALUES (...)) and see if it also gets stuck. If it does, it confirms the "gate" is closed at a specific version.
Option B (The Reliable Fix):
Since it's an S3-backed table, the most reliable way to clear a corrupted version chain in v4.1.4 is:
1. CREATE TABLE <table_name_new> AS SELECT * FROM <table_name_stuck> WHERE 1=0;
2. INSERT INTO <table_name_new> SELECT _ FROM <table_name_stuck>; (Note: This only works for data that is _already* VISIBLE).
3. ALTER TABLE <table_name_stuck> RENAME <table_name_old>;
4. ALTER TABLE <table_name_new> RENAME <table_name_stuck>;
5. DROP TABLE <table_name_old> FORCE;
Summary recommendation: Run SHOW PARTITIONS and compare the VisibleVersion to the `TxnId`s in SHOW PROC. If there is any ID smaller than your stuck loads, skip that one first. If there are no smaller IDs, check the fe.warn.log for the specific reason the PublishVersionDaemon is rejecting the skip.
ReferencesRocky
08/18/2026, 7:30 PMTravis (YaaaDingus)
08/18/2026, 7:34 PMRocky
08/18/2026, 7:35 PMCOMMITTED in SHOW PROC '/transactions', you are likely dealing with "orphaned" transactions in the Global Transaction Manager (GTM).
In StarRocks v4.1.x, this happens because the transaction metadata is stored in the FE's memory and edit logs, and it doesn't always automatically purge when the associated table is deleted—especially if the transaction was already in the COMMITTED state (waiting for publish) when the drop occurred.
Why they are still there
When a table is dropped, the metadata is moved to the Recycle Bin (unless you used FORCE). The GTM keeps these transactions alive in case you RECOVER the table. If you used FORCE, the table is gone, but the GTM may still hold the transaction object because the "Publish" thread is now failing to find the table it's supposed to update, creating a loop.
How to clear them
1. Check the Recycle Bin
If you didn't use FORCE to drop the table, it is likely still sitting in the FE's recycle bin. The GTM will not abandon transactions for a table that can still be recovered.
* Check the bin: SHOW PROC '/catalog_recycle_bin';
* Action: If your table is there, you can either:
* RECOVER TABLE <table_name>; it, then try the ADMIN SKIP command again now that the table metadata is active.
* Wait for the catalog_trash_expire_second (default 24 hours) to pass, after which the FE will physically delete the table and eventually purge the transactions.
2. Manual "Surgical" Abort
If the table is already FORCE dropped or you cannot wait for the recycle bin to clear, you need to force the GTM to forget these transactions. Since the table is gone, the ADMIN SKIP command might fail because it can't find the table's version sequence to advance.
* Action: Try to manually abort them (even though they are COMMITTED):
sql
-- Try rollback first (sometimes works on orphaned COMMITTED in 4.x)
ROLLBACK TRANSACTION <txn_id>;
* Note: If ROLLBACK fails with "transaction is already committed", and the table is gone, these are truly orphaned.
3. Clearing the FE Image (The "Last Resort")
If the transactions persist through restarts and are cluttering your monitoring, they are persisted in the FE BDBJE edit logs.
1. Check the `TransactionId`s.
2. If they are not blocking new loads into new tables (which they shouldn't, as TxnIDs are global and will just increment), you can technically ignore them. They will eventually be rotated out of the `TransactionMgr`'s history buffer.
3. If they must be removed (e.g., they are causing FE memory pressure or log spam):
* You would need to perform a clean metadata restart, but this is highly dangerous and usually only done under support guidance.
* Safest approach: Recreate the table with a different name and continue operations. The orphaned transactions for the old table ID will eventually time out and be purged by the FE's TransactionCleaner thread (governed by label_keep_max_second, default is usually 3 days for finished/old txns).
Summary Checklist
1. Did you use DROP TABLE ... FORCE? If not, the transactions stay until the table leaves the recycle bin.
2. Are you on the FE Leader? Ensure you are running SHOW PROC and any skip commands on the actual Leader.
3. Check fe.log for the specific TxnIDs. If you see Table <id> not found errors repeating, it confirms they are orphaned.
If these transactions are blocking new loads on a new table with the same name, please let me know, as that indicates a different issue with the namespace lock in the FE.
References
• loading/SQL_transaction.md
• faq/shared_data_faq.mdTravis (YaaaDingus)
08/18/2026, 7:42 PMRocky
08/18/2026, 7:43 PMINSERT_STREAMING transactions are still stuck in COMMITTED despite your previous attempts, it means the Version Chain for the associated table(s) is broken. In StarRocks 4.1.x (Shared-data/Lake mode), a transaction cannot move from COMMITTED to VISIBLE if any previous version number is missing or stuck.
Follow these steps to diagnose the specific blocker:
1. Identify the "Queue Blocker"
Find the oldest Transaction ID among the 8 stuck ones.
* Run: SHOW PROC '/transactions'; and sort by TransactionId.
* Note the TransactionId and the Table name of the oldest row.
2. Check for a Version Gap
For that specific table, check if there is a gap between what is currently visible and what is trying to be published.
* Run: SHOW PARTITIONS FROM <table_name>;
* Compare VisibleVersion and NextVersion.
* If VisibleVersion = 100 but your stuck transaction is for Version 105, there are 4 missing versions (101-104) blocking the way.
* These missing versions are likely Compaction or Schema Change tasks that failed but didn't clean up their "reservation" of the version number.
3. Search the FE Leader Log for the specific TxnID
The FE Leader log will tell you exactly why it is refusing to publish that transaction.
* Search your fe.log or fe.warn.log for the specific TxnID found in Step 1.
* Common Errors to look for:
* `fail to get tablet meta from remote storage`: A metadata file is missing from S3/Object Storage.
* `rejected from agent-task-pool`: The thread pool for publishing is full.
* `wait for previous version to be visible`: Confirms a version gap.
4. Check for Metadata Locks
In v4.1.x, a metadata lock might be held by a background process (like an aborted Schema Change).
* Run:
sql
SELECT * FROM sys.fe_locks WHERE hold_time_ms > 10000;
* If you see a lock on that specific table held for a very long time, it is blocking the PublishVersionDaemon.
5. Surgical Fixes
Depending on what you find above, try these in order:
* A. Skip the oldest TxnID specifically:
Instead of a general skip, target the oldest ID:
sql
-- Ensure this is enabled
ADMIN SET FRONTEND CONFIG ("enable_admin_skip_committed_txn" = "true");
-- Skip the specific oldest ID
ADMIN SKIP COMMITTED TRANSACTION <oldest_txn_id>;
* B. Check for Stuck Compactions:
Even if they don't show as INSERT_STREAMING, they consume versions.
sql
SHOW PROC '/compactions';
If any row has an Error or is very old without a FinishTime, use ADMIN SKIP on that compaction's TxnID.
* C. Toggle Batch Publish (Temporary):
If the FE is struggling to coordinate many small publishes:
sql
ADMIN SET FRONTEND CONFIG ("lake_enable_batch_publish_version" = "false");
Wait 1 minute. If the transactions clear, you can re-enable it (true).
Recommendation: If you find the TxnID in the fe.warn.log and it says tablet meta not found, it is a confirmed metadata loss on S3. In that case, ADMIN SKIP on that specific ID is the only way to advance the version.
References
• faq/shared_data_faq.md
• administration/management/FE_configuration.md
• administration/management/monitoring/metrics.md
• administration/management/compaction.mdMoreno Garcia
08/19/2026, 6:02 PMNoOpPublish: true set aren't something you're doing wrong, that looks like a bug. If you haven't already, I'd open it at github.com/StarRocks/StarRocks/issues with your version (4.1.4), the SHOW PROC '/transactions' output, and the fe.log lines around one of the stuck txn IDs. That'll get maintainer eyes on it much faster than this channel will.
What I do want to weigh in on is how you got here, because I think there's a bigger fix available.
61 routine load jobs is, to my read, the actual root cause behind the OOM. The data itself goes to the BEs, but all the bookkeeping is on the FE: job state, task scheduling, Kafka offsets, and a transaction per task per batch, in memory and in the edit log. That's what your FEs were carrying when they ran out of memory, and the OOM is what left you with committed-but-never-published transactions. So yes, bigger FEs (memory especially) and you should do that regardless. But it doesn't change the shape of the problem: across the POCs I've run, routine load doesn't scale with the cluster the way people expect. You add BEs and the bottleneck stays on the FE side.
What I'd do instead is move those 61 topics onto the Kafka connector: docs.starrocks.io/docs/loading/Kafka-connector-starrocks
Same direction of data, different place the work happens. Instead of SR polling Kafka on its own scheduler, Kafka Connect consumes the topics and pushes into SR via Stream Load. You scale by adding Connect workers rather than hoping the FE keeps up, and you get real control over batch size and parallelism per topic — so you're committing far fewer, larger transactions, and none of the job scheduling or offset tracking lives inside SR anymore.
Two trade-offs worth knowing before you commit:
• you're now operating a Kafka Connect cluster (distributed mode if you want that scaling)
• the connector is at-least-once, where routine load gives you exactly-once. With primary key tables and a sensible key that's a non-issue, but it's a real difference.
I hope that helps, and if you open an issue paste the link here and I will escalate internally to my R&DJeff Ding
08/21/2026, 1:05 AMSHOW PROC '/transactions' will help you to find itTravis (YaaaDingus)
09/22/2026, 4:35 PM