Fine-Grained Re-Execution for Efficient Batched Commit of Distributed Transactions