Guru Guide To Sql Server Architecture And Internals.pdf -
He looked at sys.dm_tran_database_transactions during the ETL. One transaction had an old database_transaction_begin_time from 3 hours ago—an open transaction from a developer’s BEGIN TRAN in SSMS that was never committed or rolled back.
That open transaction was preventing the transaction log from truncating. The log had grown to 200 GB. The ETL’s large update inside FactSales_Load had to wait for log space, causing log autogrowth events (zero-initialization → slow). Guru Guide To Sql Server Architecture And Internals.pdf
Here’s a story that teaches a real-world lesson from those internals. The Case of the Midnight Slowdown He looked at sys
SELECT name, log_reuse_wait_desc FROM sys.databases WHERE name = 'SalesDB'; Result: LOG_BACKUP . Wait—backups were running fine. But why? The log had grown to 200 GB
UPDATE STATISTICS Orders; The plan switched to an index seek. The ETL dropped to 12 minutes. Good, but not great. Why not 8 minutes? Alex dug deeper. During the ETL, he monitored:
Index stats were stale. The query optimizer thought the scan was cheaper because it didn’t know the table had grown massively since the last stats update.