Troubleshooting Guide: SQL Server Error 3928 — Marked Transaction Failed Due to Log Mark Timeout
Why This Error Happens
Error 3928 occurs when SQL Server cannot commit a marked transaction within the expected timeframe because it is unable to place a mark in the transaction log. This is most commonly caused by lock contention from a long-running or orphaned Microsoft Distributed Transaction Coordinator (MS DTC) transaction, an overloaded or fragmented transaction log file, or network latency between nodes in a distributed transaction scenario. In some cases, insufficient disk I/O throughput on the log drive or a stalled DTC service on Windows Server 2025 can also prevent the log mark from being written in time.
Step-by-Step Resolution Guide
Step 1: Identify Blocking or Orphaned DTC Transactions
- Run
sp_who2or querysys.dm_tran_active_transactionsandsys.dm_tran_database_transactionsto locate long-running or uncommitted transactions. - Check
sys.dm_tran_locksto see if the marked transaction is being blocked by another session. - Use the MS DTC console (
Component Services>Distributed Transaction Coordinator>Local DTC>Transaction List) to view and, if necessary, manually resolve in-doubt transactions.
Step 2: Restart and Reconfigure the MS DTC Service
- Open Services.msc on Windows Server 2025 / Windows 11 and restart the Distributed Transaction Coordinator service.
- Verify DTC network access is enabled:
Component Services>My Computer>Properties>MSDTCtab >Security Configuration, ensure “Network DTC Access,” “Allow Inbound,” and “Allow Outbound” are checked. - Confirm firewall rules allow DTC traffic (default dynamic RPC port range, or a statically configured port if hardened).
Step 3: Increase Transaction Log Capacity and Performance
- Check the log file size and autogrowth settings using
sys.database_filesor SSMS > Database Properties > Files. - Ensure the log file is on a dedicated, low-latency disk (SSD/NVMe recommended) separate from data files.
- Manually grow the log file ahead of time to avoid autogrowth stalls:
ALTER DATABASE [YourDB] MODIFY FILE (NAME = YourDB_log, SIZE = 5GB);
Step 4: Adjust the Marked Transaction Timeout
- If the timeout is too aggressive for your workload, increase the wait time using the
MARKoption timeout inBEGIN TRANSACTION ... WITH MARKcalls at the application/script level. - Review application code or ETL jobs issuing
COMMIT TRANwith marks and add retry logic with exponential backoff.
Step 5: Review SQL Server Error Logs and DTC Logs
- Open SQL Server Error Log (via SSMS > Management > SQL Server Logs) and cross-reference the timestamp of Error 3928 with any DTC-related warnings.
- Check Windows Event Viewer >
Applications and Services Logs>Microsoft>Windows>MSDTCfor correlating errors indicating resource manager timeouts.
Alternative or Verification Steps
- To verify the fix, re-run the marked transaction during a low-traffic window and confirm it commits without delay by checking
sys.dm_tran_database_transactionsfor a clean commit state. - If the issue persists, consider disabling distributed transactions for the specific operation (if business logic allows) by using local transactions only, which bypasses MS DTC coordination entirely.